| Index: test/inspector/protocol-test.js
|
| diff --git a/test/inspector/protocol-test.js b/test/inspector/protocol-test.js
|
| index 07a71635a9cc8a6f170f1e19bb68528357ea453c..3589d37e1eb2bc5e8f6675f24a5713f676e0f1f0 100644
|
| --- a/test/inspector/protocol-test.js
|
| +++ b/test/inspector/protocol-test.js
|
| @@ -6,84 +6,51 @@ 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._eventHandler = {};
|
| +
|
| +Protocol = new Proxy({}, {
|
| + get: function(target, agentName, receiver) {
|
| + return new Proxy({}, {
|
| + get: function(target, methodName, receiver) {
|
| + const eventPattern = /^on(ce)?([A-Z][A-Za-z0-9]+)/;
|
| + var match = eventPattern.exec(methodName);
|
| + if (!match) {
|
| + return (args) => InspectorTest._sendCommandPromise(`${agentName}.${methodName}`, args || {});
|
| + } else {
|
| + var eventName = match[2];
|
| + eventName = eventName.charAt(0).toLowerCase() + eventName.slice(1);
|
| + if (match[1])
|
| + return (args) => InspectorTest._waitForEventPromise(`${agentName}.${eventName}`, args || {});
|
| + else
|
| + return (listener) => { InspectorTest._eventHandler[`${agentName}.${eventName}`] = listener };
|
| + }
|
| + }
|
| + });
|
| }
|
| -}
|
| +});
|
|
|
| -InspectorTest.sendCommandPromise = function(method, params)
|
| -{
|
| - return new Promise(fulfill => InspectorTest.sendCommand(method, params, fulfill));
|
| -}
|
| +InspectorTest.log = print.bind(null);
|
|
|
| -InspectorTest.waitForEventPromise = function(eventName)
|
| +InspectorTest.logMessage = function(message)
|
| {
|
| - return new Promise(fulfill => InspectorTest.eventHandler[eventName] = fullfillAndClearListener.bind(null, fulfill));
|
| -
|
| - function fullfillAndClearListener(fulfill, result)
|
| - {
|
| - delete InspectorTest.eventHandler[eventName];
|
| - fulfill(result);
|
| - }
|
| -}
|
| + if (message.id)
|
| + message.id = "<messageId>";
|
|
|
| -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);
|
| + const nonStableFields = new Set(["objectId", "scriptId", "exceptionId", "timestamp"]);
|
| + var objects = [ message ];
|
| + while (objects.length) {
|
| + var object = objects.shift();
|
| + for (var key in object) {
|
| + if (nonStableFields.has(key))
|
| + object[key] = `<${key}>`;
|
| + else if (typeof object[key] === "object")
|
| + objects.push(object[key]);
|
| }
|
| - } 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(message);
|
| + return message;
|
| +}
|
|
|
| InspectorTest.logObject = function(object, title)
|
| {
|
| @@ -133,27 +100,6 @@ InspectorTest.logObject = function(object, title)
|
| InspectorTest.log(lines.join("\n"));
|
| }
|
|
|
| -InspectorTest.logMessage = function(message)
|
| -{
|
| - if (message.id)
|
| - message.id = 0;
|
| -
|
| - const nonStableFields = new Set(["objectId", "scriptId", "exceptionId"]);
|
| - var objects = [ message ];
|
| - while (objects.length) {
|
| - var object = objects.shift();
|
| - for (var key in object) {
|
| - if (nonStableFields.has(key))
|
| - object[key] = `<${key}>`;
|
| - else if (typeof object[key] === "object")
|
| - objects.push(object[key]);
|
| - }
|
| - }
|
| -
|
| - InspectorTest.logObject(message);
|
| - return message;
|
| -}
|
| -
|
| InspectorTest.completeTest = quit.bind(null);
|
|
|
| InspectorTest.completeTestAfterPendingTimeouts = function()
|
| @@ -163,18 +109,32 @@ InspectorTest.completeTestAfterPendingTimeouts = function()
|
| awaitPromise: true }, InspectorTest.completeTest);
|
| }
|
|
|
| -InspectorTest.evaluateInPage = function(string, callback)
|
| +InspectorTest.addScript = function(string)
|
| {
|
| - InspectorTest.sendCommand("Runtime.evaluate", { "expression": string }, function(message) {
|
| + return InspectorTest._sendCommandPromise("Runtime.evaluate", { "expression": string }).then(dumpErrorIfNeeded);
|
| +
|
| + function dumpErrorIfNeeded(message)
|
| + {
|
| if (message.error) {
|
| InspectorTest.log("Error while executing '" + string + "': " + message.error.message);
|
| InspectorTest.completeTest();
|
| }
|
| - else if (callback)
|
| - callback(message.result.result.value);
|
| - });
|
| + }
|
| };
|
|
|
| +InspectorTest.startDumpingProtocolMessages = function()
|
| +{
|
| + InspectorTest._dumpInspectorProtocolMessages = true;
|
| +}
|
| +
|
| +InspectorTest.sendRawCommand = function(requestId, command, handler)
|
| +{
|
| + if (InspectorTest._dumpInspectorProtocolMessages)
|
| + print("frontend: " + command);
|
| + InspectorTest._dispatchTable.set(requestId, handler);
|
| + sendMessageToBackend(command);
|
| +}
|
| +
|
| InspectorTest.checkExpectation = function(fail, name, messageObject)
|
| {
|
| if (fail === !!messageObject.error) {
|
| @@ -203,3 +163,48 @@ InspectorTest.runTestSuite = function(testSuite)
|
| }
|
| nextTest();
|
| }
|
| +
|
| +InspectorTest._sendCommandPromise = function(method, params)
|
| +{
|
| + var requestId = ++InspectorTest._requestId;
|
| + var messageObject = { "id": requestId, "method": method, "params": params };
|
| + var fulfillCallback;
|
| + var promise = new Promise(fulfill => fulfillCallback = fulfill);
|
| + InspectorTest.sendRawCommand(requestId, JSON.stringify(messageObject), fulfillCallback);
|
| + return promise;
|
| +}
|
| +
|
| +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();
|
| + }
|
| +}
|
|
|