browser_actor_error.js (3028B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Test that clients can catch errors in actors. 8 */ 9 10 const ACTORS_URL = 11 "chrome://mochitests/content/browser/devtools/server/tests/browser/error-actor.js"; 12 13 add_task(async function test_old_actor() { 14 DevToolsServer.init(); 15 DevToolsServer.registerAllActors(); 16 17 ActorRegistry.registerModule(ACTORS_URL, { 18 prefix: "error", 19 constructor: "ErrorActor", 20 type: { global: true }, 21 }); 22 23 const transport = DevToolsServer.connectPipe(); 24 const gClient = new DevToolsClient(transport); 25 await gClient.connect(); 26 27 const { errorActor } = await gClient.mainRoot.rootForm; 28 ok(errorActor, "Found the error actor."); 29 30 await Assert.rejects( 31 gClient.request({ to: errorActor, type: "error" }), 32 err => 33 err.error == "unknownError" && 34 /error occurred while processing 'error/.test(err.message), 35 "The request should be rejected" 36 ); 37 38 await gClient.close(); 39 }); 40 41 const TEST_ERRORS_ACTOR_URL = 42 "chrome://mochitests/content/browser/devtools/server/tests/browser/test-errors-actor.js"; 43 add_task(async function test_protocoljs_actor() { 44 DevToolsServer.init(); 45 DevToolsServer.registerAllActors(); 46 47 info("Register the new TestErrorsActor"); 48 require(TEST_ERRORS_ACTOR_URL); 49 ActorRegistry.registerModule(TEST_ERRORS_ACTOR_URL, { 50 prefix: "testErrors", 51 constructor: "TestErrorsActor", 52 type: { global: true }, 53 }); 54 55 info("Create a DevTools client/server pair"); 56 const transport = DevToolsServer.connectPipe(); 57 const gClient = new DevToolsClient(transport); 58 await gClient.connect(); 59 60 info("Retrieve a TestErrorsFront instance"); 61 const testErrorsFront = await gClient.mainRoot.getFront("testErrors"); 62 ok(testErrorsFront, "has a TestErrorsFront instance"); 63 64 await Assert.rejects(testErrorsFront.throwsComponentsException(), e => { 65 return new RegExp( 66 `NS_ERROR_NOT_IMPLEMENTED from: ${testErrorsFront.actorID} ` + 67 `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)` 68 ).test(e.message); 69 }); 70 await Assert.rejects(testErrorsFront.throwsException(), e => { 71 // Not asserting the specific error message here, as it changes depending 72 // on the channel. 73 return new RegExp( 74 `Protocol error \\(TypeError\\):.* from: ${testErrorsFront.actorID} ` + 75 `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)` 76 ).test(e.message); 77 }); 78 await Assert.rejects(testErrorsFront.throwsJSError(), e => { 79 return new RegExp( 80 `Protocol error \\(Error\\): JSError from: ${testErrorsFront.actorID} ` + 81 `\\(${TEST_ERRORS_ACTOR_URL}:\\d+:\\d+\\)` 82 ).test(e.message); 83 }); 84 await Assert.rejects(testErrorsFront.throwsString(), e => { 85 return new RegExp(`ErrorString from: ${testErrorsFront.actorID}`).test( 86 e.message 87 ); 88 }); 89 await Assert.rejects(testErrorsFront.throwsObject(), e => { 90 return new RegExp(`foo from: ${testErrorsFront.actorID}`).test(e.message); 91 }); 92 93 await gClient.close(); 94 });