1865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// found in the LICENSE file. 4865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 59d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Flags: --expose-debug-as debug --allow-natives-syntax 6865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 7865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// Test debug events when we listen to all exceptions and 8865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org// there is a catch handler for the exception thrown in a Promise. 9a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// We expect a normal Exception debug event to be triggered. 10865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 11865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgDebug = debug.Debug; 12865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 139d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar expected_events = 1; 14865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgvar log = []; 15865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 16865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgvar p = new Promise(function(resolve, reject) { 17865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org log.push("resolve"); 18865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org resolve(); 19865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org}); 20865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 21865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgvar q = p.chain( 22865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org function() { 23865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org log.push("throw"); 24865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org throw new Error("caught"); 25865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org }); 26865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 27865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgq.catch( 28865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org function(e) { 29865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org assertEquals("caught", e.message); 30865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org }); 31865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 32865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgfunction listener(event, exec_state, event_data, data) { 33865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org try { 34865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org if (event == Debug.DebugEvent.Exception) { 359d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org expected_events--; 369d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertTrue(expected_events >= 0); 37865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org assertEquals("caught", event_data.exception().message); 388640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org assertSame(q, event_data.promise()); 39a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org assertFalse(event_data.uncaught()); 40865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org } 41865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org } catch (e) { 429d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org %AbortJS(e + "\n" + e.stack); 43865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org } 44865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org} 45865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 46865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgDebug.setBreakOnException(); 47865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgDebug.setListener(listener); 48865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 49865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orglog.push("end main"); 509d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 519d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgfunction testDone(iteration) { 529d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org function checkResult() { 539d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org try { 549d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertTrue(iteration < 10); 559d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org if (expected_events === 0) { 569d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertEquals(["resolve", "end main", "throw"], log); 579d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } else { 589d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org testDone(iteration + 1); 599d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 609d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } catch (e) { 619d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org %AbortJS(e + "\n" + e.stack); 629d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 639d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 649d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 659d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org // Run testDone through the Object.observe processing loop. 669d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org var dummy = {}; 679d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org Object.observe(dummy, checkResult); 689d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org dummy.dummy = dummy; 699d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 709d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 719d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgtestDone(0); 72