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(';'); |
+ 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({ |
+ 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 ? '...' : '')); |
+ lines[lineNumber] = lines[lineNumber].slice(0, columnNumber) + '#' + lines[lineNumber].slice(columnNumber); |
+ InspectorTest.log(lines.join('\n')); |
+ firstBreakpoint = false; |
+ }); |
+} |