1a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// found in the LICENSE file. 4a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 54b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org// Flags: --expose-debug-as debug 6a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 7a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// Test debug events when we only listen to uncaught exceptions and 89d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// an exception is thrown in the Promise constructor. 9a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// We expect an Exception debug event with a promise to be triggered. 10a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 11a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgDebug = debug.Debug; 12a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 13a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgvar step = 0; 14a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgvar exception = null; 15a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 16a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgfunction listener(event, exec_state, event_data, data) { 17a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org try { 18a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org if (event == Debug.DebugEvent.Exception) { 19a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertEquals(0, step); 20a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertEquals("uncaught", event_data.exception().message); 21a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertTrue(event_data.promise() instanceof Promise); 22a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertTrue(event_data.uncaught()); 23a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org // Assert that the debug event is triggered at the throw site. 24a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); 25a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org step++; 26a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org } 27a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org } catch (e) { 28a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org exception = e; 29a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org } 30a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org} 31a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 32a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgDebug.setBreakOnUncaughtException(); 33a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgDebug.setListener(listener); 34a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 35a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgvar p = new Promise(function(resolve, reject) { 36a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org throw new Error("uncaught"); // event 37a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org}); 38a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 39a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgassertEquals(1, step); 40a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgassertNull(exception); 41