• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax --expose-debug-as debug
6
7Debug = debug.Debug
8var exception = null;
9var break_count = 0;
10var expected_breaks = -1;
11
12function listener(event, exec_state, event_data, data) {
13  try {
14    if (event == Debug.DebugEvent.Break) {
15      assertTrue(exec_state.frameCount() != 0, "FAIL: Empty stack trace");
16      if (!break_count) {
17        // Count number of expected breakpoints in this source file.
18        var source_text = exec_state.frame(0).func().script().source();
19        expected_breaks = source_text.match(/\/\/\s*Break\s+\d+\./g).length;
20        print("Expected breaks: " + expected_breaks);
21      }
22      var source = exec_state.frame(0).sourceLineText();
23      print("paused at: " + source);
24      assertTrue(source.indexOf("// Break " + break_count + ".") > 0,
25                 "Unexpected pause at: " + source + "\n" +
26                 "Expected: // Break " + break_count + ".");
27      if (source.indexOf("StepOver.") !== -1) {
28        exec_state.prepareStep(Debug.StepAction.StepNext);
29      } else {
30        exec_state.prepareStep(Debug.StepAction.StepIn);
31      }
32      ++break_count;
33    }
34  } catch (e) {
35    exception = e;
36    print(e, e.stack);
37  }
38};
39
40Debug.setListener(listener);
41
42Promise.resolve(42)
43  .then(promise1)
44  .then(Object) // Should skip stepping into native.
45  .then(Boolean) // Should skip stepping into native.
46  .then(promise2)
47  .catch(promise3)
48  .then(promise4)
49  .catch(function(e) {
50    %AbortJS("FAIL: uncaught exception " + e);
51  });
52
53function promise1() {
54  debugger; // Break 0.
55  return exception || 1; // Break 1.
56} // Break 2.
57
58function promise2() {
59  throw new Error; // Break 3.
60}
61
62function promise3() {
63  return break_count; // Break 4.
64} // Break 5.
65
66function promise4() {
67  finalize(); // Break 6. StepOver.
68  return 0; // Break 7.
69} // Break 8. StepOver.
70
71function finalize() {
72  Promise.resolve().then(function() {
73    if (expected_breaks !== break_count) {
74      %AbortJS("FAIL: expected <" + expected_breaks + "> breaks instead of <" +
75               break_count + ">");
76    }
77    if (exception !== null) {
78      %AbortJS("FAIL: exception: " + exception);
79    }
80  });
81}
82