19d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 29d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 39d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// found in the LICENSE file. 49d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 59d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Flags: --expose-debug-as debug --allow-natives-syntax 69d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 79d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// Test debug events when we listen to all exceptions and 89d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// there is a catch handler for the to-be-rejected Promise. 99d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// We expect a normal Exception debug event to be triggered. 109d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 119d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug = debug.Debug; 129d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 139d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar log = []; 149d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar expected_events = 1; 159d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 169d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar p = new Promise(function(resolve, reject) { 179d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org log.push("resolve"); 189d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org resolve(); 199d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org}); 209d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 219d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar q = p.chain( 229d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org function(value) { 239d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org log.push("reject"); 249d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org return Promise.reject(new Error("reject")); 259d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org }); 269d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 279d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgq.catch( 289d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org function(e) { 299d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertEquals("reject", e.message); 309d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org }); 319d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 329d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 339d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgfunction listener(event, exec_state, event_data, data) { 349d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org try { 359d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org if (event == Debug.DebugEvent.Exception) { 369d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org expected_events--; 379d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertTrue(expected_events >= 0); 389d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertEquals("reject", event_data.exception().message); 398640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org assertSame(q, event_data.promise()); 409d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertFalse(event_data.uncaught()); 419d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 429d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } catch (e) { 439d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org %AbortJS(e + "\n" + e.stack); 449d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 459d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 469d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 479d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug.setBreakOnException(); 489d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug.setListener(listener); 499d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 509d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orglog.push("end main"); 519d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 529d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgfunction testDone(iteration) { 539d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org function checkResult() { 549d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org try { 559d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertTrue(iteration < 10); 569d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org if (expected_events === 0) { 579d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertEquals(["resolve", "end main", "reject"], log); 589d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } else { 599d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org testDone(iteration + 1); 609d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 619d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } catch (e) { 629d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org %AbortJS(e + "\n" + e.stack); 639d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 649d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 659d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 669d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org // Run testDone through the Object.observe processing loop. 679d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org var dummy = {}; 689d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org Object.observe(dummy, checkResult); 699d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org dummy.dummy = dummy; 709d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 719d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 729d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgtestDone(0); 73