/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Test that clients can catch errors in actors.
*/
const ACTORS_URL =
"chrome://mochitests/content/browser/devtools/server/tests/browser/error-actor.js";
add_task(async
function test_old_actor() {
DevToolsServer.init();
DevToolsServer.registerAllActors();
ActorRegistry.registerModule(ACTORS_URL, {
prefix:
"error",
constructor:
"ErrorActor",
type: { global:
true },
});
const transport = DevToolsServer.connectPipe();
const gClient =
new DevToolsClient(transport);
await gClient.connect();
const { errorActor } = await gClient.mainRoot.rootForm;
ok(errorActor,
"Found the error actor.");
await
Assert.rejects(
gClient.request({ to: errorActor, type:
"error" }),
err =>
err.error ==
"unknownError" &&
/error occurred
while processing
'error/.test(err.message),
"The request should be rejected"
);
await gClient.close();
});
const TEST_ERRORS_ACTOR_URL =
"chrome://mochitests/content/browser/devtools/server/tests/browser/test-errors-actor.js";
add_task(async
function test_protocoljs_actor() {
DevToolsServer.init();
DevToolsServer.registerAllActors();
info(
"Register the new TestErrorsActor");
require(TEST_ERRORS_ACTOR_URL);
ActorRegistry.registerModule(TEST_ERRORS_ACTOR_URL, {
prefix:
"testErrors",
constructor:
"TestErrorsActor",
type: { global:
true },
});
info(
"Create a DevTools client/server pair");
const transport = DevToolsServer.connectPipe();
const gClient =
new DevToolsClient(transport);
await gClient.connect();
info(
"Retrieve a TestErrorsFront instance");
const testErrorsFront = await gClient.mainRoot.getFront(
"testErrors");
ok(testErrorsFront,
"has a TestErrorsFront instance");
await
Assert.rejects(testErrorsFront.throwsComponentsException(), e => {
return new RegExp(
`NS_ERROR_NOT_IMPLEMENTED from: ${testErrorsFront.actorID} ` +
`\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
).test(e.message);
});
await
Assert.rejects(testErrorsFront.throwsException(), e => {
// Not asserting the specific error message here, as it changes depending
// on the channel.
return new RegExp(
`Protocol error \\(TypeError\\):.* from: ${testErrorsFront.actorID} ` +
`\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
).test(e.message);
});
await
Assert.rejects(testErrorsFront.throwsJSError(), e => {
return new RegExp(
`Protocol error \\(Error\\): JSError from: ${testErrorsFront.actorID} ` +
`\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)`
).test(e.message);
});
await
Assert.rejects(testErrorsFront.throwsString(), e => {
return new RegExp(`ErrorString from: ${testErrorsFront.actorID}`).test(
e.message
);
});
await
Assert.rejects(testErrorsFront.throwsObject(), e => {
return new RegExp(`foo from: ${testErrorsFront.actorID}`).test(e.message);
});
await gClient.close();
});