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