Chromium Code Reviews| Index: test/inspector/debugger/restore-breakpoint.js |
| diff --git a/test/inspector/debugger/restore-breakpoint.js b/test/inspector/debugger/restore-breakpoint.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..19ca98d387f2c2ee870ca62247af8c322c269b09 |
| --- /dev/null |
| +++ b/test/inspector/debugger/restore-breakpoint.js |
| @@ -0,0 +1,68 @@ |
| +// 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. |
| + |
| +print('Checks that debugger agent uses source content to restore breakpoints.'); |
| + |
| +Protocol.Debugger.enable(); |
| +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 = Array(1000).join(';'); |
|
alph
2017/02/28 00:47:26
';'.repeat(999)
kozy
2017/02/28 01:56:26
Done.
|
| + var newSource = `function foo() {\nnewCode();\n${longString};\nboo();\n}`; |
| + test(source, newSource, { lineNumber: 1, columnNumber: 0 }, next); |
| + } |
| +]); |
| + |
| +var finishedTests = 0; |
| +function test(source, newSource, location, next) { |
| + var sourceURL = `test${++finishedTests}.js`; |
| + Protocol.Debugger.setBreakpointByUrl({ |
|
alph
2017/02/28 00:47:26
await Protocol.Debugger.setBreakpointByUrl(...);
kozy
2017/02/28 01:56:26
done.
|
| + url: sourceURL, |
| + lineNumber: location.lineNumber, |
| + columnNumber: location.columnNumber |
| + }).then(() => Protocol.Runtime.evaluate({ expression: `${source}\n//# sourceURL=${sourceURL}` })) |
| + .then(() => Protocol.Runtime.evaluate({ expression: `${newSource}\n//# sourceURL=${sourceURL}` })) |
| + .then(next); |
| + |
| + var firstBreakpoint = true; |
| + Protocol.Debugger.onBreakpointResolved(message => { |
| + var lineNumber = message.params.location.lineNumber; |
| + var columnNumber = message.params.location.columnNumber; |
| + var currentSource = firstBreakpoint ? source : newSource; |
| + var lines = currentSource.split('\n'); |
| + lines = lines.map(line => line.substring(0, 77) + (line.length > 77 ? '...' : '')); |
|
alph
2017/02/28 00:47:26
nit: line => line.length > 80 ? line.substring(0,
kozy
2017/02/28 01:56:26
Done.
|
| + lines[lineNumber] = lines[lineNumber].slice(0, columnNumber) + '#' + lines[lineNumber].slice(columnNumber); |
| + InspectorTest.log(lines.join('\n')); |
| + firstBreakpoint = false; |
| + }); |
| +} |