| // 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 that debugger agent uses source content to restore breakpoints.'); |
| |
| Protocol.Debugger.enable(); |
| var finishedTests = 0; |
| InspectorTest.runTestSuite([ |
| function testSameSource(next) { |
| var source = 'function foo() {\nboo();\n}'; |
| test(source, source, { lineNumber: 1, columnNumber: 0 }, next); |
| }, |
| |
| function testOneLineOffset(next) { |
| var source = 'function foo() {\nboo();\n}'; |
| var newSource = 'function foo() {\nboo();\nboo();\n}'; |
| test(source, newSource, { lineNumber: 1, columnNumber: 0 }, next); |
| }, |
| |
| function testTwoSimilarLinesCloseToOriginalLocation1(next) { |
| var source = 'function foo() {\n\n\nboo();\n}'; |
| var newSource = 'function foo() {\nboo();\n\nnewCode();\nboo();\n\n\n\nboo();\n}'; |
| test(source, newSource, { lineNumber: 3, columnNumber: 0 }, next); |
| }, |
| |
| function testTwoSimilarLinesCloseToOriginalLocation2(next) { |
| var source = 'function foo() {\n\n\nboo();\n}'; |
| var newSource = 'function foo() {\nboo();\nnewLongCode();\nnewCode();\nboo();\n\n\n\nboo();\n}'; |
| test(source, newSource, { lineNumber: 3, columnNumber: 0 }, next); |
| }, |
| |
| function testHintIgnoreWhiteSpaces(next) { |
| var source = 'function foo() {\n\n\n\nboo();\n}'; |
| var newSource = 'function foo() {\nfoo();\n\n\nboo();\n}'; |
| test(source, newSource, { lineNumber: 1, columnNumber: 0 }, next); |
| }, |
| |
| function testCheckOnlyLimitedOffsets(next) { |
| var source = 'function foo() {\nboo();\n}'; |
| var longString = ';'.repeat(1000); |
| var newSource = `function foo() {\nnewCode();\n${longString};\nboo();\n}`; |
| test(source, newSource, { lineNumber: 1, columnNumber: 0 }, next); |
| } |
| ]); |
| |
| async function test(source, newSource, location, next) { |
| function dumpSourceWithBreakpoint(source, location) { |
| var lineNumber = location.lineNumber; |
| var columnNumber = location.columnNumber; |
| var lines = source.split('\n'); |
| lines = lines.map(line => line.length > 80 ? line.substring(0, 77) + '...' : line); |
| lines[lineNumber] = lines[lineNumber].slice(0, columnNumber) + '#' + lines[lineNumber].slice(columnNumber); |
| InspectorTest.log(lines.join('\n')); |
| } |
| |
| Protocol.Debugger.onBreakpointResolved(message => { |
| dumpSourceWithBreakpoint(newSource, message.params.location); |
| }) |
| |
| var sourceURL = `test${++finishedTests}.js`; |
| await Protocol.Runtime.evaluate({ expression: `${source}\n//# sourceURL=${sourceURL}` }); |
| let {result:{locations}} = await Protocol.Debugger.setBreakpointByUrl({ |
| url: sourceURL, |
| lineNumber: location.lineNumber, |
| columnNumber: location.columnNumber |
| }); |
| dumpSourceWithBreakpoint(source, locations[0]); |
| await Protocol.Runtime.evaluate({ expression: `${newSource}\n//# sourceURL=${sourceURL}` }); |
| next(); |
| } |