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 uncaught exceptions and 89d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// the Promise is rejected in a chained closure after it has been resolved. 99d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org// We expect no Exception debug event to be triggered. 109d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 119d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug = debug.Debug; 129d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 139d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar log = []; 149d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 159d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar p = new Promise(function(resolve, reject) { 169d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org log.push("resolve"); 179d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org resolve(reject); 189d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org}); 199d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 209d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgvar q = p.chain( 219d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org function(value) { 229d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertEquals(["resolve", "end main"], log); 239d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org value(new Error("reject")); 249d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org }); 259d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 269d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgfunction listener(event, exec_state, event_data, data) { 279d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org try { 289d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org assertTrue(event != Debug.DebugEvent.Exception); 299d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } catch (e) { 309d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org %AbortJS(e + "\n" + e.stack); 319d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org } 329d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org} 339d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 349d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug.setBreakOnException(); 359d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orgDebug.setListener(listener); 369d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.org 379d72b8dd94263d9f500f18255d67f0c7b8c3527amachenbach@chromium.orglog.push("end main"); 38