| // 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; |
| } |