| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| |
| var Debug = debug.Debug; |
| var listenerComplete = false; |
| var exception = null; |
| var count = 0; |
| var log = []; |
| var done = false; |
| |
| function LogX(x) { |
| var stored_count = count; |
| return function() { |
| log.push(`[${stored_count}] ${x}`); |
| }; |
| } |
| |
| function DebuggerStatement() { |
| log.push(`[${count}] debugger`); |
| if (count++ < 3) { |
| debugger; |
| } |
| } |
| |
| function listener(event, exec_state, event_data, data) { |
| if (event != Debug.DebugEvent.Break) return; |
| try { |
| var p = Promise.resolve(); |
| var q = p.then(LogX("then 1")); |
| p.then(LogX("then 2")); |
| q.then(LogX("then 3")); |
| q.then(DebuggerStatement); |
| var r = q.then(() => { throw 1; }); |
| r.catch(LogX("catch")); |
| listenerComplete = true; |
| } catch (e) { |
| exception = e; |
| print(e, e.stack); |
| quit(1); |
| }; |
| }; |
| |
| // Add the debug event listener. |
| Debug.setListener(listener); |
| |
| DebuggerStatement(); |
| LogX("start")(); |
| |
| // Make sure that the debug event listener was invoked. |
| assertTrue(listenerComplete); |
| |
| %RunMicrotasks(); |
| |
| var expectation = |
| [ "[0] debugger", "[1] start", "[1] then 1", |
| "[1] then 2", "[1] then 3", "[1] debugger", |
| "[2] then 1", "[2] then 2", "[1] catch", |
| "[2] then 3", "[2] debugger", "[3] then 1", |
| "[3] then 2", "[2] catch", "[3] then 3", |
| "[3] debugger", "[3] catch", |
| ]; |
| |
| assertEquals(expectation, log); |