summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/test/browser_theme_switching.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/test/browser_theme_switching.js')
-rw-r--r--devtools/client/shared/test/browser_theme_switching.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/devtools/client/shared/test/browser_theme_switching.js b/devtools/client/shared/test/browser_theme_switching.js
new file mode 100644
index 0000000000..34e0a9b416
--- /dev/null
+++ b/devtools/client/shared/test/browser_theme_switching.js
@@ -0,0 +1,69 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function () {
+ // For some reason, mochitest spawn a very special default tab,
+ // whose WindowGlobal is still the initial about:blank document.
+ // This seems to be specific to mochitest, this doesn't reproduce
+ // in regular firefox run. Even having about:blank as home page,
+ // force loading another final about:blank document (which isn't the initial one)
+ //
+ // To workaround this, force opening a dedicated test tab
+ const tab = await addTab("data:text/html;charset=utf-8,Test page");
+
+ const toolbox = await gDevTools.showToolboxForTab(tab);
+ const doc = toolbox.doc;
+ const root = doc.documentElement;
+
+ const platform = root.getAttribute("platform");
+ const expectedPlatform = getPlatform();
+ is(platform, expectedPlatform, ":root[platform] is correct");
+
+ const theme = Services.prefs.getCharPref("devtools.theme");
+ const className = "theme-" + theme;
+ ok(
+ root.classList.contains(className),
+ ":root has " + className + " class (current theme)"
+ );
+
+ // Convert the xpath result into an array of strings
+ // like `href="{URL}" type="text/css"`
+ const sheetsIterator = doc.evaluate(
+ "processing-instruction('xml-stylesheet')",
+ doc,
+ null,
+ XPathResult.ANY_TYPE,
+ null
+ );
+ const sheetsInDOM = [];
+
+ /* eslint-disable no-cond-assign */
+ let sheet;
+ while ((sheet = sheetsIterator.iterateNext())) {
+ sheetsInDOM.push(sheet.data);
+ }
+ /* eslint-enable no-cond-assign */
+
+ const sheetsFromTheme = gDevTools.getThemeDefinition(theme).stylesheets;
+ info("Checking for existence of " + sheetsInDOM.length + " sheets");
+ for (const themeSheet of sheetsFromTheme) {
+ ok(
+ sheetsInDOM.some(s => s.includes(themeSheet)),
+ "There is a stylesheet for " + themeSheet
+ );
+ }
+
+ await toolbox.destroy();
+});
+
+function getPlatform() {
+ const { OS } = Services.appinfo;
+ if (OS == "WINNT") {
+ return "win";
+ } else if (OS == "Darwin") {
+ return "mac";
+ }
+ return "linux";
+}