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

Unified Diff: test/inspector/protocol-test.js

Issue 2370743003: [inspector] added inspector test runner [part 4] (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
« no previous file with comments | « test/inspector/inspector.status ('k') | test/inspector/testcfg.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/inspector/protocol-test.js
diff --git a/test/inspector/protocol-test.js b/test/inspector/protocol-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..52fb4b1d263b76057fcfc25a30587a0c1ea7437c
--- /dev/null
+++ b/test/inspector/protocol-test.js
@@ -0,0 +1,177 @@
+// 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 = {};
+InspectorTest._dispatchTable = new Map();
+InspectorTest._requestId = 0;
+InspectorTest._dumpInspectorProtocolMessages = false;
+InspectorTest.eventHandler = {};
+
+InspectorTest.startDumpingProtocolMessages = function()
+{
+ InspectorTest._dumpInspectorProtocolMessages = true;
+}
+
+InspectorTest.sendCommand = function(method, params, handler)
+{
+ var requestId = ++InspectorTest._requestId;
+ var messageObject = { "id": requestId, "method": method, "params": params };
+ InspectorTest.sendRawCommand(requestId, JSON.stringify(messageObject), handler);
+}
+
+InspectorTest.sendRawCommand = function(requestId, command, handler)
+{
+ if (InspectorTest._dumpInspectorProtocolMessages)
+ print("frontend: " + command);
+ InspectorTest._dispatchTable.set(requestId, handler);
+ sendMessageToBackend(command);
+}
+
+InspectorTest.sendCommandOrDie = function(command, properties, callback)
+{
+ InspectorTest.sendCommand(command, properties, commandCallback);
+ function commandCallback(msg)
+ {
+ if (msg.error) {
+ InspectorTest.log("ERROR: " + msg.error.message);
+ InspectorTest.completeTest();
+ return;
+ }
+ if (callback)
+ callback(msg.result);
+ }
+}
+
+InspectorTest.sendCommandPromise = function(method, params)
+{
+ return new Promise(fulfill => InspectorTest.sendCommand(method, params, fulfill));
+}
+
+InspectorTest.waitForEventPromise = function(eventName)
+{
+ return new Promise(fulfill => InspectorTest.eventHandler[eventName] = fullfillAndClearListener.bind(null, fulfill));
+
+ function fullfillAndClearListener(fulfill, result)
+ {
+ delete InspectorTest.eventHandler[eventName];
+ fulfill(result);
+ }
+}
+
+InspectorTest.dispatchMessage = function(messageObject)
+{
+ if (InspectorTest._dumpInspectorProtocolMessages)
+ print("backend: " + JSON.stringify(messageObject));
+ try {
+ var messageId = messageObject["id"];
+ if (typeof messageId === "number") {
+ var handler = InspectorTest._dispatchTable.get(messageId);
+ if (handler) {
+ handler(messageObject);
+ InspectorTest._dispatchTable.delete(messageId);
+ }
+ } else {
+ var eventName = messageObject["method"];
+ var eventHandler = InspectorTest.eventHandler[eventName];
+ if (eventHandler)
+ eventHandler(messageObject);
+ }
+ } catch (e) {
+ InspectorTest.log("Exception when dispatching message: " + e + "\n" + e.stack + "\n message = " + JSON.stringify(messageObject, null, 2));
+ InspectorTest.completeTest();
+ }
+}
+
+InspectorTest.log = print.bind(null);
+
+InspectorTest.logObject = function(object, title)
+{
+ var lines = [];
+
+ function dumpValue(value, prefix, prefixWithName)
+ {
+ if (typeof value === "object" && value !== null) {
+ if (value instanceof Array)
+ dumpItems(value, prefix, prefixWithName);
+ else
+ dumpProperties(value, prefix, prefixWithName);
+ } else {
+ lines.push(prefixWithName + String(value).replace(/\n/g, " "));
+ }
+ }
+
+ function dumpProperties(object, prefix, firstLinePrefix)
+ {
+ prefix = prefix || "";
+ firstLinePrefix = firstLinePrefix || prefix;
+ lines.push(firstLinePrefix + "{");
+
+ var propertyNames = Object.keys(object);
+ propertyNames.sort();
+ for (var i = 0; i < propertyNames.length; ++i) {
+ var name = propertyNames[i];
+ if (!object.hasOwnProperty(name))
+ continue;
+ var prefixWithName = " " + prefix + name + " : ";
+ dumpValue(object[name], " " + prefix, prefixWithName);
+ }
+ lines.push(prefix + "}");
+ }
+
+ function dumpItems(object, prefix, firstLinePrefix)
+ {
+ prefix = prefix || "";
+ firstLinePrefix = firstLinePrefix || prefix;
+ lines.push(firstLinePrefix + "[");
+ for (var i = 0; i < object.length; ++i)
+ dumpValue(object[i], " " + prefix, " " + prefix + "[" + i + "] : ");
+ lines.push(prefix + "]");
+ }
+
+ dumpValue(object, "", title);
+ InspectorTest.log(lines.join("\n"));
+}
+
+InspectorTest.completeTest = quit.bind(null);
+
+InspectorTest.evaluateInPage = function(string, callback)
+{
+ InspectorTest.sendCommand("Runtime.evaluate", { "expression": string }, function(message) {
+ if (message.error) {
+ InspectorTest.log("Error while executing '" + string + "': " + message.error.message);
+ InspectorTest.completeTest();
+ }
+ else if (callback)
+ callback(message.result.result.value);
+ });
+};
+
+InspectorTest.checkExpectation = function(fail, name, messageObject)
+{
+ if (fail === !!messageObject.error) {
+ InspectorTest.log("PASS: " + name);
+ return true;
+ }
+
+ InspectorTest.log("FAIL: " + name + ": " + JSON.stringify(messageObject));
+ InspectorTest.completeTest();
+ return false;
+}
+InspectorTest.expectedSuccess = InspectorTest.checkExpectation.bind(null, false);
+InspectorTest.expectedError = InspectorTest.checkExpectation.bind(null, true);
+
+InspectorTest.runTestSuite = function(testSuite)
+{
+ function nextTest()
+ {
+ if (!testSuite.length) {
+ InspectorTest.completeTest();
+ return;
+ }
+ var fun = testSuite.shift();
+ InspectorTest.log("\nRunning test: " + fun.name);
+ fun(nextTest);
+ }
+ nextTest();
+}
« no previous file with comments | « test/inspector/inspector.status ('k') | test/inspector/testcfg.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698