summaryrefslogtreecommitdiffstats
path: root/chrome/test/unit/test_resolve_uris.js
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test/unit/test_resolve_uris.js')
-rw-r--r--chrome/test/unit/test_resolve_uris.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/chrome/test/unit/test_resolve_uris.js b/chrome/test/unit/test_resolve_uris.js
new file mode 100644
index 0000000000..638a0f9b09
--- /dev/null
+++ b/chrome/test/unit/test_resolve_uris.js
@@ -0,0 +1,86 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * 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/. */
+
+// head_crtestutils.js doesn't get included in the child by default
+if (typeof registerManifests === "undefined") {
+ load("../unit/head_crtestutils.js");
+}
+
+var manifestFile = do_get_file("../unit/data/test_resolve_uris.manifest");
+
+var manifests = [manifestFile];
+registerManifests(manifests);
+
+function do_run_test() {
+ let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(
+ Ci.nsIChromeRegistry
+ );
+
+ // If we don't have libxul or e10s then we don't have process separation, so
+ // we don't need to worry about checking for new chrome.
+ var appInfo = Cc["@mozilla.org/xre/app-info;1"];
+ if (
+ !appInfo ||
+ // eslint-disable-next-line mozilla/use-services
+ appInfo.getService(Ci.nsIXULRuntime).processType ==
+ Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT
+ ) {
+ cr.checkForNewChrome();
+ }
+
+ // See if our various things were able to register
+ let registrationTypes = ["content", "locale", "skin", "override", "resource"];
+
+ for (let j = 0; j < registrationTypes.length; j++) {
+ let type = registrationTypes[j];
+ dump("Testing type '" + type + "'\n");
+ let expectedURI = "resource://foo/foo-" + type + "/";
+ let sourceURI = "chrome://foo/" + type + "/";
+ switch (type) {
+ case "content":
+ expectedURI += "foo.xul";
+ break;
+ case "locale":
+ expectedURI += "foo.dtd";
+ break;
+ case "skin":
+ expectedURI += "foo.css";
+ break;
+ case "override":
+ sourceURI = "chrome://good-package/content/override-me.xul";
+ expectedURI += "override-me.xul";
+ break;
+ case "resource":
+ expectedURI = Services.io.newFileURI(manifestFile.parent).spec;
+ sourceURI = "resource://foo/";
+ break;
+ }
+ try {
+ sourceURI = Services.io.newURI(sourceURI);
+ let uri;
+ if (type == "resource") {
+ // resources go about a slightly different way than everything else
+ let rph = Services.io
+ .getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+ uri = rph.resolveURI(sourceURI);
+ } else {
+ uri = cr.convertChromeURL(sourceURI).spec;
+ }
+
+ Assert.equal(expectedURI, uri);
+ } catch (e) {
+ dump(e + "\n");
+ do_throw("Should have registered a handler for type '" + type + "'\n");
+ }
+ }
+}
+
+if (typeof run_test === "undefined") {
+ // eslint-disable-next-line no-global-assign
+ run_test = function () {
+ do_run_test();
+ };
+}