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 7 Debug = debug.Debug 8 var exception = null; 9 var break_count = 0; 10 var expected_breaks = -1; 11 12 function 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 40 Debug.setListener(listener); 41 42 Promise.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 53 function promise1() { 54 debugger; // Break 0. 55 return exception || 1; // Break 1. 56 } // Break 2. 57 58 function promise2() { 59 throw new Error; // Break 3. 60 } 61 62 function promise3() { 63 return break_count; // Break 4. 64 } // Break 5. 65 66 function promise4() { 67 finalize(); // Break 6. StepOver. 68 return 0; // Break 7. 69 } // Break 8. StepOver. 70 71 function 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