summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/browser/browser_directorscript_actors_exports.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /devtools/server/tests/browser/browser_directorscript_actors_exports.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/server/tests/browser/browser_directorscript_actors_exports.js')
-rw-r--r--devtools/server/tests/browser/browser_directorscript_actors_exports.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/devtools/server/tests/browser/browser_directorscript_actors_exports.js b/devtools/server/tests/browser/browser_directorscript_actors_exports.js
new file mode 100644
index 000000000..f9ef56f51
--- /dev/null
+++ b/devtools/server/tests/browser/browser_directorscript_actors_exports.js
@@ -0,0 +1,87 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const {DirectorManagerFront} = require("devtools/shared/fronts/director-manager");
+const {DirectorRegistry} = require("devtools/server/actors/director-registry");
+
+DirectorRegistry.clear();
+
+add_task(function* () {
+ let browser = yield addTab(MAIN_DOMAIN + "director-script-target.html");
+ let doc = browser.contentDocument;
+
+ initDebuggerServer();
+ let client = new DebuggerClient(DebuggerServer.connectPipe());
+ let form = yield connectDebuggerClient(client);
+
+ DirectorRegistry.clear();
+ let directorManager = DirectorManagerFront(client, form);
+
+ // director scripts attach method defaults to module.exports
+ let attachModuleExports = yield testDirectorScriptExports(directorManager, {
+ scriptId: "testDirectorScript_moduleExports",
+ scriptCode: "(" + (function () {
+ module.exports = function () {};
+ }).toString() + ")();",
+ scriptOptions: {}
+ });
+ ok(attachModuleExports.port, "testDirectorScript_moduleExports attach event received");
+
+ // director scripts attach method can be configured using the attachMethod scriptOptions
+ let attachExportsAttach = yield testDirectorScriptExports(directorManager, {
+ scriptId: "testDirectorScript_exportsAttach",
+ scriptCode: "(" + (function () {
+ exports.attach = function () {};
+ }).toString() + ")();",
+ scriptOptions: {
+ attachMethod: "attach"
+ }
+ });
+ ok(attachExportsAttach.port, "testDirectorScript_exportsAttach attach event received");
+
+ // director scripts without an attach method generates an error event
+ let errorUndefinedAttachMethod = yield testDirectorScriptExports(directorManager, {
+ scriptId: "testDirectorScript_undefinedAttachMethod",
+ scriptCode: "(" + (function () {
+ // this director script should raise an error
+ // because it doesn't export any attach method
+ }).toString() + ")();",
+ scriptOptions: {
+ attachMethod: "attach"
+ }
+ });
+ let { message } = errorUndefinedAttachMethod;
+ ok(!!message, "testDirectorScript_undefinedAttachMethod error event received");
+ assertIsDirectorScriptError(errorUndefinedAttachMethod);
+
+ yield client.close();
+ gBrowser.removeCurrentTab();
+ DirectorRegistry.clear();
+});
+
+function assertIsDirectorScriptError(error) {
+ ok(!!error.message, "errors should contain a message");
+ ok(!!error.stack, "errors should contain a stack trace");
+ ok(!!error.fileName, "errors should contain a fileName");
+ ok(typeof error.columnNumber == "number", "errors should contain a columnNumber");
+ ok(typeof error.lineNumber == "number", "errors should contain a lineNumber");
+
+ ok(!!error.directorScriptId, "errors should contain a directorScriptId");
+}
+
+function* testDirectorScriptExports(directorManager, directorScriptDef) {
+ let { scriptId } = directorScriptDef;
+
+ DirectorRegistry.install(scriptId, directorScriptDef);
+
+ let waitForAttach = once(directorManager, "director-script-attach");
+ let waitForError = once(directorManager, "director-script-error");
+ directorManager.enableByScriptIds([scriptId], {reload: false});
+
+ let attachOrErrorEvent = yield Promise.race([waitForAttach, waitForError]);
+
+ return attachOrErrorEvent;
+}