Index: test/inspector/debugger/restore-provisional-breakpoint-by-line.js |
diff --git a/test/inspector/debugger/restore-provisional-breakpoint-by-line.js b/test/inspector/debugger/restore-provisional-breakpoint-by-line.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..272ba268c55ac2a0de69d0c7d8d6d2699deb4ba5 |
--- /dev/null |
+++ b/test/inspector/debugger/restore-provisional-breakpoint-by-line.js |
@@ -0,0 +1,91 @@ |
+// 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. |
+ |
+var source = ` |
+console.log(239); |
+function test() { |
+ return 42; |
+}`; |
+ |
+var longPrefix = new Array(512).join(';'); |
+var sourceWithLongLines = ` |
+function test() { |
+ ${longPrefix}console.log(1); |
+ ${longPrefix}console.log(2); |
+ return 42; |
+}`; |
+ |
+var sourceWithLongLinesEdited = ` |
+function test() { |
+ ${longPrefix}console.log(3); |
+ ${longPrefix}console.log(1); |
+ ${longPrefix}console.log(2); |
+ return 42; |
+}`; |
+ |
+InspectorTest.setupScriptMap(); |
+Protocol.Debugger.enable(); |
+ |
+InspectorTest.runTestSuite([ |
+ function trivial(next) { |
+ runTest({ |
+ lineNumber: 8, |
+ url: 'test1.js', |
+ sourceBefore: source, |
+ sourceAfter: generateNewLines(9) + source, |
+ lineOffset: 5, |
+ columnOffset: 4 }).then(next); |
+ }, |
+ |
+ function dontCheckMoreThenNLines(next) { |
+ runTest({ |
+ lineNumber: 8, |
+ url: 'test2.js', |
+ sourceBefore: source, |
+ sourceAfter: generateNewLines(17) + source, |
+ lineOffset: 5, |
+ columnOffset: 4 }).then(next); |
+ }, |
+ |
+ function dontStoreLongStrings(next) { |
+ runTest({ |
+ lineNumber: 14, |
+ url: 'test3.js', |
+ sourceBefore: sourceWithLongLines, |
+ sourceAfter: sourceWithLongLinesEdited, |
+ lineOffset: 12, |
+ columnOffset: 0 }).then(next); |
+ } |
+]); |
+ |
+function runTest(test) { |
+ let isBefore = true; |
+ Protocol.Debugger.onPaused(message => { |
+ InspectorTest.logCallFrames([ message.params.callFrames[0] ]); |
+ var source = isBefore ? test.sourceBefore : test.sourceAfter; |
+ source += '\n//# sourceURL=' + test.url; |
+ isBefore = false; |
+ var lineNumber = message.params.callFrames[0].location.lineNumber - test.lineOffset; |
+ var lineText = source.split('\n')[lineNumber]; |
+ InspectorTest.log('break at\'' + lineText.substr(Math.max(lineText.length - 32, 0)) + '\''); |
+ Protocol.Debugger.resume(); |
+ }); |
+ Protocol.Debugger.onBreakpointResolved(InspectorTest.logMessage); |
+ |
+ let breakpointId; |
+ InspectorTest.addScript(test.sourceBefore + '\n//# sourceURL=' + test.url, test.lineOffset, test.columnOffset); |
+ return InspectorTest.waitPendingTasks() |
+ .then(() => Protocol.Debugger.setBreakpointByUrl({ lineNumber: test.lineNumber, url: test.url })) |
+ .then(InspectorTest.logMessage) |
+ .then(message => breakpointId = message.result.breakpointId) |
+ .then(() => Protocol.Runtime.evaluate({ expression: 'test()' })) |
+ .then(() => InspectorTest.addScript(test.sourceAfter + '\n//# sourceURL=' + test.url, test.lineOffset, test.columnOffset )) |
+ .then(() => InspectorTest.waitPendingTasks()) |
+ .then(() => Protocol.Runtime.evaluate({ expression: 'test()' })) |
+ .then(() => Protocol.Debugger.removeBreakpoint({ breakpointId: breakpointId })) |
+} |
+ |
+function generateNewLines(n) { |
+ return new Array(n + 1).join('\n'); |
+} |