Index: test/inspector/debugger/script-on-after-compile.js |
diff --git a/test/inspector/debugger/script-on-after-compile.js b/test/inspector/debugger/script-on-after-compile.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9281ace12a065642ac2667536f96e5c175556d1c |
--- /dev/null |
+++ b/test/inspector/debugger/script-on-after-compile.js |
@@ -0,0 +1,93 @@ |
+// Copyright 2016 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. |
+// Flags: --expose_gc |
+ |
+print("Checks that inspector correctly process compiled scripts"); |
+ |
+function addScripts() { |
+ // sourceURL in the same line |
+ return addScript("function foo1(){}//# sourceURL=oneline.js\n") |
+ // sourceURL without end line |
+ .then(() => addScript("function foo2(){}//# sourceURL=oneline-without-nl.js")) |
+ // other source urls |
+ .then(() => addScript("function foo3(){}\n//# sourceURL=twoline.js\n")) |
+ .then(() => addScript("function foo4(){}\n\n//# sourceURL=threeline.js\n")) |
+ |
+ // sourceMappingURL in the same line |
+ .then(() => addScript("function foo5(){}//# sourceMappingURL=oneline-map\n")) |
+ // sourceMappingURL without end line |
+ .then(() => addScript("function foo6(){}//# sourceMappingURL=oneline-without-nl-map")) |
+ // other sourceMappingURLs |
+ .then(() => addScript("function foo7(){}\n//# sourceMappingURL=twoline-map\n")) |
+ .then(() => addScript("function foo8(){}\n\n//# sourceMappingURL=threeline-map\n")) |
+ |
+ // sourceURL + sourceMappingURL |
+ .then(() => addScript("function foo9(){}//# sourceMappingURL=source-mapping-url-map\n//# sourceURL=source-url.js")) |
+ .then(() => addScript("function foo10(){}//# sourceURL=source-url.js\n//# sourceMappingURL=source-mapping-url-map")) |
+ |
+ // non zero endLine and endColumn.. |
+ .then(() => addScript("function foo11(){}\n//# sourceURL=end1.js")) |
+ // .. + 1 character |
+ .then(() => addScript("function foo12(){}\n//# sourceURL=end2.js ")) |
+ // script without sourceURL |
+ .then(() => addScript("function foo13(){}")) |
+ // script in eval |
+ .then(() => addScript("function foo15(){}; eval(\"function foo14(){}//# sourceURL=eval.js\")//# sourceURL=eval-wrapper.js")) |
+ // sourceURL and sourceMappingURL works even for script with syntax error |
+ .then(() => addScript("}//# sourceURL=failed.js\n//# sourceMappingURL=failed-map")) |
+ // empty lines at end |
+ .then(() => addScript("function foo16(){}\n")) |
+ .then(() => addScript("function foo17(){}\n\n")) |
+ .then(() => addScript("function foo18(){}\n\n\n")) |
+ .then(() => addScript("function foo19(){}\n\n\n\n")); |
+} |
+ |
+Protocol.Debugger.onScriptParsed((message) => requestSourceAndDump(message, true)); |
+Protocol.Debugger.onScriptFailedToParse((message) => requestSourceAndDump(message, false)); |
+addScripts() |
+ .then(() => Protocol.Debugger.enable()) |
+ .then(addScripts) |
+ .then(() => Protocol.Debugger.disable()) |
+ |
+ .then(() => InspectorTest.log("Run gc and then Debugger.enable()..")) |
+ .then(() => Protocol.Runtime.evaluate({ expression: "for (let i = 1; i < 20; ++i) eval(`foo${i} = undefined`); gc();" })) |
+ .then(() => Protocol.Debugger.enable()) |
+ .then(InspectorTest.completeTest); |
+ |
+function addScript(source) { |
+ return Protocol.Runtime.evaluate({ expression: source }); |
+} |
+ |
+function requestSourceAndDump(scriptParsedMessage, scriptParsed) { |
+ Protocol.Debugger.getScriptSource({ scriptId: scriptParsedMessage.params.scriptId }) |
+ .then((sourceMessage) => dumpScriptParsed(scriptParsedMessage, sourceMessage, scriptParsed)); |
+} |
+ |
+function dumpScriptParsed(scriptParsedMessage, sourceMessage, scriptParsed) { |
+ var params = scriptParsedMessage.params; |
+ var re = /[A-Z0-9]{40,40}/; |
+ if (!params.hash || !matchExact(re, params.hash)) |
+ params.hash = "Invalid hash: " + params.hash; |
+ else |
+ params.hash = "<hash>"; |
+ if (params.executionContextId <= 0) |
+ params.executionContextId = "Invalid executionContextId: " + params.executionContextId; |
+ else |
+ params.executionContextId = "<executionContextId>"; |
+ if (params.scriptId * 1 <= 0) |
+ params.scriptId = "Invalid scriptId: " + params.scriptId; |
+ else |
+ params.scriptId = "<scriptId>"; |
+ |
+ var sourceResult = sourceMessage.result; |
+ sourceResult.scriptSource = sourceResult.scriptSource.replace(/\n/g, "<nl>"); |
+ InspectorTest.log(scriptParsed ? "scriptParsed" : "scriptFailedToParse"); |
+ InspectorTest.logObject(sourceResult); |
+ InspectorTest.logObject(params); |
+} |
+ |
+function matchExact(re, str) { |
+ var match = str.match(re); |
+ return match !== null && str === match[0]; |
+} |