blob: 4ea09a83f894c6cfccb0d801944058658a9322fd [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests correctness of promisified protocol commands.\n`);
ProtocolClient.test.suppressRequestErrors = false;
function dumpArgument(name, value) {
TestRunner.addResult(name + ' result: ' + (typeof value === 'string' ? value : JSON.stringify(value)));
}
function processResult(name, promise) {
return promise.then(dumpArgument.bind(null, name + ': then'), dumpArgument.bind(null, name + ': catch'));
}
function sendMessageToBackendLoopback(message) {
var messageObject = JSON.parse(message);
messageObject.result = messageObject.params;
messageObject.error = messageObject.params && messageObject.params.error;
var response = JSON.stringify(messageObject);
setTimeout(InspectorFrontendAPI.dispatchMessage.bind(InspectorFrontendAPI, response), 0);
}
var inspectorJson = {
'domains': [{
'domain': 'Profiler',
'commands': [
{'name': 'commandArgs0'}, {'name': 'commandArgs1Rets0', 'parameters': [{'name': 'arg1', 'type': 'number'}]}, {
'name': 'commandArgs1Rets1',
'parameters': [{'name': 'arg1', 'type': 'object'}],
'returns': [{'name': 'arg1', 'type': 'object'}]
},
{
'name': 'commandArgs3Rets3',
'parameters': [
{'name': 'arg1', 'type': 'object'}, {'name': 'arg2', 'type': 'number', 'optional': true},
{'name': 'arg3', 'type': 'string', 'optional': true}
],
'returns': [
{'name': 'arg1', 'type': 'object'}, {'name': 'arg2', 'type': 'number'},
{'name': 'arg3', 'type': 'string'}
]
},
{'name': 'commandError', 'parameters': [{'name': 'error', 'type': 'object'}]}
]
}]
};
// The protocol definition above is not used, but is left as a reference for commands below.
ProtocolClient.inspectorBackend.registerCommand('Profiler.commandArgs0', [], []);
ProtocolClient.inspectorBackend.registerCommand(
'Profiler.commandArgs1Rets0', [{'name': 'arg1', 'type': 'number', 'optional': false}], []);
ProtocolClient.inspectorBackend.registerCommand(
'Profiler.commandArgs1Rets1', [{'name': 'arg1', 'type': 'object', 'optional': false}], ['arg1']);
ProtocolClient.inspectorBackend.registerCommand(
'Profiler.commandArgs3Rets3',
[
{'name': 'arg1', 'type': 'object', 'optional': false}, {'name': 'arg2', 'type': 'number', 'optional': true},
{'name': 'arg3', 'type': 'string', 'optional': true}
],
['arg1', 'arg2', 'arg3']);
ProtocolClient.inspectorBackend.registerCommand(
'Profiler.commandError', [{'name': 'error', 'type': 'object', 'optional': false}], []);
var sendMessageToBackendOriginal = InspectorFrontendHost.sendMessageToBackend;
InspectorFrontendHost.sendMessageToBackend = sendMessageToBackendLoopback;
var agent = SDK.targetManager.mainTarget().profilerAgent();
await processResult(
'commandError',
agent.commandError({'message': 'this is the error message'})); // Error: error in the protocol response
await processResult('commandArgs0', agent.commandArgs0());
await processResult('commandArgs0', agent.commandArgs0(1)); // Error: extra arg
await processResult('commandArgs1Rets0', agent.commandArgs1Rets0(123));
await processResult('commandArgs1Rets0', agent.commandArgs1Rets0(123, 456)); // Error: extra arg
await processResult('commandArgs1Rets0', agent.commandArgs1Rets0('abc')); // Error: wrong type
await processResult('commandArgs1Rets0', agent.commandArgs1Rets0()); // Error: missing arg
await processResult('commandArgs1Rets1', agent.commandArgs1Rets1({'value1': 234}));
await processResult('commandArgs1Rets1', agent.commandArgs1Rets1({'value1': 234}));
await processResult('commandArgs3Rets3', agent.invoke_commandArgs3Rets3({arg1: {}, arg2: 345, arg3: 'alph'}));
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3({}, 345));
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3({}, undefined, 'alph'));
await processResult(
'commandArgs3Rets3', agent.invoke_commandArgs3Rets3({arg1: {}, arg2: 'alph'})); // Error: wrong type
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3({}));
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3()); // Error: missing arg
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3({}, 'alph', 345)); // Error: wrong types
await processResult('commandArgs3Rets3', agent.commandArgs3Rets3({}, 'alph', 345, 678)); // Error: extra arg
InspectorFrontendHost.sendMessageToBackend = sendMessageToBackendOriginal;
TestRunner.completeTest();
})();