// 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 framework debugging with blackboxed ranges.'); contextGroup.addInlineScript( ` function foo() { return boo(); } function boo() { return 42; } function testFunction() { foo(); }`, 'test.js'); session.setupScriptMap(); Protocol.Debugger.onPaused(message => { session.logCallFrames(message.params.callFrames); InspectorTest.log(''); Protocol.Debugger.stepInto(); }); var scriptId; Protocol.Debugger.onScriptParsed(message => { if (message.params.url === 'test.js') { scriptId = message.params.scriptId; } }); Protocol.Debugger.enable() .then(() => Protocol.Debugger.setBlackboxPatterns({patterns: ['expr\.js']})) .then(() => InspectorTest.runTestSuite(testSuite)); var testSuite = [ function testEntireScript(next) { testPositions([position(0, 0)]).then(next); }, function testFooNotBlackboxed(next) { testPositions([position(11, 0)]).then(next); }, function testFooBlackboxed(next) { testPositions([position(8, 0), position(10, 3)]).then(next); }, function testBooPartiallyBlackboxed1(next) { // first line is not blackboxed, second and third - blackboxed. testPositions([position(12, 0)]).then(next); }, function testBooPartiallyBlackboxed2(next) { // first line is blackboxed, second - not, third - blackboxed. testPositions([ position(11, 0), position(12, 0), position(13, 0) ]).then(next); }, function testBooPartiallyBlackboxed3(next) { // first line is blackboxed, second and third - not. testPositions([ position(11, 0), position(12, 0), position(14, 0) ]).then(next); } ]; function testPositions(positions) { contextGroup.schedulePauseOnNextStatement('', ''); return Protocol.Debugger .setBlackboxedRanges({scriptId: scriptId, positions: positions}) .then(InspectorTest.logMessage) .then( () => Protocol.Runtime.evaluate( {expression: 'testFunction()//# sourceURL=expr.js'})); } function position(line, column) { return {lineNumber: line, columnNumber: column}; }