summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/fixtures
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/fixtures')
-rw-r--r--addon-sdk/source/test/fixtures/addon-install-unit-test@mozilla.com.xpibin0 -> 5670 bytes
-rw-r--r--addon-sdk/source/test/fixtures/addon-sdk/data/border-style.css4
-rw-r--r--addon-sdk/source/test/fixtures/addon-sdk/data/test-contentScriptFile.js5
-rw-r--r--addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.html13
-rw-r--r--addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.js29
-rw-r--r--addon-sdk/source/test/fixtures/addon-sdk/data/test.html13
-rw-r--r--addon-sdk/source/test/fixtures/addon/bootstrap.js9
-rw-r--r--addon-sdk/source/test/fixtures/addon/index.js4
-rw-r--r--addon-sdk/source/test/fixtures/addon/package.json5
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/manifest.mf17
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.rsabin0 -> 4191 bytes
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.sf4
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/bootstrap.js10
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/install.rdf27
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap-addon/options.xul3
-rw-r--r--addon-sdk/source/test/fixtures/bootstrap/utils.js52
-rw-r--r--addon-sdk/source/test/fixtures/border-style.css4
-rw-r--r--addon-sdk/source/test/fixtures/child-process-scripts.js81
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/addEventListener.js6
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/jsctypes.js6
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/onerror.js6
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/onmessage.js8
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/setTimeout.js8
-rw-r--r--addon-sdk/source/test/fixtures/chrome-worker/xhr.js11
-rw-r--r--addon-sdk/source/test/fixtures/create_xpi.py15
-rw-r--r--addon-sdk/source/test/fixtures/es5.js8
-rw-r--r--addon-sdk/source/test/fixtures/include-file.css4
-rw-r--r--addon-sdk/source/test/fixtures/index.html18
-rw-r--r--addon-sdk/source/test/fixtures/jsm-package/Test.jsm11
-rw-r--r--addon-sdk/source/test/fixtures/jsm-package/index.js46
-rw-r--r--addon-sdk/source/test/fixtures/jsm-package/package.json3
-rw-r--r--addon-sdk/source/test/fixtures/loader/cycles/a.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/cycles/b.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/cycles/c.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/cycles/main.js14
-rw-r--r--addon-sdk/source/test/fixtures/loader/errors/boomer.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/errors/main.js9
-rw-r--r--addon-sdk/source/test/fixtures/loader/exceptions/boomer.js9
-rw-r--r--addon-sdk/source/test/fixtures/loader/exceptions/main.js11
-rw-r--r--addon-sdk/source/test/fixtures/loader/globals/main.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/invalid.json3
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/manifest.json14
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/mutation.json1
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/nodotjson.json.js8
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/test.json3
-rw-r--r--addon-sdk/source/test/fixtures/loader/json/test.json.js7
-rw-r--r--addon-sdk/source/test/fixtures/loader/lazy/main.js9
-rw-r--r--addon-sdk/source/test/fixtures/loader/missing-twice/file.json1
-rw-r--r--addon-sdk/source/test/fixtures/loader/missing-twice/main.js32
-rw-r--r--addon-sdk/source/test/fixtures/loader/missing/main.js10
-rw-r--r--addon-sdk/source/test/fixtures/loader/self/main.js8
-rw-r--r--addon-sdk/source/test/fixtures/loader/syntax-error/error.js11
-rw-r--r--addon-sdk/source/test/fixtures/loader/syntax-error/main.js10
-rw-r--r--addon-sdk/source/test/fixtures/loader/unsupported/fennec.js10
-rw-r--r--addon-sdk/source/test/fixtures/loader/unsupported/firefox.js10
-rw-r--r--addon-sdk/source/test/fixtures/mofo_logo.SVG45
-rw-r--r--addon-sdk/source/test/fixtures/moz.build22
-rw-r--r--addon-sdk/source/test/fixtures/moz_favicon.icobin0 -> 1406 bytes
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/a.js5
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/a/index.js5
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/b.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/c.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/dummy.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/dir/test.jsm6
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/expectedmap.json25
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/index.js37
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/newmodule/index.js5
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/newmodule/lib/file.js5
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/newmodule/package.json3
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/package.json10
-rw-r--r--addon-sdk/source/test/fixtures/native-addon-test/utils/index.js7
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/ignore.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/index.js19
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/lib/ignore.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/lib/internal.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/lib/tabs.js6
-rw-r--r--addon-sdk/source/test/fixtures/native-overrides-test/package.json18
-rw-r--r--addon-sdk/source/test/fixtures/preferences/curly-id/package.json14
-rw-r--r--addon-sdk/source/test/fixtures/preferences/no-prefs/package.json6
-rw-r--r--addon-sdk/source/test/fixtures/preferences/preferences-branch/package.json14
-rw-r--r--addon-sdk/source/test/fixtures/preferences/simple-prefs/package.json75
-rw-r--r--addon-sdk/source/test/fixtures/sandbox-complex-character.js5
-rw-r--r--addon-sdk/source/test/fixtures/sandbox-normal.js7
-rw-r--r--addon-sdk/source/test/fixtures/test-addon-extras-window.html21
-rw-r--r--addon-sdk/source/test/fixtures/test-addon-extras.html31
-rw-r--r--addon-sdk/source/test/fixtures/test-contentScriptFile.js5
-rw-r--r--addon-sdk/source/test/fixtures/test-context-menu.js5
-rw-r--r--addon-sdk/source/test/fixtures/test-iframe-postmessage.html23
-rw-r--r--addon-sdk/source/test/fixtures/test-iframe.html12
-rw-r--r--addon-sdk/source/test/fixtures/test-iframe.js16
-rw-r--r--addon-sdk/source/test/fixtures/test-message-manager.js6
-rw-r--r--addon-sdk/source/test/fixtures/test-net-url.txt1
-rw-r--r--addon-sdk/source/test/fixtures/test-page-mod.html12
-rw-r--r--addon-sdk/source/test/fixtures/test-sidebar-addon-global.html15
-rw-r--r--addon-sdk/source/test/fixtures/test-trusted-document.html20
-rw-r--r--addon-sdk/source/test/fixtures/test.html25
-rw-r--r--addon-sdk/source/test/fixtures/testLocalXhr.json1
97 files changed, 1213 insertions, 0 deletions
diff --git a/addon-sdk/source/test/fixtures/addon-install-unit-test@mozilla.com.xpi b/addon-sdk/source/test/fixtures/addon-install-unit-test@mozilla.com.xpi
new file mode 100644
index 000000000..516c1fc3c
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-install-unit-test@mozilla.com.xpi
Binary files differ
diff --git a/addon-sdk/source/test/fixtures/addon-sdk/data/border-style.css b/addon-sdk/source/test/fixtures/addon-sdk/data/border-style.css
new file mode 100644
index 000000000..6941ccb20
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-sdk/data/border-style.css
@@ -0,0 +1,4 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+div { border-style: dashed; }
diff --git a/addon-sdk/source/test/fixtures/addon-sdk/data/test-contentScriptFile.js b/addon-sdk/source/test/fixtures/addon-sdk/data/test-contentScriptFile.js
new file mode 100644
index 000000000..7dc0e3f24
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-sdk/data/test-contentScriptFile.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+self.postMessage("msg from contentScriptFile");
diff --git a/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.html b/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.html
new file mode 100644
index 000000000..85264034a
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.html
@@ -0,0 +1,13 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Page Worker test</title>
+</head>
+<body>
+ <p id="paragraph">Lorem ipsum dolor sit amet.</p>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.js b/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.js
new file mode 100644
index 000000000..5114fe4e0
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-sdk/data/test-page-worker.js
@@ -0,0 +1,29 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+// get title directly
+self.postMessage(["equal", document.title, "Page Worker test",
+ "Correct page title accessed directly"]);
+
+// get <p> directly
+var p = document.getElementById("paragraph");
+self.postMessage(["ok", !!p, "<p> can be accessed directly"]);
+self.postMessage(["equal", p.firstChild.nodeValue,
+ "Lorem ipsum dolor sit amet.",
+ "Correct text node expected"]);
+
+// Modify page
+var div = document.createElement("div");
+div.setAttribute("id", "block");
+div.appendChild(document.createTextNode("Test text created"));
+document.body.appendChild(div);
+
+// Check back the modification
+div = document.getElementById("block");
+self.postMessage(["ok", !!div, "<div> can be accessed directly"]);
+self.postMessage(["equal", div.firstChild.nodeValue,
+ "Test text created", "Correct text node expected"]);
+self.postMessage(["done"]);
+
diff --git a/addon-sdk/source/test/fixtures/addon-sdk/data/test.html b/addon-sdk/source/test/fixtures/addon-sdk/data/test.html
new file mode 100644
index 000000000..181e85f9b
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon-sdk/data/test.html
@@ -0,0 +1,13 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>foo</title>
+ </head>
+ <body>
+ <p>bar</p>
+ </body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/addon/bootstrap.js b/addon-sdk/source/test/fixtures/addon/bootstrap.js
new file mode 100644
index 000000000..9134b4d92
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon/bootstrap.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { utils: Cu } = Components;
+const {require} = Cu.import(`${ROOT}/toolkit/require.js`, {});
+const {Bootstrap} = require(`${ROOT}/sdk/addon/bootstrap.js`);
+var {startup, shutdown, install, uninstall} = new Bootstrap();
diff --git a/addon-sdk/source/test/fixtures/addon/index.js b/addon-sdk/source/test/fixtures/addon/index.js
new file mode 100644
index 000000000..c507c9624
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon/index.js
@@ -0,0 +1,4 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
diff --git a/addon-sdk/source/test/fixtures/addon/package.json b/addon-sdk/source/test/fixtures/addon/package.json
new file mode 100644
index 000000000..488ec5b3b
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/addon/package.json
@@ -0,0 +1,5 @@
+{
+ "id": "addon@jetpack",
+ "name": "addon",
+ "version": "0.0.1"
+}
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/manifest.mf b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/manifest.mf
new file mode 100644
index 000000000..5105792a7
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/manifest.mf
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+
+Name: install.rdf
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: N643P4YjKKlwZUqrfLi4ow==
+SHA1-Digest: XK/2qoOrnuYo8xNYeLvB8DlUIik=
+
+Name: bootstrap.js
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XH+mMa/H9aj3hm/ZtVKviw==
+SHA1-Digest: LMmd1aTash/onjS1eAYIshgrdnM=
+
+Name: options.xul
+Digest-Algorithms: MD5 SHA1
+MD5-Digest: XeELNGdttv8Lq66lT8ykbQ==
+SHA1-Digest: 4KO6/RBoe10rYOGS+gFSHuuWi4Y=
+
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.rsa b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.rsa
new file mode 100644
index 000000000..6b1c3a9ce
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.rsa
Binary files differ
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.sf b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.sf
new file mode 100644
index 000000000..99f343296
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/META-INF/mozilla.sf
@@ -0,0 +1,4 @@
+Signature-Version: 1.0
+MD5-Digest-Manifest: cnqbpqBEVoHgJi/ocCsKKA==
+SHA1-Digest-Manifest: eDmvBAkodeNbk/0ujttYgF8KDgI=
+
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/bootstrap.js b/addon-sdk/source/test/fixtures/bootstrap-addon/bootstrap.js
new file mode 100644
index 000000000..dea1d7b90
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/bootstrap.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+function install(data, reason) {}
+function uninstall(data, reason) {}
+
+function startup(data, reasonCode) {};
+function shutdown(data, reasonCode) {};
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/install.rdf b/addon-sdk/source/test/fixtures/bootstrap-addon/install.rdf
new file mode 100644
index 000000000..221dc9c3d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/install.rdf
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+ <Description about="urn:mozilla:install-manifest">
+ <em:id>test-bootstrap-addon@mozilla.com</em:id>
+ <em:name>Test Bootstrap Add-on</em:name>
+ <em:creator>Erik Vold</em:creator>
+ <em:optionsType>2</em:optionsType>
+ <em:version>1.0</em:version>
+ <em:type>2</em:type>
+ <em:bootstrap>true</em:bootstrap>
+ <em:unpack>false</em:unpack>
+
+ <!-- Firefox -->
+ <em:targetApplication>
+ <Description>
+ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+ <em:minVersion>26.0</em:minVersion>
+ <em:maxVersion>*</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+ </Description>
+</RDF>
diff --git a/addon-sdk/source/test/fixtures/bootstrap-addon/options.xul b/addon-sdk/source/test/fixtures/bootstrap-addon/options.xul
new file mode 100644
index 000000000..aafa46d88
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap-addon/options.xul
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE mydialog SYSTEM "chrome://myaddon/locale/mydialog.dtd">
+<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"></vbox>
diff --git a/addon-sdk/source/test/fixtures/bootstrap/utils.js b/addon-sdk/source/test/fixtures/bootstrap/utils.js
new file mode 100644
index 000000000..aa7ea2d18
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/bootstrap/utils.js
@@ -0,0 +1,52 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const { Cu, Cc, Ci } = require("chrome");
+const { evaluate } = require("sdk/loader/sandbox");
+
+const ROOT = require.resolve("sdk/base64").replace("/sdk/base64.js", "");
+
+// Note: much of this test code is from
+// http://dxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+const BOOTSTRAP_REASONS = {
+ APP_STARTUP : 1,
+ APP_SHUTDOWN : 2,
+ ADDON_ENABLE : 3,
+ ADDON_DISABLE : 4,
+ ADDON_INSTALL : 5,
+ ADDON_UNINSTALL : 6,
+ ADDON_UPGRADE : 7,
+ ADDON_DOWNGRADE : 8
+};
+
+function createBootstrapScope(options) {
+ let { uri, id: aId } = options;
+ let principal = Cc["@mozilla.org/systemprincipal;1"].
+ createInstance(Ci.nsIPrincipal);
+
+ let bootstrapScope = new Cu.Sandbox(principal, {
+ sandboxName: uri,
+ wantGlobalProperties: ["indexedDB"],
+ addonId: aId,
+ metadata: { addonID: aId, URI: uri }
+ });
+
+ // Copy the reason values from the global object into the bootstrap scope.
+ for (let name in BOOTSTRAP_REASONS)
+ bootstrapScope[name] = BOOTSTRAP_REASONS[name];
+
+ return bootstrapScope;
+}
+exports.create = createBootstrapScope;
+
+function evaluateBootstrap(options) {
+ let { uri, scope } = options;
+
+ evaluate(scope,
+ `${"Components"}.classes['@mozilla.org/moz/jssubscript-loader;1']
+ .createInstance(${"Components"}.interfaces.mozIJSSubScriptLoader)
+ .loadSubScript("${uri}");`, "ECMAv5");
+}
+exports.evaluate = evaluateBootstrap;
diff --git a/addon-sdk/source/test/fixtures/border-style.css b/addon-sdk/source/test/fixtures/border-style.css
new file mode 100644
index 000000000..6941ccb20
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/border-style.css
@@ -0,0 +1,4 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+div { border-style: dashed; }
diff --git a/addon-sdk/source/test/fixtures/child-process-scripts.js b/addon-sdk/source/test/fixtures/child-process-scripts.js
new file mode 100644
index 000000000..d808e56cb
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/child-process-scripts.js
@@ -0,0 +1,81 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+const { platform, pathFor } = require('sdk/system');
+const { defer } = require('sdk/core/promise');
+const { emit } = require('sdk/event/core');
+const { join } = require('sdk/fs/path');
+const { writeFile, unlinkSync, existsSync } = require('sdk/io/fs');
+const PROFILE_DIR= pathFor('ProfD');
+const isWindows = platform.toLowerCase().indexOf('win') === 0;
+const isOSX = platform.toLowerCase().indexOf('darwin') === 0;
+
+var scripts = {
+ 'args.sh': 'echo $1 $2 $3 $4',
+ 'args.bat': 'echo %1 %2 %3 %4',
+ 'check-env.sh': 'echo $CHILD_PROCESS_ENV_TEST',
+ 'check-env.bat': 'echo %CHILD_PROCESS_ENV_TEST%',
+ 'check-pwd.sh': 'echo $PWD',
+ 'check-pwd.bat': 'cd',
+ 'large-err.sh': 'for n in `seq 0 $1` ; do echo "E" 1>&2; done',
+ 'large-err-mac.sh': 'for ((i=0; i<$1; i=i+1)); do echo "E" 1>&2; done',
+ 'large-err.bat': 'FOR /l %%i in (0,1,%1) DO echo "E" 1>&2',
+ 'large-out.sh': 'for n in `seq 0 $1` ; do echo "O"; done',
+ 'large-out-mac.sh': 'for ((i=0; i<$1; i=i+1)); do echo "O"; done',
+ 'large-out.bat': 'FOR /l %%i in (0,1,%1) DO echo "O"',
+ 'wait.sh': 'sleep 2',
+ // Use `ping` to an invalid IP address because `timeout` isn't
+ // on all environments? http://stackoverflow.com/a/1672349/1785755
+ 'wait.bat': 'ping 1.1.1.1 -n 1 -w 2000 > nul'
+};
+
+Object.keys(scripts).forEach(filename => {
+ if (/\.sh$/.test(filename))
+ scripts[filename] = '#!/bin/sh\n' + scripts[filename];
+ else if (/\.bat$/.test(filename))
+ scripts[filename] = '@echo off\n' + scripts[filename];
+});
+
+function getScript (name) {
+ // Use specific OSX script if exists
+ if (isOSX && scripts[name + '-mac.sh'])
+ name = name + '-mac';
+ let fileName = name + (isWindows ? '.bat' : '.sh');
+ return createFile(fileName, scripts[fileName]);
+}
+exports.getScript = getScript;
+
+function createFile (name, data) {
+ let { promise, resolve, reject } = defer();
+ let fileName = join(PROFILE_DIR, name);
+ writeFile(fileName, data, function (err) {
+ if (err) reject();
+ else {
+ makeExecutable(fileName);
+ resolve(fileName);
+ }
+ });
+ return promise;
+}
+
+// TODO Use fs.chmod once implemented, bug 914606
+function makeExecutable (name) {
+ let { CC } = require('chrome');
+ let nsILocalFile = CC('@mozilla.org/file/local;1', 'nsILocalFile', 'initWithPath');
+ let file = nsILocalFile(name);
+ file.permissions = 0o777;
+}
+
+function deleteFile (name) {
+ let file = join(PROFILE_DIR, name);
+ if (existsSync(file))
+ unlinkSync(file);
+}
+
+function cleanUp () {
+ Object.keys(scripts).forEach(deleteFile);
+}
+exports.cleanUp = cleanUp;
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/addEventListener.js b/addon-sdk/source/test/fixtures/chrome-worker/addEventListener.js
new file mode 100644
index 000000000..baf28b452
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/addEventListener.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+postMessage('Hello');
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/jsctypes.js b/addon-sdk/source/test/fixtures/chrome-worker/jsctypes.js
new file mode 100644
index 000000000..6345305ce
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/jsctypes.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+postMessage(typeof ctypes.open);
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/onerror.js b/addon-sdk/source/test/fixtures/chrome-worker/onerror.js
new file mode 100644
index 000000000..b3e820b28
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/onerror.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+throw new Error('ok');
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/onmessage.js b/addon-sdk/source/test/fixtures/chrome-worker/onmessage.js
new file mode 100644
index 000000000..8fd95fb6d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/onmessage.js
@@ -0,0 +1,8 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+onmessage = function (event) {
+ postMessage(event.data);
+};
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/setTimeout.js b/addon-sdk/source/test/fixtures/chrome-worker/setTimeout.js
new file mode 100644
index 000000000..d3885243b
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/setTimeout.js
@@ -0,0 +1,8 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+setTimeout(function () {
+ postMessage('ok');
+}, 0);
diff --git a/addon-sdk/source/test/fixtures/chrome-worker/xhr.js b/addon-sdk/source/test/fixtures/chrome-worker/xhr.js
new file mode 100644
index 000000000..b19906897
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/chrome-worker/xhr.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+var xhr = new XMLHttpRequest();
+xhr.open("GET", "data:text/plain,ok", true);
+xhr.onload = function () {
+ postMessage(xhr.responseText);
+};
+xhr.send(null);
diff --git a/addon-sdk/source/test/fixtures/create_xpi.py b/addon-sdk/source/test/fixtures/create_xpi.py
new file mode 100644
index 000000000..ed0f983d9
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/create_xpi.py
@@ -0,0 +1,15 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from os.path import abspath
+
+# TODO replace this script with a direct Python action invocation
+from mozbuild.action.zip import main as create_zip
+
+def main(output, input_dir):
+ output.close()
+
+ return create_zip(['-C', input_dir, abspath(output.name), '**'])
diff --git a/addon-sdk/source/test/fixtures/es5.js b/addon-sdk/source/test/fixtures/es5.js
new file mode 100644
index 000000000..746cae3c8
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/es5.js
@@ -0,0 +1,8 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+exports.frozen = Object.freeze({});
+exports.sealed = Object.seal({});
+exports.inextensible = Object.preventExtensions({});
diff --git a/addon-sdk/source/test/fixtures/include-file.css b/addon-sdk/source/test/fixtures/include-file.css
new file mode 100644
index 000000000..20d3e8294
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/include-file.css
@@ -0,0 +1,4 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+div { border: 10px solid black; }
diff --git a/addon-sdk/source/test/fixtures/index.html b/addon-sdk/source/test/fixtures/index.html
new file mode 100644
index 000000000..ba77c6a26
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/index.html
@@ -0,0 +1,18 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Add-on Page</title>
+ </head>
+ <body>
+ <p>This is an add-on page test!</p>
+ <script>
+ function getTestURL() {
+ return window.document.documentURI + "";
+ }
+ </script>
+ </body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/jsm-package/Test.jsm b/addon-sdk/source/test/fixtures/jsm-package/Test.jsm
new file mode 100644
index 000000000..3e71b456a
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/jsm-package/Test.jsm
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["Test"];
+
+this.Test = {
+ square: function (x) { return x * x; }
+};
diff --git a/addon-sdk/source/test/fixtures/jsm-package/index.js b/addon-sdk/source/test/fixtures/jsm-package/index.js
new file mode 100644
index 000000000..e20721c76
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/jsm-package/index.js
@@ -0,0 +1,46 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var { Test } = require('./Test.jsm');
+var { Test: Test2 } = require('./Test.jsm');
+exports.localJSM = Test.square(16) === 256;
+exports.localJSMCached = Test === Test2;
+
+(function () {
+var { Promise } = require('resource://gre/modules/Promise.jsm');
+var { defer } = require('resource://gre/modules/Promise.jsm').Promise;
+
+exports.isCachedAbsolute = Promise.defer === defer;
+
+exports.isLoadedAbsolute = function (val) {
+ let { promise, resolve } = Promise.defer();
+ resolve(val);
+ return promise;
+};
+})();
+
+(function () {
+var { Promise } = require('modules/Promise.jsm');
+var { defer } = require('modules/Promise.jsm').Promise;
+exports.isCachedPath = Promise.defer === defer;
+
+exports.isLoadedPath = function (val) {
+ let { promise, resolve } = Promise.defer();
+ resolve(val);
+ return promise;
+};
+})();
+
+(function () {
+var { defer } = require('resource://gre/modules/commonjs/sdk/core/promise.js');
+var { defer: defer2 } = require('resource://gre/modules/commonjs/sdk/core/promise.js');
+exports.isCachedJSAbsolute = defer === defer2;
+exports.isLoadedJSAbsolute = function (val) {
+ let { promise, resolve } = defer();
+ resolve(val);
+ return promise;
+};
+})();
diff --git a/addon-sdk/source/test/fixtures/jsm-package/package.json b/addon-sdk/source/test/fixtures/jsm-package/package.json
new file mode 100644
index 000000000..2e8caf211
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/jsm-package/package.json
@@ -0,0 +1,3 @@
+{
+ "name": "jsm-package"
+}
diff --git a/addon-sdk/source/test/fixtures/loader/cycles/a.js b/addon-sdk/source/test/fixtures/loader/cycles/a.js
new file mode 100644
index 000000000..f6e13ccb7
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/cycles/a.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+exports.b = require('b');
diff --git a/addon-sdk/source/test/fixtures/loader/cycles/b.js b/addon-sdk/source/test/fixtures/loader/cycles/b.js
new file mode 100644
index 000000000..69e23f11a
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/cycles/b.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+exports.a = require('a');
diff --git a/addon-sdk/source/test/fixtures/loader/cycles/c.js b/addon-sdk/source/test/fixtures/loader/cycles/c.js
new file mode 100644
index 000000000..ce34b3cf4
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/cycles/c.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+exports.main = require('main');
diff --git a/addon-sdk/source/test/fixtures/loader/cycles/main.js b/addon-sdk/source/test/fixtures/loader/cycles/main.js
new file mode 100644
index 000000000..6d13200c8
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/cycles/main.js
@@ -0,0 +1,14 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var a = require('a');
+var b = require('b');
+var c = require('c');
+
+exports.a = a;
+exports.b = b;
+exports.c = c;
+exports.main = exports;
diff --git a/addon-sdk/source/test/fixtures/loader/errors/boomer.js b/addon-sdk/source/test/fixtures/loader/errors/boomer.js
new file mode 100644
index 000000000..c794cda33
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/errors/boomer.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+throw Error("opening input stream (invalid filename?)");
diff --git a/addon-sdk/source/test/fixtures/loader/errors/main.js b/addon-sdk/source/test/fixtures/loader/errors/main.js
new file mode 100644
index 000000000..1fdb56790
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/errors/main.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var error = require('./boomer');
+
+exports.main = exports;
diff --git a/addon-sdk/source/test/fixtures/loader/exceptions/boomer.js b/addon-sdk/source/test/fixtures/loader/exceptions/boomer.js
new file mode 100644
index 000000000..e26817984
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/exceptions/boomer.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+exports.boom = function() {
+ throw Error("Boom!");
+};
diff --git a/addon-sdk/source/test/fixtures/loader/exceptions/main.js b/addon-sdk/source/test/fixtures/loader/exceptions/main.js
new file mode 100644
index 000000000..4b6279d7d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/exceptions/main.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var boomer = require('./boomer');
+
+boomer.boom();
+
+exports.main = exports;
diff --git a/addon-sdk/source/test/fixtures/loader/globals/main.js b/addon-sdk/source/test/fixtures/loader/globals/main.js
new file mode 100644
index 000000000..6d34ddbd3
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/globals/main.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+exports.console = console;
+exports.globalFoo = (typeof globalFoo !== "undefined") ? globalFoo : null;
diff --git a/addon-sdk/source/test/fixtures/loader/json/invalid.json b/addon-sdk/source/test/fixtures/loader/json/invalid.json
new file mode 100644
index 000000000..02ea4b0b4
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/invalid.json
@@ -0,0 +1,3 @@
+{
+ invalidjson
+}
diff --git a/addon-sdk/source/test/fixtures/loader/json/manifest.json b/addon-sdk/source/test/fixtures/loader/json/manifest.json
new file mode 100644
index 000000000..5ae25bb9d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "Jetpack Loader Test",
+ "version": "1.0.1",
+ "dependencies": {
+ "async": "*",
+ "underscore": "*"
+ },
+ "contributors": [
+ "ash nazg durbatulûk",
+ "ash nazg gimbatul",
+ "ash nazg thrakatulûk",
+ "agh burzum-ishi krimpatul"
+ ]
+}
diff --git a/addon-sdk/source/test/fixtures/loader/json/mutation.json b/addon-sdk/source/test/fixtures/loader/json/mutation.json
new file mode 100644
index 000000000..e1cbe3c15
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/mutation.json
@@ -0,0 +1 @@
+{ "value": 1 }
diff --git a/addon-sdk/source/test/fixtures/loader/json/nodotjson.json.js b/addon-sdk/source/test/fixtures/loader/json/nodotjson.json.js
new file mode 100644
index 000000000..af046caa6
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/nodotjson.json.js
@@ -0,0 +1,8 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = {
+ "filename": "nodotjson.json.js",
+ "data": {}
+};
diff --git a/addon-sdk/source/test/fixtures/loader/json/test.json b/addon-sdk/source/test/fixtures/loader/json/test.json
new file mode 100644
index 000000000..d19dc7117
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/test.json
@@ -0,0 +1,3 @@
+{
+ "filename": "test.json"
+}
diff --git a/addon-sdk/source/test/fixtures/loader/json/test.json.js b/addon-sdk/source/test/fixtures/loader/json/test.json.js
new file mode 100644
index 000000000..b14364bff
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/json/test.json.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = {
+ "filename": "test.json.js"
+};
diff --git a/addon-sdk/source/test/fixtures/loader/lazy/main.js b/addon-sdk/source/test/fixtures/loader/lazy/main.js
new file mode 100644
index 000000000..04525f972
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/lazy/main.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+exports.useFoo= function () {
+ return require('foo');
+}
diff --git a/addon-sdk/source/test/fixtures/loader/missing-twice/file.json b/addon-sdk/source/test/fixtures/loader/missing-twice/file.json
new file mode 100644
index 000000000..ebd6f791b
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/missing-twice/file.json
@@ -0,0 +1 @@
+an invalid json file
diff --git a/addon-sdk/source/test/fixtures/loader/missing-twice/main.js b/addon-sdk/source/test/fixtures/loader/missing-twice/main.js
new file mode 100644
index 000000000..20e453736
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/missing-twice/main.js
@@ -0,0 +1,32 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+try {
+ require('./not-found');
+}
+catch (e1) {
+ exports.firstError = e1;
+ // It should throw again and not be cached
+ try {
+ require('./not-found');
+ }
+ catch (e2) {
+ exports.secondError = e2;
+ }
+}
+
+try {
+ require('./file.json');
+}
+catch (e) {
+ exports.invalidJSON1 = e;
+ try {
+ require('./file.json');
+ }
+ catch (e) {
+ exports.invalidJSON2 = e;
+ }
+}
diff --git a/addon-sdk/source/test/fixtures/loader/missing/main.js b/addon-sdk/source/test/fixtures/loader/missing/main.js
new file mode 100644
index 000000000..dde9ee77c
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/missing/main.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var a = require('./not-found');
+
+exports.a = a;
+exports.main = exports;
diff --git a/addon-sdk/source/test/fixtures/loader/self/main.js b/addon-sdk/source/test/fixtures/loader/self/main.js
new file mode 100644
index 000000000..ab2b159da
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/self/main.js
@@ -0,0 +1,8 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+var self = require("sdk/self");
+exports.self = self;
diff --git a/addon-sdk/source/test/fixtures/loader/syntax-error/error.js b/addon-sdk/source/test/fixtures/loader/syntax-error/error.js
new file mode 100644
index 000000000..56c7c524f
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/syntax-error/error.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+module.metadata = {
+ "status": "experimental"
+};
+
+exports.b = @ require('b');
diff --git a/addon-sdk/source/test/fixtures/loader/syntax-error/main.js b/addon-sdk/source/test/fixtures/loader/syntax-error/main.js
new file mode 100644
index 000000000..4eadef870
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/syntax-error/main.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use strict';
+
+var a = require('./error');
+
+exports.a = a;
+exports.main = exports;
diff --git a/addon-sdk/source/test/fixtures/loader/unsupported/fennec.js b/addon-sdk/source/test/fixtures/loader/unsupported/fennec.js
new file mode 100644
index 000000000..9edc63c14
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/unsupported/fennec.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.metadata = {
+ "engines": {
+ "Fennec": "*"
+ }
+};
+module.exports = {};
diff --git a/addon-sdk/source/test/fixtures/loader/unsupported/firefox.js b/addon-sdk/source/test/fixtures/loader/unsupported/firefox.js
new file mode 100644
index 000000000..5a08280a4
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/loader/unsupported/firefox.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.metadata = {
+ "engines": {
+ "Firefox": "*"
+ }
+};
+module.exports = {};
diff --git a/addon-sdk/source/test/fixtures/mofo_logo.SVG b/addon-sdk/source/test/fixtures/mofo_logo.SVG
new file mode 100644
index 000000000..2edeb9e6f
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/mofo_logo.SVG
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<svg version="1.1" id="svg2997" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" viewBox="-0.5 -0.5 200 200" overflow="visible" enable-background="new -0.5 -0.5 200 200" xml:space="preserve">
+<path id="path85" fill="#FFFFFF" d="M-2559.936,6359.65c19.127,26.489,46.371,47.744,80.988,44.707 C-2479.339,6371.648-2523.898,6352.641-2559.936,6359.65z"/>
+<path id="path93" fill="#FFFFFF" d="M-2634.014,6073.506c4.082-7.232,2.571-17.81,3.831-26.684 c-9.019,4.635-15.506,14.72-24.551,18.641C-2652.134,6070.818-2640.447,6070.829-2634.014,6073.506z"/>
+<path id="path95" fill="#FFFFFF" d="M-2687.179,6018.109l-18.654,18.212c4.158,3.301,9.676,8.132,17.11,6.36L-2687.179,6018.109z"/>
+<path id="path97" fill="#FFFFFF" d="M-2731.117,5998.391c-4.356-0.363-14.41,20.156-18.785,19.857l14.762,8.728 C-2730.055,6027.281-2732.816,6001.961-2731.117,5998.391L-2731.117,5998.391z"/>
+<path id="path99" fill="#FFFFFF" d="M-2776.505,5989.09l4.736-11.668c-10.245,0.813-15.511,20.68-21.719,26.244 C-2776.37,6007.109-2775.727,6011.81-2776.505,5989.09z"/>
+<path id="path101" fill="#FFFFFF" d="M-2825.16,5962.186l-18.405,31.539l17.091,3.962L-2825.16,5962.186L-2825.16,5962.186z"/>
+<path id="path103" fill="#FFFFFF" d="M-2872.173,5967.636l-21.059,16.139C-2872.035,5992.07-2870.821,5995.181-2872.173,5967.636z"/>
+<path id="path105" fill="#FFFFFF" d="M-2922.987,5980.398c-3.084-9.172-0.18-20.226,0.396-29.914 c-4.952,9.422-16.338,16.166-17.745,27.299C-2935.489,5981.802-2928.796,5980.021-2922.987,5980.398L-2922.987,5980.398z"/>
+<g>
+ <path id="path9" d="M70.165,21.946C62.09,27.292,49.432,38.35,43.382,44.795c1.491,0.208,3.068-0.957,4.751-1.179l11.635-3.192 c-4.833,4.151-15.001,11.47-17.946,17.234c3.632-1.309,11.254-5.699,15.043-6.059c-3.309,3.038-10.214,8.801-12.378,12.469 c0.261,0.124,0.08,0.445,0.12,0.669c2.846-1.635,9.763-5.91,12.9-6.199c-3.229,3.484-9.169,10.193-10.47,14.688 c2.804-1.913,9.856-5.792,12.944-6.969c-0.703,1.773-2.262,3.09-3.276,4.864c-1.399,2.453-4.711,5.246-4.834,8.161 c2.46-2.375,5.51-4.474,8.571-6.148c-1.365,2.947-3.876,5.384-4.561,8.892c2.007-2.02,5.813-3.071,8.399-4.005l-0.312,0.311 c-0.224,0.191-3.136,2.335-5.121,4.727c1.765-0.114,0.449-0.334,2.707,0.18l-0.043,0.114 c-0.154,13.494,25.501,18.427,41.224,17.743c3.314-6.419,1.525-16.789,10.088-21.247c5.764-3.067,6.416-4.742,13.068-3.491 c3.596,0.674,11.461,3.392,15.227,2.534c3.514-2.033,5.221-2.928,8.332-5.37c3.01-4.574-23.988-19.398-2.164-0.171 c5.236,1.121,6.588,0.954,8.139-1.376c0.693-1.88,2.348-6.877,3.859-10.133l0.107-1.76c-1.467-4.414-1.111-11.965-1.852-13.053 c-4.842-6.713-22.34-7.764-30.256-16.596c1.35-4.384-1.482-7.997-4.367-10.738c-4.332-3.187-10.313-1.722-14.925-0.399 c-5.255-1.099-10.117-2.986-15.233-4.48C81.381,13.626,70.165,21.946,70.165,21.946L70.165,21.946z"/>
+ <path id="path11" fill="#FF1A00" d="M103.517,25.68l-3.771,1.438c-0.453-0.901,0.676-1.757,1.126-2.599 c0.322-0.616,1.247-0.961,1.465-1.705c-4.877-0.786-9.486-3.178-14.688-2.354c-5.563,0.878-8.802,3.003-12.005,5.54 c-1.617,0.885-2.396,2.142-3.968,3.201c-1.92,1.729-2.755,5.176-3.233,5.833c2.785-1.206,5.587-1.026,7.479-1.663 c-7.115,4.447-8.358,13.134-6.39,20.38l-0.116,0.159c-2.391-1.429-3.083-4.065-3.745-6.371c-0.471,1.515-0.538,3.44-0.859,5.132 c-0.764-0.713-1.184-1.734-1.61-2.644c-0.799,7.668,2.938,13.913,7.521,19.966c3.068,4.058-2.923,6.744-1.512,11.838l7.206-0.404 c0.929-0.348,0.64-0.223,0.64-0.223c-1.806,3.613-11.365,6.352-13.201,8.417c0.513,0.425,8.917-2.164,11.991-2.687l-9.045,5.112 c0.899,0.277-0.028,3.311,1.946,3.023c12.508,3.713,26.597,8.866,28.792,3.488c1.831-3.419,4.541-9.21,4.122-12.49l1.941-2.949 c-2.59,0.643-5.199,1.691-7.202,3.823c-0.599-1.256,0.342-2.763,0.81-3.951c1.343-2.41,4.026-3.686,6.151-5.056l-4.464-1.976 c-2.25-3.864-6.523-7.047-6.639-11.586l1.057,0.36c4.069,4.621,9.854,8.371,15.647,8.639c-3.943-0.338,16.471-2.743,15.271-4.472 c2.17,3.121,8.729,4.432,13.52,6.071c2.201-0.792,3.162-0.566,4.816-2.057c-0.705-0.765-1.795-1.39-2.844-1.787 c-6.295-1.738-21.162-4.796-24.365-10.986c-0.604,2.637,1.838,4.812,4.566,7.061l-5.873-0.826 c-10.331-4.782-9.083-12.984-6.813-20.78l0.785,6.508l2.025,3.548c3.851-6.966,1.835-6.1-5.898-15.494l5.832,2.228 c2.663,2.142,7.04,5.845,10.921,8.417c10.453,6.845,15.625,11.381,28.891,12.311l4.092,0.908c2.896-7.59-2.719-14.597-1.021-3.989 c-2.166-2.631-4.283-5.066-3.842-6.439c-0.76-1.147,3.143-4.014,2.811-5.319c-3.83-3.894-20.389-5.984-29.381-14.907 c-0.264,1.492,4.158,5.354,4.924,6.683c-8.918,0.088-14.174-2.651-15.127-5.542c-0.195-0.481,0.047-2.623,0.998-3.313 c1.287-0.672,2.541-1.693,4.02-1.83c-2.316-1.891-5.25,0.643-7.302,1.788c-1.594,2.737,0.889,5.788,1.202,8.014 c-2.175-0.549-5.111-4.378-5.471-6.782c-3.306,0.362-6.34-0.065-8.881-1.974c2.243-0.492,4.56-1.331,6.906-1.755 c6.143-1.34,12.598-7.655,18.803-2.72l-2.889-3.672C113.848,21.654,108.812,24.342,103.517,25.68L103.517,25.68z"/>
+ <path id="path13" d="M83.254,28.459c-1.649,1.924-3.302,3.85-3.687,6.437l0.369,0.434c1.102-1.326,2.753-2.437,4.274-3.207 c0.002,2.726,1.76,5.399,4.11,6.713l0.395,0.028c-0.498-2.879-0.166-6.399,0.96-8.998c1.793-1.508,4.151-2.106,5.668-3.692 c-3.797-0.888-7.411-0.136-10.658,1.1L83.254,28.459L83.254,28.459z"/>
+ <path id="path15" fill="#FFFFFF" d="M121.379,36.471c-1.561-2.157-3.777-3.888-6.594-3.642 C114.814,35.491,118.443,37.043,121.379,36.471z"/>
+ <path id="path17" d="M98.854,36.815c-2.445,0.187-4.736,0.622-7.041,1.224c1.017,0.937,2.302,1.252,3.266,2.129 c-3.017,1.137-6.176,1.861-8.813,4.186l0.546,0.325c4.878-1.015,10.645-0.929,15.732,0.16l0.294-0.212l-2.948-5.361l4.533-0.981 c-2.405-2.249-5.156-4.46-8.322-5.422C96.585,34.171,97.917,35.479,98.854,36.815L98.854,36.815L98.854,36.815z"/>
+ <path id="path19" d="M116.564,42.189c2.406,0.445,5.064,0.503,7.357,0.074c-3.787-1.932-8.625-1.552-11.639-4.944 C112.852,39.099,114.086,41.968,116.564,42.189z"/>
+ <path id="path21" d="M80.567,55.828c0.943,3.023-2.23,6.707,0.312,9.485c2.165,2.522,4.81,4.614,7.354,6.464l-0.225-0.943 c-2.266-2.647-4.349-5.569-5.396-8.716c2.656,0.928,5.463,2.216,8.496,2.646c-3.416-5.104-9.678-9.984-7.319-16.97 c0.129-1.154,1.655-2.041,1.271-3.113C81.49,47.408,79.996,51.435,80.567,55.828L80.567,55.828z"/>
+ <path id="path23" fill="#FFFFFF" d="M127.412,59.77c-0.334,0.589-0.213,1.45-0.316,2.174c0.738-0.379,1.264-1.199,2-1.518 C128.883,59.988,127.934,59.986,127.412,59.77z"/>
+ <path id="path25" fill="#FFFFFF" d="M131.738,64.284l1.518-1.487c-0.336-0.267-0.785-0.661-1.395-0.518L131.738,64.284z"/>
+ <path id="path27" fill="#FFFFFF" d="M135.316,65.887c0.355,0.026,1.174-1.643,1.531-1.618l-1.203-0.711 C135.229,63.532,135.455,65.593,135.316,65.887z"/>
+ <path id="path29" fill="#FFFFFF" d="M139.012,66.644l-0.385,0.95c0.836-0.067,1.264-1.684,1.766-2.138 C139.002,65.177,138.949,64.793,139.012,66.644z"/>
+ <path id="path31" fill="#FFFFFF" d="M142.977,68.834l1.498-2.569l-1.395-0.32L142.977,68.834z"/>
+ <path id="path33" fill="#FFFFFF" d="M146.801,68.39l1.715-1.312C146.789,66.4,146.691,66.147,146.801,68.39z"/>
+ <path id="path35" fill="#FFFFFF" d="M150.938,67.35c0.254,0.748,0.02,1.647-0.031,2.436c0.404-0.766,1.332-1.313,1.445-2.221 C151.957,67.233,151.412,67.382,150.938,67.35L150.938,67.35z"/>
+ <path id="path37" d="M99.399,96.021c0.547,1.031,0.572,2.285,1.119,3.315c1.295-2.793,1.147-6.148-0.533-8.659 c-2.923-1.288-5.745-2.625-8.264-4.671C92.768,89.577,96.192,93.513,99.399,96.021L99.399,96.021z"/>
+ <path id="path71" d="M117.387,36.775c-0.953-0.248-1.51-1.317-1.25-2.393c0.268-1.079,1.252-1.75,2.207-1.502 c0.955,0.245,1.512,1.318,1.25,2.393C119.328,36.348,118.34,37.021,117.387,36.775z"/>
+ <path id="path75" d="M98.356,103.161l2.835-2.31c-2.758-1.791-7.426-5.004-9.95-7.387C93.224,97.589,93.284,102.152,98.356,103.161 z"/>
+ <path id="path2225" d="M57.859,84.722c11.552,15.175,27.262,21.19,46.412,19.542l-1.629-3.542 c-17.031,0.631-31.21-3.592-40.875-17.588L57.859,84.722z"/>
+ <path id="path2343" d="M10.063,170.061c2.903,0.027,5.809-0.039,8.712,0.014l-0.375,2.293l-5.096,0.02l-0.021,3.24h4.088v2.342 h-4.088v6.334h-3.22V170.061z"/>
+ <path id="path3315" d="M30.648,184.227c-2.242-0.338-3.854-1.586-4.75-3.68c-0.511-1.191-0.656-2.105-0.596-3.748 c0.061-1.664,0.254-2.451,0.886-3.605c0.814-1.488,1.881-2.344,3.555-2.846c0.877-0.266,1.065-0.291,2.274-0.293 c1.095-0.004,1.446,0.029,2.078,0.201c2.303,0.627,3.802,2.172,4.426,4.559c0.288,1.105,0.265,3.764-0.042,4.846 c-0.697,2.463-2.385,4.098-4.674,4.527C33.093,184.322,31.412,184.342,30.648,184.227z M32.991,181.963 c0.926-0.281,1.579-1.137,1.876-2.463c0.205-0.91,0.238-3.596,0.058-4.547c-0.335-1.762-1.328-2.654-2.957-2.656 c-1.589-0.002-2.456,0.793-2.912,2.67c-0.214,0.883-0.238,3.438-0.041,4.396c0.279,1.357,0.877,2.211,1.761,2.512 C31.381,182.082,32.455,182.123,32.991,181.963z"/>
+ <path id="flowRoot5258" d="M47.563,170.053h3.446v8.381c0,1.154,0.179,1.98,0.537,2.48c0.364,0.492,0.955,0.883,1.772,0.883 c0.823,0,1.414-0.391,1.772-0.883c0.364-0.5,0.546-1.326,0.546-2.48v-8.381h3.445v8.381c0,1.979-0.474,3.451-1.423,4.418 c-0.948,0.967-2.396,1.451-4.34,1.451c-1.939,0-3.383-0.484-4.331-1.451c-0.949-0.967-1.423-2.439-1.423-4.418V170.053"/>
+ <path id="path6262" d="M68.606,170.053l3.509,0.051c1.381,2.793,2.899,5.531,4.078,8.41l0.197,0.504l-0.049-1.01l-0.18-7.951h2.948 v14.246h-3.182l-0.363-0.758c-1.15-2.398-3.13-6.629-3.602-7.697c-0.302-0.684-0.524-1.137-0.495-1.012 c0.029,0.127,0.083,2.309,0.119,4.848l0.065,4.619h-3.047V170.053z"/>
+ <path id="text8203" d="M92.398,182.191l0.931,0.002c0.986,0,1.843-1.076,2.366-1.844c0.522-0.766,0.977-1.873,0.977-3.322 c0-1.424-0.431-2.496-0.905-3.213c-0.469-0.725-1.17-1.424-2.104-1.424l-1.265-0.002v9.805 M88.878,184.303v-14.25h4.209 c1.173,0,2.12,0.104,2.84,0.311c0.72,0.201,1.357,0.529,1.912,0.986c0.8,0.65,1.393,1.455,1.776,2.41 c0.39,0.949,0.584,2.084,0.584,3.404c0,1.223-0.2,2.328-0.6,3.314c-0.4,0.986-0.981,1.813-1.744,2.482 c-0.544,0.475-1.155,0.818-1.832,1.031c-0.678,0.207-1.558,0.311-2.641,0.311H88.878"/>
+ <path id="path9182" d="M106.307,184.277l5.092-14.225h3.457c1.617,4.746,3.281,9.477,4.885,14.225l-3.457,0.023l-1.084-3.391 l-4.433,0.002l-1.083,3.389C108.559,184.289,107.431,184.324,106.307,184.277z M113.051,173.643l-1.51,4.887h2.873 C113.82,176.934,113.57,175.254,113.051,173.643z"/>
+ <path id="path10154" d="M127.924,172.535h-3.867v-2.48c3.799,0,7.6-0.004,11.4,0c-0.002,0-0.529,2.479-0.529,2.479l-3.748,0.002 v11.768h-3.256V172.535z"/>
+ <path id="path11126" d="M142.326,170.053h3.471v14.242h-3.471V170.053z"/>
+ <path id="path14040" d="M159.949,184.227c-2.24-0.338-3.854-1.586-4.748-3.68c-0.512-1.191-0.656-2.105-0.598-3.748 c0.061-1.664,0.254-2.451,0.885-3.605c0.816-1.488,1.883-2.344,3.557-2.846c0.877-0.266,1.064-0.291,2.275-0.293 c1.094-0.004,1.445,0.029,2.076,0.201c2.305,0.627,3.803,2.172,4.426,4.559c0.289,1.105,0.266,3.764-0.041,4.846 c-0.697,2.463-2.387,4.098-4.676,4.527C162.395,184.322,160.713,184.342,159.949,184.227z M162.293,181.963 c0.926-0.281,1.578-1.137,1.875-2.463c0.205-0.91,0.24-3.596,0.059-4.547c-0.336-1.762-1.328-2.654-2.957-2.656 c-1.59-0.002-2.457,0.793-2.912,2.67c-0.215,0.883-0.238,3.438-0.041,4.396c0.279,1.357,0.877,2.211,1.762,2.512 C160.682,182.082,161.756,182.123,162.293,181.963z"/>
+ <path id="path2224" d="M176.656,170.053l3.563,0.051c1.402,2.793,2.945,5.531,4.143,8.41l0.199,0.504l-0.049-1.01l-0.182-7.951 h2.992v14.246h-3.23l-0.369-0.758c-1.168-2.398-3.178-6.629-3.658-7.697c-0.305-0.684-0.531-1.137-0.502-1.012 c0.031,0.127,0.086,2.309,0.121,4.848l0.066,4.619h-3.094V170.053z"/>
+ <g id="g3173" transform="translate(-0.4495808,1251.722)">
+ <path id="path2320" d="M185.373-1089.163c-1.527-0.85-2.496-1.666-3.189-2.689l-0.402-0.596l-0.586,0.516 c-0.816,0.725-1.141,0.965-1.887,1.406c-1.727,1.02-4.043,1.439-6.92,1.252c-5.955-0.385-9.082-3.238-9.49-8.66 c-0.182-2.412,0.223-4.607,1.158-6.289c1.281-2.305,3.789-3.914,7.313-4.695c1.803-0.398,3.266-0.545,5.977-0.594l2.516-0.049 l-0.049-1.311c-0.027-0.723-0.09-1.543-0.137-1.824c-0.25-1.477-0.871-2.223-2.035-2.445c-0.902-0.17-1.32-0.18-2.357-0.053 c-2.006,0.246-4.098,1.066-6.678,2.623c-0.691,0.416-1.297,0.744-1.346,0.725c-0.096-0.037-3.463-5.682-3.461-5.799 c0.008-0.166,2.094-1.316,3.582-1.973c4.023-1.775,6.543-2.377,9.953-2.377c3.17,0,5.359,0.533,7.127,1.736 c0.693,0.473,1.736,1.551,2.115,2.186c0.35,0.586,0.777,1.646,1.012,2.51l0.189,0.691l-0.041,4.766 c-0.021,2.619-0.041,6.43-0.041,8.467c0,4.178,0,4.18,0.633,5.414c0.273,0.537,0.498,0.814,1.266,1.57 c0.855,0.842,0.922,0.93,0.809,1.059c-0.068,0.076-1.029,1.184-2.137,2.461c-1.109,1.275-2.057,2.328-2.107,2.338 C186.108-1088.786,185.756-1088.953,185.373-1089.163z M175.903-1095.453c1.229-0.154,2.246-0.641,3.182-1.518l0.508-0.477 l0.055-3.168l0.053-3.168l-1.316,0.057c-4.154,0.178-5.707,0.842-6.377,2.729c-0.213,0.596-0.295,2.16-0.146,2.787 c0.334,1.418,1.457,2.533,2.768,2.748c0.246,0.039,0.486,0.078,0.531,0.082C175.203-1095.374,175.539-1095.408,175.903-1095.453z M137.623-1089.718c-1.318-0.205-2.459-0.68-3.502-1.459c-1.109-0.826-1.762-1.803-2.238-3.348 c-0.445-1.441-0.436-1.025-0.49-18.475c-0.051-15.838-0.057-16.158-0.236-18.186c-0.102-1.135-0.162-2.086-0.137-2.111 c0.074-0.074,8.055-1.891,8.154-1.857c0.098,0.037,0.248,1.135,0.361,2.654c0.162,10.801,0.012,21.605,0.156,32.406 c0.063,2.619,0.086,2.936,0.24,3.373c0.379,1.078,0.902,1.469,1.963,1.465c0.336,0,0.662-0.018,0.727-0.039 c0.105-0.033,0.479,1.133,1.371,4.289l0.162,0.578l-1.271,0.334C141.034-1089.607,139.186-1089.476,137.623-1089.718z M154.555-1089.644c-1.066-0.125-1.982-0.391-2.85-0.822c-2.164-1.08-3.219-2.633-3.713-5.475 c-0.066-0.375-0.109-5.193-0.146-16.57c-0.053-15.98-0.055-16.049-0.25-18.383c-0.117-1.43-0.164-2.367-0.119-2.408 c0.102-0.088,8.1-1.91,8.152-1.857c0.088,0.088,0.268,1.711,0.348,3.148c0.213,11.125-0.035,22.258,0.162,33.383 c0.055,1.18,0.107,1.611,0.238,1.984c0.221,0.625,0.525,1.014,0.945,1.199c0.457,0.203,1.182,0.281,1.516,0.166 c0.174-0.063,0.283-0.066,0.316-0.014c0.078,0.129,1.402,4.816,1.369,4.85c-0.016,0.018-0.504,0.164-1.084,0.328 C158.041-1089.722,155.75-1089.501,154.555-1089.644z M67.676-1089.716c-0.134-0.018-0.61-0.076-1.059-0.127 c-0.447-0.053-1.237-0.215-1.756-0.363c-5.568-1.582-9.046-6.182-9.853-13.021c-0.124-1.047-0.123-3.988,0.001-5.09 c0.362-3.213,1.4-6.119,2.997-8.387c1.083-1.537,2.861-3.086,4.462-3.889c2.021-1.016,3.78-1.402,6.368-1.402 c2.15,0,3.536,0.219,5.156,0.816c3.931,1.449,7.106,5.004,8.254,9.238c0.922,3.398,0.905,8.645-0.037,12.051 c-0.744,2.691-2.024,4.861-3.966,6.725s-4.086,2.918-6.7,3.297C70.775-1089.757,68.143-1089.654,67.676-1089.716z M70.77-1096.027 c1.815-0.824,2.693-2.672,3.095-6.512c0.153-1.465,0.177-5.111,0.041-6.512c-0.375-3.879-1.335-5.748-3.356-6.531 c-1.055-0.41-2.505-0.303-3.577,0.262c-1.823,0.959-2.647,2.99-2.926,7.207c-0.158,2.404-0.013,5.633,0.343,7.572 c0.475,2.602,1.225,3.77,2.859,4.457c0.768,0.322,1.166,0.387,2.144,0.344C70.09-1095.769,70.293-1095.812,70.77-1096.027z M10.314-1116.745c-0.13-1.063-0.376-2.029-0.667-2.621c-0.147-0.301-0.224-0.547-0.182-0.584c0.09-0.078,7.021-1.965,7.22-1.965 c0.204,0,0.671,0.98,0.915,1.92c0.112,0.432,0.204,0.855,0.204,0.939c0,0.086,0.027,0.152,0.061,0.152 c0.034-0.002,0.391-0.277,0.794-0.615c1.52-1.27,3.532-2.127,5.465-2.324c2.115-0.217,4.02,0.1,5.551,0.92 c0.98,0.527,2.146,1.512,2.768,2.336l0.488,0.646l0.314-0.326c0.76-0.789,2.256-1.92,3.307-2.496 c0.898-0.494,2.17-0.893,3.413-1.074c1.114-0.16,3.312-0.063,4.384,0.197c1.185,0.287,2.204,0.719,2.971,1.26 c1.574,1.109,2.172,2.082,2.584,4.207c0.172,0.885,0.174,1.025,0.203,13.373l0.029,12.479H42.15v-10.934 c0-7.029-0.03-11.18-0.084-11.623c-0.198-1.623-0.574-2.096-1.798-2.268c-1.429-0.199-3.438,0.574-5.267,2.025l-0.667,0.529 l0,22.27h-7.729c-0.473-7.383,0.652-15.438-0.186-22.727c-0.296-1.432-0.807-1.955-2.059-2.107 c-1.462-0.178-3.452,0.498-5.153,1.75l-0.664,0.488l-0.005,22.596h-7.979C10.282-1099.062,11.051-1108.048,10.314-1116.745z M86.536-1095.492l14.459-19.949l-13.248-0.043v-5.779h23.043v5.578c-4.503,6.535-9.129,12.986-13.598,19.545l14.179,0.037 l-0.059,0.182l-1.888,5.559l-22.899,0.041L86.536-1095.492z M116.735-1120.853l0.184-0.041c2.588-0.43,5.186-0.809,7.775-1.227 l0.266-0.045v31.844h-8.225V-1120.853z M120.276-1124.939c-1.963-0.195-3.682-1.678-4.188-3.611 c-0.703-2.688,0.707-5.361,3.273-6.201c0.484-0.158,0.754-0.191,1.592-0.191c1.578,0,2.482,0.357,3.508,1.381 c0.986,0.986,1.412,2.068,1.418,3.586c0.004,1.563-0.406,2.584-1.457,3.637C123.332-1125.245,121.934-1124.773,120.276-1124.939z"/>
+ </g>
+</g>
+</svg>
diff --git a/addon-sdk/source/test/fixtures/moz.build b/addon-sdk/source/test/fixtures/moz.build
new file mode 100644
index 000000000..2c3635186
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/moz.build
@@ -0,0 +1,22 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+fixtures = [
+ 'native-addon-test',
+ 'native-overrides-test',
+]
+
+output_dir = OBJDIR_FILES._tests.testing.mochitest['jetpack-package']['addon-sdk'].source.test.fixtures
+
+for fixture in fixtures:
+ xpi = '%s.xpi' % fixture
+
+ GENERATED_FILES += [xpi]
+ f = GENERATED_FILES[xpi]
+ f.script = 'create_xpi.py'
+ f.inputs = [fixture]
+
+ output_dir += ['!%s' % xpi]
diff --git a/addon-sdk/source/test/fixtures/moz_favicon.ico b/addon-sdk/source/test/fixtures/moz_favicon.ico
new file mode 100644
index 000000000..d44438903
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/moz_favicon.ico
Binary files differ
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/a.js b/addon-sdk/source/test/fixtures/native-addon-test/dir/a.js
new file mode 100644
index 000000000..2f8cccb68
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/a.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = 'dir/a';
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/a/index.js b/addon-sdk/source/test/fixtures/native-addon-test/dir/a/index.js
new file mode 100644
index 000000000..a86eaa184
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/a/index.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = 'dir/a/index';
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/b.js b/addon-sdk/source/test/fixtures/native-addon-test/dir/b.js
new file mode 100644
index 000000000..cd3e975b2
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/b.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = require('test-math');
+
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/c.js b/addon-sdk/source/test/fixtures/native-addon-test/dir/c.js
new file mode 100644
index 000000000..ed5fd149e
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/c.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = require('../package.json');
+
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/dummy.js b/addon-sdk/source/test/fixtures/native-addon-test/dir/dummy.js
new file mode 100644
index 000000000..e1640884c
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/dummy.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = 'this is a dummy module';
+
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/dir/test.jsm b/addon-sdk/source/test/fixtures/native-addon-test/dir/test.jsm
new file mode 100644
index 000000000..1e2946f94
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/dir/test.jsm
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+this['EXPORTED_SYMBOLS'] = ['test'];
+test = 'this is a jsm';
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/expectedmap.json b/addon-sdk/source/test/fixtures/native-addon-test/expectedmap.json
new file mode 100644
index 000000000..4fa5886f7
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/expectedmap.json
@@ -0,0 +1,25 @@
+{
+ "./index.js": {
+ "./dir/a": "./dir/a.js",
+ "./dir/b": "./dir/b.js",
+ "./dir/c": "./dir/c.js",
+ "./dir/dummy": "./dir/dummy.js",
+ "./dir/test.jsm": "./dir/test.jsm",
+ "./utils": "./utils/index.js",
+ "./newmodule": "./newmodule/lib/file.js",
+ "test-math": "./node_modules/test-math/index.js",
+ "test-custom-main": "./node_modules/test-custom-main/lib/custom-entry.js",
+ "test-custom-main-relative": "./node_modules/test-custom-main-relative/lib/custom-entry.js",
+ "test-default-main": "./node_modules/test-default-main/index.js"
+ },
+ "./dir/b.js": {
+ "test-math": "./node_modules/test-math/index.js"
+ },
+ "./dir/c.js": {
+ "../package.json": "./package.json"
+ },
+ "./node_modules/test-math/index.js": {
+ "test-add": "./node_modules/test-math/node_modules/test-add/index.js",
+ "test-subtract": "./node_modules/test-math/node_modules/test-subtract/index.js"
+ }
+}
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/index.js b/addon-sdk/source/test/fixtures/native-addon-test/index.js
new file mode 100644
index 000000000..68720d401
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/index.js
@@ -0,0 +1,37 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Added noise to test AST walker
+for (var i = 0; i < 5; i++) {
+ square(i);
+}
+
+exports.directoryDefaults = require('./utils');
+exports.directoryMain = require('./newmodule');
+exports.resolvesJSoverDir= require('./dir/a');
+exports.math = require('test-math');
+exports.mathInRelative = require('./dir/b');
+exports.customMainModule = require('test-custom-main');
+exports.customMainModuleRelative = require('test-custom-main-relative');
+exports.defaultMain = require('test-default-main');
+exports.testJSON = require('./dir/c');
+exports.dummyModule = require('./dir/dummy');
+
+exports.eventCore = require('sdk/event/core');
+exports.promise = require('sdk/core/promise');
+
+exports.localJSM = require('./dir/test.jsm');
+exports.promisejsm = require('modules/Promise.jsm').Promise;
+exports.require = require;
+
+var math = require('test-math');
+exports.areModulesCached = (math === exports.math);
+
+// Added noise to test AST walker
+function square (x) {
+ let tmp = x;
+ tmp *= x;
+ return tmp;
+}
+
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/newmodule/index.js b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/index.js
new file mode 100644
index 000000000..f982e6b98
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/index.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = 'index.js';
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/newmodule/lib/file.js b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/lib/file.js
new file mode 100644
index 000000000..fab140983
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/lib/file.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+module.exports = 'main from new module';
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/newmodule/package.json b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/package.json
new file mode 100644
index 000000000..feae8acaa
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/newmodule/package.json
@@ -0,0 +1,3 @@
+{
+ "main":"lib/file.js"
+}
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/package.json b/addon-sdk/source/test/fixtures/native-addon-test/package.json
new file mode 100644
index 000000000..f689b83f6
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/package.json
@@ -0,0 +1,10 @@
+{
+ "main":"index.js",
+ "dependencies": {
+ "test-math": "*",
+ "test-custom-main": "*",
+ "test-custom-main-relative": "*",
+ "test-default-main": "*",
+ "test-assets": "*"
+ }
+}
diff --git a/addon-sdk/source/test/fixtures/native-addon-test/utils/index.js b/addon-sdk/source/test/fixtures/native-addon-test/utils/index.js
new file mode 100644
index 000000000..d34af25d5
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-addon-test/utils/index.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+module.exports = 'utils';
+
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/ignore.js b/addon-sdk/source/test/fixtures/native-overrides-test/ignore.js
new file mode 100644
index 000000000..02539eb79
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/ignore.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+exports.bar = "do not ignore this export";
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/index.js b/addon-sdk/source/test/fixtures/native-overrides-test/index.js
new file mode 100644
index 000000000..ef0b6bba1
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/index.js
@@ -0,0 +1,19 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+var foo = require("foo");
+var coolTabs = require("cool-tabs");
+
+exports.foo = foo.fs;
+exports.bar = foo.bar;
+exports.fs = require("sdk/io/fs");
+exports.extra = require("fs-extra").extra;
+exports.overload = require("overload");
+exports.overloadLib = require("overload/lib/foo.js");
+exports.internal = require("internal").internal;
+exports.Tabs = require("sdk/tabs").Tabs;
+exports.CoolTabs = coolTabs.Tabs;
+exports.CoolTabsLib = coolTabs.TabsLib;
+exports.ignore = require("./lib/ignore").foo;
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/lib/ignore.js b/addon-sdk/source/test/fixtures/native-overrides-test/lib/ignore.js
new file mode 100644
index 000000000..d37a7827a
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/lib/ignore.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+exports.foo = require("../ignore").bar;
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/lib/internal.js b/addon-sdk/source/test/fixtures/native-overrides-test/lib/internal.js
new file mode 100644
index 000000000..2d5f419fd
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/lib/internal.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+exports.internal = "test";
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/lib/tabs.js b/addon-sdk/source/test/fixtures/native-overrides-test/lib/tabs.js
new file mode 100644
index 000000000..20f59551e
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/lib/tabs.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+exports.Tabs = "no tabs exist";
diff --git a/addon-sdk/source/test/fixtures/native-overrides-test/package.json b/addon-sdk/source/test/fixtures/native-overrides-test/package.json
new file mode 100644
index 000000000..346cf76f5
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/native-overrides-test/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "native-overrides-test",
+ "main": "index.js",
+ "dependencies": {
+ "cool-tabs": "*",
+ "foo": "*",
+ "fs-extra": "*"
+ },
+ "jetpack": {
+ "overrides": {
+ "fs": "sdk/io/fs",
+ "overload": "foo",
+ "internal": "./lib/internal",
+ "sdk/tabs": "./lib/tabs",
+ "../ignore": "foo"
+ }
+ }
+}
diff --git a/addon-sdk/source/test/fixtures/preferences/curly-id/package.json b/addon-sdk/source/test/fixtures/preferences/curly-id/package.json
new file mode 100644
index 000000000..1d47b4d81
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/preferences/curly-id/package.json
@@ -0,0 +1,14 @@
+{
+ "id": "{34a1eae1-c20a-464f-9b0e-000000000000}",
+ "fullName": "curly ID test",
+ "author": "Tomislav Jovanovic",
+
+ "preferences": [{
+ "name": "test13",
+ "type": "integer",
+ "title": "test13",
+ "value": 26
+ }],
+
+ "preferences-branch": "invalid^branch*name"
+}
diff --git a/addon-sdk/source/test/fixtures/preferences/no-prefs/package.json b/addon-sdk/source/test/fixtures/preferences/no-prefs/package.json
new file mode 100644
index 000000000..7b243b41d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/preferences/no-prefs/package.json
@@ -0,0 +1,6 @@
+{
+ "id": "no-prefs@jetpack",
+ "title": "No Prefs Test",
+ "author": "Erik Vold",
+ "loader": "lib/main.js"
+}
diff --git a/addon-sdk/source/test/fixtures/preferences/preferences-branch/package.json b/addon-sdk/source/test/fixtures/preferences/preferences-branch/package.json
new file mode 100644
index 000000000..b738db7d0
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/preferences/preferences-branch/package.json
@@ -0,0 +1,14 @@
+{
+ "id": "test-preferences-branch",
+ "fullName": "preferences-branch test",
+ "author": "Tomislav Jovanovic",
+
+ "preferences": [{
+ "name": "test42",
+ "type": "bool",
+ "title": "test42",
+ "value": true
+ }],
+
+ "preferences-branch": "human-readable"
+}
diff --git a/addon-sdk/source/test/fixtures/preferences/simple-prefs/package.json b/addon-sdk/source/test/fixtures/preferences/simple-prefs/package.json
new file mode 100644
index 000000000..d3b077ddf
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/preferences/simple-prefs/package.json
@@ -0,0 +1,75 @@
+{
+ "id": "simple-prefs@jetpack",
+ "title": "Simple Prefs Test",
+ "author": "Erik Vold",
+ "preferences": [{
+ "name": "test",
+ "type": "bool",
+ "title": "tëst",
+ "value": false,
+ "description": "descrïptiön"
+ },
+ {
+ "name": "test2",
+ "type": "string",
+ "title": "tëst",
+ "value": "ünicødé"
+ },
+ {
+ "name": "test3",
+ "type": "menulist",
+ "title": "\"><test",
+ "value": "1",
+ "options": [
+ {
+ "value": "0",
+ "label": "label1"
+ },
+ {
+ "value": "1",
+ "label": "label2"
+ }
+ ]
+ },
+ {
+ "name": "test4",
+ "type": "radio",
+ "title": "tëst",
+ "value": "red",
+ "options": [
+ {
+ "value": "red",
+ "label": "rouge"
+ },
+ {
+ "value": "blue",
+ "label": "bleu"
+ }
+ ]
+ },
+ {
+ "name": "test5",
+ "type": "boolint",
+ "title": "part part, particle",
+ "value": 7
+ },
+ {
+ "name": "test6",
+ "type": "color",
+ "title": "pop pop, popscicle",
+ "value": "#ff5e99"
+ },
+ {
+ "name": "test7",
+ "type": "file",
+ "title": "bike bike",
+ "value": "bicycle"
+ },
+ {
+ "name": "test8",
+ "type": "directory",
+ "title": "test test",
+ "value": "1-2-3"
+ }],
+ "loader": "lib/main.js"
+}
diff --git a/addon-sdk/source/test/fixtures/sandbox-complex-character.js b/addon-sdk/source/test/fixtures/sandbox-complex-character.js
new file mode 100644
index 000000000..6ae6769cf
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/sandbox-complex-character.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var chars = 'გამარჯობა';
diff --git a/addon-sdk/source/test/fixtures/sandbox-normal.js b/addon-sdk/source/test/fixtures/sandbox-normal.js
new file mode 100644
index 000000000..54252985d
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/sandbox-normal.js
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var a = 1;
+this.b = 2;
+function f() { return 4; }
diff --git a/addon-sdk/source/test/fixtures/test-addon-extras-window.html b/addon-sdk/source/test/fixtures/test-addon-extras-window.html
new file mode 100644
index 000000000..76ce98cd3
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-addon-extras-window.html
@@ -0,0 +1,21 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Worker test</title>
+</head>
+<body>
+ <p id="paragraph">Lorem ipsum dolor sit amet.</p>
+ <script>
+ if ("addon" in window) {
+ var count = 1;
+ addon.port.on("get-result", () => {
+ addon.port.emit("result" + count++, extras.test().getTestURL())
+ });
+ }
+ </script>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test-addon-extras.html b/addon-sdk/source/test/fixtures/test-addon-extras.html
new file mode 100644
index 000000000..9864495e8
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-addon-extras.html
@@ -0,0 +1,31 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Worker test</title>
+</head>
+<body>
+ <p id="paragraph">Lorem ipsum dolor sit amet.</p>
+ <script>
+ if ("addon" in window) {
+ var count = 1;
+ addon.port.on("get-result", () => {
+ console.log("get-result recieved");
+ addon.port.emit("result" + count++, extras && extras.test())
+ });
+ }
+
+ window.addEventListener("message", function getMessage({ data }) {
+ if (data.name == "start") {
+ window.postMessage({
+ name: "extras",
+ result: window.extras === undefined
+ }, '*');
+ }
+ }, false);
+ </script>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test-contentScriptFile.js b/addon-sdk/source/test/fixtures/test-contentScriptFile.js
new file mode 100644
index 000000000..7dc0e3f24
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-contentScriptFile.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+self.postMessage("msg from contentScriptFile");
diff --git a/addon-sdk/source/test/fixtures/test-context-menu.js b/addon-sdk/source/test/fixtures/test-context-menu.js
new file mode 100644
index 000000000..1a15609b7
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-context-menu.js
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+self.on("context", () => true);
diff --git a/addon-sdk/source/test/fixtures/test-iframe-postmessage.html b/addon-sdk/source/test/fixtures/test-iframe-postmessage.html
new file mode 100644
index 000000000..b33d597dd
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-iframe-postmessage.html
@@ -0,0 +1,23 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <script>
+ window.addEventListener("message", function(msg) {
+ parent.postMessage(msg.data, "*");
+ });
+
+ parent.postMessage({
+ first: "a string",
+ second: ["an", "array"],
+ third: {an: 'object'}
+ }, '*');
+ </script>
+ </head>
+ <body>
+ <h1>Inner iframe</h1>
+ </body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test-iframe.html b/addon-sdk/source/test/fixtures/test-iframe.html
new file mode 100644
index 000000000..56cd50c1a
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-iframe.html
@@ -0,0 +1,12 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="UTF-8">
+</head>
+<body>
+ <iframe id="inner" src="about:blank"></iframe>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test-iframe.js b/addon-sdk/source/test/fixtures/test-iframe.js
new file mode 100644
index 000000000..bbfadc4ff
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-iframe.js
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var count = 0;
+
+setTimeout(function() {
+ window.addEventListener("message", function(msg) {
+ if (++count > 1) {
+ self.postMessage(msg.data);
+ }
+ else msg.source.postMessage(msg.data, '*');
+ });
+
+ document.getElementById('inner').src = iframePath;
+}, 0);
diff --git a/addon-sdk/source/test/fixtures/test-message-manager.js b/addon-sdk/source/test/fixtures/test-message-manager.js
new file mode 100644
index 000000000..d647bd8fd
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-message-manager.js
@@ -0,0 +1,6 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const TEST_VALUE = 11;
+
diff --git a/addon-sdk/source/test/fixtures/test-net-url.txt b/addon-sdk/source/test/fixtures/test-net-url.txt
new file mode 100644
index 000000000..9f8166e61
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-net-url.txt
@@ -0,0 +1 @@
+Hello, ゼロ! \ No newline at end of file
diff --git a/addon-sdk/source/test/fixtures/test-page-mod.html b/addon-sdk/source/test/fixtures/test-page-mod.html
new file mode 100644
index 000000000..901abefc4
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-page-mod.html
@@ -0,0 +1,12 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Page Mod test</title>
+</head>
+<body>
+ <p id="paragraph">Lorem ipsum dolor sit amet.</p>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test-sidebar-addon-global.html b/addon-sdk/source/test/fixtures/test-sidebar-addon-global.html
new file mode 100644
index 000000000..4552e3d78
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-sidebar-addon-global.html
@@ -0,0 +1,15 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<script>
+if ("addon" in window) {
+ addon.port.on('X', function(msg) {
+ // last message
+ addon.port.emit('X', msg + '3');
+ });
+
+ // start messaging chain
+ addon.port.emit('Y', '1');
+}
+</script>
+SIDEBAR TEST
diff --git a/addon-sdk/source/test/fixtures/test-trusted-document.html b/addon-sdk/source/test/fixtures/test-trusted-document.html
new file mode 100644
index 000000000..c31e055cb
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test-trusted-document.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Worker test</title>
+</head>
+<body>
+ <p id="paragraph">Lorem ipsum dolor sit amet.</p>
+ <script>
+ if ("addon" in window) {
+ addon.port.on('addon-to-document', function (arg) {
+ addon.port.emit('document-to-addon', arg);
+ });
+ }
+ </script>
+</body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/test.html b/addon-sdk/source/test/fixtures/test.html
new file mode 100644
index 000000000..70b5e31e5
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/test.html
@@ -0,0 +1,25 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>foo</title>
+ </head>
+ <body>
+ <p>bar</p>
+ <script>
+ function getTestURL() {
+ return window.document.documentURI + "";
+ }
+ function changesInWindow() {
+ window.document.documentElement.setAttribute('test', 'changes in window');
+ return null;
+ }
+ function getAUQLUE() {
+ return "AUQLUE" in window;
+ }
+ </script>
+ </body>
+</html>
diff --git a/addon-sdk/source/test/fixtures/testLocalXhr.json b/addon-sdk/source/test/fixtures/testLocalXhr.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/addon-sdk/source/test/fixtures/testLocalXhr.json
@@ -0,0 +1 @@
+{}