Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
add_task(async function test_sendMessage_error() {
async function background() {
let circ = {};
circ.circ = circ;
let testCases = [
// [arguments, expected error string],
[[], "runtime.sendMessage's message argument is missing"],
[
[null, null, null, 42],
"runtime.sendMessage's last argument is not a function",
],
[[null, null, 1], "runtime.sendMessage's options argument is invalid"],
[
[1, null, null],
"runtime.sendMessage's extensionId argument is invalid",
],
[
[null, null, null, null, null],
"runtime.sendMessage received too many arguments",
],
// Even when the parameters are accepted, we still expect an error
// because there is no onMessage listener.
[
[null, null, null],
"Could not establish connection. Receiving end does not exist.",
],
// Structured cloning doesn't work with DOM objects
[[null, location, null], "Location object could not be cloned."],
[[null, [circ, location], null], "Location object could not be cloned."],
];
// Repeat all tests with the undefined value instead of null.
for (let [args, expectedError] of testCases.slice()) {
args = args.map(arg => (arg === null ? undefined : arg));
testCases.push([args, expectedError]);
}
for (let [args, expectedError] of testCases) {
let description = `runtime.sendMessage(${args.map(String).join(", ")})`;
await browser.test.assertRejects(
browser.runtime.sendMessage(...args),
expectedError,
`expected error message for ${description}`
);
}
browser.test.notifyPass("sendMessage parameter validation");
}
let extensionData = {
background,
};
let extension = ExtensionTestUtils.loadExtension(extensionData);
await extension.startup();
await extension.awaitFinish("sendMessage parameter validation");
await extension.unload();
});