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