// 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. InspectorTest.log('Checks Debugger.pause'); let contextGroup1 = new InspectorTest.ContextGroup(); let session1 = contextGroup1.connect(); let Protocol1 = session1.Protocol; session1.setupScriptMap(); Protocol1.Debugger.enable(); InspectorTest.runAsyncTestSuite([ async function testPause() { Protocol1.Debugger.pause(); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); }, async function testSkipFrameworks() { Protocol1.Debugger.setBlackboxPatterns({patterns: ['framework\.js']}); Protocol1.Debugger.pause(); Protocol1.Runtime.evaluate({expression: 'var a = 42; //# sourceURL=framework.js'}); Protocol1.Runtime.evaluate({expression: 'var a = 239;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); }, async function testSkipOtherContext1() { let contextGroup2 = new InspectorTest.ContextGroup(); let session2 = contextGroup2.connect(); let Protocol2 = session2.Protocol; Protocol2.Debugger.enable({}); Protocol1.Debugger.pause(); Protocol1.Runtime.evaluate({expression: 'var a = 42; //# sourceURL=framework.js'}); Protocol2.Runtime.evaluate({expression: 'var a = 239;'}); Protocol1.Runtime.evaluate({expression: 'var a = 1;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); await Protocol2.Debugger.disable({}); }, async function testSkipOtherContext2() { let contextGroup2 = new InspectorTest.ContextGroup(); let session2 = contextGroup2.connect(); let Protocol2 = session2.Protocol; session2.setupScriptMap(); Protocol2.Debugger.enable({}); Protocol2.Debugger.pause({}); Protocol1.Runtime.evaluate({expression: 'var a = 42; //# sourceURL=framework.js'}); Protocol2.Runtime.evaluate({expression: 'var a = 239;'}); Protocol1.Runtime.evaluate({expression: 'var a = 1;'}); await waitPauseAndDumpLocation(session2); // should not resume pause from different context group id. Protocol1.Debugger.resume(); Protocol2.Debugger.stepOver({}); await waitPauseAndDumpLocation(session2); await Protocol2.Debugger.resume({}); await Protocol2.Debugger.disable({}); }, async function testWithNativeBreakpoint() { contextGroup1.schedulePauseOnNextStatement('', ''); await Protocol1.Debugger.pause(); contextGroup1.cancelPauseOnNextStatement(); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); await Protocol1.Debugger.pause(); contextGroup1.schedulePauseOnNextStatement('', ''); contextGroup1.cancelPauseOnNextStatement(); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); contextGroup1.schedulePauseOnNextStatement('', ''); contextGroup1.cancelPauseOnNextStatement(); await Protocol1.Debugger.pause(); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); }, async function testResumeAnotherGroup() { let contextGroup2 = new InspectorTest.ContextGroup(); let session2 = contextGroup2.connect(); session2.setupScriptMap(); let Protocol2 = session2.Protocol; Protocol2.Debugger.enable(); Protocol1.Debugger.pause(); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}); await waitPauseAndDumpLocation(session1); InspectorTest.logMessage(await Protocol2.Debugger.resume()); InspectorTest.logMessage(await Protocol2.Debugger.stepOver()); InspectorTest.logMessage(await Protocol2.Debugger.stepInto()); InspectorTest.logMessage(await Protocol2.Debugger.stepOut()); await Protocol1.Debugger.resume(); await Protocol2.Debugger.disable(); }, async function testDisableBreaksShouldCancelPause() { await Protocol1.Debugger.pause(); await Protocol1.Debugger.setBreakpointsActive({active: false}); Protocol1.Runtime.evaluate({expression: 'var a = 42;'}) .then(() => Protocol1.Debugger.setBreakpointsActive({active: true})) .then(() => Protocol1.Runtime.evaluate({expression: 'debugger'})); await waitPauseAndDumpLocation(session1); await Protocol1.Debugger.resume(); } ]); async function waitPauseAndDumpLocation(session) { var message = await session.Protocol.Debugger.oncePaused(); InspectorTest.log('paused at:'); await session.logSourceLocation(message.params.callFrames[0].location); return message; }