Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Unified Diff: test/inspector/debugger/set-script-source.js

Issue 2369753004: [inspector] added inspector test runner [part 5] (Closed)
Patch Set: addressed comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/inspector/debugger/set-script-source.js
diff --git a/test/inspector/debugger/set-script-source.js b/test/inspector/debugger/set-script-source.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e58503357e78373c5d661fbac09d411d1a0c154
--- /dev/null
+++ b/test/inspector/debugger/set-script-source.js
@@ -0,0 +1,151 @@
+// 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.
+
+InspectorTest.evaluateInPage(
+`function TestExpression(a, b) {
+ return a + b;
+}`);
+
+// A general-purpose engine for sending a sequence of protocol commands.
+// The clients provide requests and response handlers, while the engine catches
+// errors and makes sure that once there's nothing to do completeTest() is called.
+// @param step is an object with command, params and callback fields
+function runRequestSeries(step) {
+ processStep(step);
+
+ function processStep(currentStep) {
+ try {
+ processStepOrFail(currentStep);
+ } catch (e) {
+ InspectorTest.log(e.stack);
+ InspectorTest.completeTest();
+ }
+ }
+
+ function processStepOrFail(currentStep) {
+ if (!currentStep) {
+ InspectorTest.completeTest();
+ return;
+ }
+ if (!currentStep.command) {
+ // A simple loopback step.
+ var next = currentStep.callback();
+ processStep(next);
+ return;
+ }
+
+ var innerCallback = function(response) {
+ var next;
+ if ("error" in response) {
+ if (!("errorHandler" in currentStep)) {
+ // Error message is not logged intentionally, it may be platform-specific.
+ InspectorTest.log("Protocol command '" + currentStep.command + "' failed");
+ InspectorTest.completeTest();
+ return;
+ }
+ try {
+ next = currentStep.errorHandler(response.error);
+ } catch (e) {
+ InspectorTest.log(e.stack);
+ InspectorTest.completeTest();
+ return;
+ }
+ } else {
+ try {
+ next = currentStep.callback(response.result);
+ } catch (e) {
+ InspectorTest.log(e.stack);
+ InspectorTest.completeTest();
+ return;
+ }
+ }
+ processStep(next);
+ }
+ InspectorTest.sendCommand(currentStep.command, currentStep.params, innerCallback);
+ }
+}
+
+function logEqualsCheck(actual, expected)
+{
+ if (actual === expected) {
+ InspectorTest.log("PASS, result value: " + actual);
+ } else {
+ InspectorTest.log("FAIL, actual value: " + actual + ", expected: " + expected);
+ }
+}
+function logCheck(description, success)
+{
+ InspectorTest.log(description + ": " + (success ? "PASS" : "FAIL"));
+}
+
+var firstStep = { callback: enableDebugger };
+
+runRequestSeries(firstStep);
+
+function enableDebugger() {
+ return { command: "Debugger.enable", params: {}, callback: evalFunction };
+}
+
+function evalFunction(response) {
+ var expression = "TestExpression(2, 4)";
+ return { command: "Runtime.evaluate", params: { expression: expression }, callback: callbackEvalFunction };
+}
+
+function callbackEvalFunction(result) {
+ InspectorTest.log("Function evaluate: " + JSON.stringify(result.result));
+ logEqualsCheck(result.result.value, 6);
+
+ return { command: "Runtime.evaluate", params: { expression: "TestExpression" }, callback: callbackEvalFunctionObject };
+}
+
+function callbackEvalFunctionObject(result) {
+ return { command: "Runtime.getProperties", params: { objectId: result.result.objectId }, callback: callbackFunctionDetails };
+}
+
+function callbackFunctionDetails(result)
+{
+ var scriptId;
+ for (var prop of result.internalProperties) {
+ if (prop.name === "[[FunctionLocation]]")
+ scriptId = prop.value.value.scriptId;
+ }
+ return createScriptManipulationArc(scriptId, null);
+}
+
+// Several steps with scriptId in context.
+function createScriptManipulationArc(scriptId, next) {
+ return { command: "Debugger.getScriptSource", params: { scriptId: scriptId }, callback: callbackGetScriptSource };
+
+ var originalText;
+
+ function callbackGetScriptSource(result) {
+ originalText = result.scriptSource;
+ var patched = originalText.replace("a + b", "a * b");
+
+ return { command: "Debugger.setScriptSource", params: { scriptId: scriptId, scriptSource: patched }, callback: callbackSetScriptSource };
+ }
+
+ function callbackSetScriptSource(result) {
+ var expression = "TestExpression(2, 4)";
+ return { command: "Runtime.evaluate", params: { expression: expression }, callback: callbackEvalFunction2 };
+ }
+
+ function callbackEvalFunction2(result) {
+ InspectorTest.log("Function evaluate: " + JSON.stringify(result.result));
+ logEqualsCheck(result.result.value, 8);
+
+ var patched = originalText.replace("a + b", "a # b");
+
+ return { command: "Debugger.setScriptSource", params: { scriptId: scriptId, scriptSource: patched }, callback: errorCallbackSetScriptSource2 };
+ }
+
+ function errorCallbackSetScriptSource2(result) {
+ var exceptionDetails = result.exceptionDetails;
+ logCheck("Has error reported", !!exceptionDetails);
+ logCheck("Reported error is a compile error", !!exceptionDetails);
+ if (exceptionDetails)
+ logEqualsCheck(exceptionDetails.lineNumber, 1);
+ return next;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698