// Copyright 2017 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. let {session, contextGroup, Protocol} = InspectorTest.start('Checks Debugger.pauseOnAsynCall with setTimeout.'); session.setupScriptMap(); Protocol.Debugger.enable(); InspectorTest.runAsyncTestSuite([ async function testSetTimeout() { Protocol.Runtime.evaluate({expression: 'debugger; setTimeout(() => 1, 0);'}); await Protocol.Debugger.oncePaused(); Protocol.Debugger.stepOver(); await waitPauseAndDumpLocation(); Protocol.Debugger.stepInto({breakOnAsyncCall: true}); let parentStackTraceId = await waitPauseAndDumpLocation(); Protocol.Debugger.pauseOnAsyncCall({parentStackTraceId}); Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); }, async function testDebuggerStmtBeforeCallback1() { Protocol.Runtime.evaluate({expression: 'debugger; setTimeout(() => 1, 0);debugger;'}); Protocol.Runtime.evaluate({expression: 'setTimeout(\'debugger//should-break-here\', 0)'}); await Protocol.Debugger.oncePaused(); Protocol.Debugger.stepOver(); await waitPauseAndDumpLocation(); Protocol.Debugger.stepInto({breakOnAsyncCall: true}); let parentStackTraceId = await waitPauseAndDumpLocation(); Protocol.Debugger.pauseOnAsyncCall({parentStackTraceId}); await Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); }, async function testDebuggerStmtBeforeCallback2() { Protocol.Runtime.evaluate({expression: 'debugger;\nsetTimeout(\'debugger//should-break-here\', 0);\nsetTimeout(() => 1, 0);'}); await Protocol.Debugger.oncePaused(); Protocol.Debugger.stepOver(); await Protocol.Debugger.oncePaused(); Protocol.Debugger.stepOver(); await waitPauseAndDumpLocation(); Protocol.Debugger.stepInto({breakOnAsyncCall: true}); let parentStackTraceId = await waitPauseAndDumpLocation(); Protocol.Debugger.pauseOnAsyncCall({parentStackTraceId}); Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); await InspectorTest.waitForPendingTasks(); }, async function testSetTimeoutWithoutJS() { Protocol.Runtime.evaluate({expression: 'debugger; setTimeout(\'}\', 0);\nsetTimeout(\'var a = 239;\', 0);\nsetTimeout(\'debugger//should-break-here\', 0);'}); await Protocol.Debugger.oncePaused(); Protocol.Debugger.stepOver(); await waitPauseAndDumpLocation(); Protocol.Debugger.stepInto({breakOnAsyncCall: true}); let parentStackTraceId = await waitPauseAndDumpLocation(); Protocol.Debugger.pauseOnAsyncCall({parentStackTraceId}); Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); }, async function testResume() { Protocol.Debugger.pause(); Protocol.Runtime.evaluate({expression: 'setTimeout(() => 42, 0)'}); await waitPauseAndDumpLocation(); Protocol.Debugger.stepInto({breakOnAsyncCall: true}); let parentStackTraceId = await waitPauseAndDumpLocation(); Protocol.Debugger.pauseOnAsyncCall({parentStackTraceId}); Protocol.Debugger.resume(); await waitPauseAndDumpLocation(); await Protocol.Debugger.resume(); } ]); async function waitPauseAndDumpLocation() { var {params: {callFrames, asyncCallStackTraceId}} = await Protocol.Debugger.oncePaused(); if (!asyncCallStackTraceId) { InspectorTest.log('paused at:'); await session.logSourceLocation(callFrames[0].location); } return asyncCallStackTraceId; }