mirror of
https://github.com/HeyPuter/firefox.git
synced 2026-11-13 20:14:57 -10:00
167 lines
4.4 KiB
JavaScript
167 lines
4.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Test for dynamically registering and unregistering themes
|
|
const CHROME_URL =
|
|
"chrome://mochitests/content/browser/devtools/client/framework/test/";
|
|
const TEST_THEME_NAME = "test-theme";
|
|
const LIGHT_THEME_NAME = "light";
|
|
|
|
var toolbox;
|
|
|
|
add_task(async function themeRegistration() {
|
|
const tab = await addTab("data:text/html,test");
|
|
toolbox = await gDevTools.showToolboxForTab(tab, { toolId: "options" });
|
|
|
|
const themeId = await new Promise(resolve => {
|
|
gDevTools.once("theme-registered", registeredThemeId => {
|
|
resolve(registeredThemeId);
|
|
});
|
|
|
|
gDevTools.registerTheme({
|
|
id: TEST_THEME_NAME,
|
|
label: "Test theme",
|
|
stylesheets: [CHROME_URL + "doc_theme.css"],
|
|
classList: ["theme-test"],
|
|
});
|
|
});
|
|
|
|
is(themeId, TEST_THEME_NAME, "theme-registered event handler sent theme id");
|
|
|
|
ok(gDevTools.getThemeDefinitionMap().has(themeId), "theme added to map");
|
|
});
|
|
|
|
add_task(async function themeInOptionsPanel() {
|
|
const panelWin = toolbox.getCurrentPanel().panelWin;
|
|
const doc = panelWin.frameElement.contentDocument;
|
|
const themeBox = doc.getElementById("devtools-theme-box");
|
|
const testThemeOption = themeBox.querySelector(
|
|
`input[type=radio][value=${TEST_THEME_NAME}]`
|
|
);
|
|
const eventsRecorded = [];
|
|
|
|
function onThemeChanged(theme) {
|
|
eventsRecorded.push(theme);
|
|
}
|
|
gDevTools.on("theme-changed", onThemeChanged);
|
|
|
|
ok(testThemeOption, "new theme exists in the Options panel");
|
|
|
|
const lightThemeOption = themeBox.querySelector(
|
|
`input[type=radio][value=${LIGHT_THEME_NAME}]`
|
|
);
|
|
|
|
let color = panelWin.getComputedStyle(themeBox).color;
|
|
isnot(color, "rgb(255, 0, 0)", "style unapplied");
|
|
|
|
let onThemeSwithComplete = once(panelWin, "theme-switch-complete");
|
|
|
|
// Select test theme.
|
|
testThemeOption.click();
|
|
|
|
info("Waiting for theme to finish loading");
|
|
await onThemeSwithComplete;
|
|
|
|
is(
|
|
gDevTools.getTheme(),
|
|
TEST_THEME_NAME,
|
|
"getTheme returns the expected theme"
|
|
);
|
|
is(
|
|
eventsRecorded.pop(),
|
|
TEST_THEME_NAME,
|
|
"theme-changed fired with the expected theme"
|
|
);
|
|
|
|
color = panelWin.getComputedStyle(themeBox).color;
|
|
is(color, "rgb(255, 0, 0)", "style applied");
|
|
|
|
onThemeSwithComplete = once(panelWin, "theme-switch-complete");
|
|
|
|
// Select light theme
|
|
lightThemeOption.click();
|
|
|
|
info("Waiting for theme to finish loading");
|
|
await onThemeSwithComplete;
|
|
|
|
is(
|
|
gDevTools.getTheme(),
|
|
LIGHT_THEME_NAME,
|
|
"getTheme returns the expected theme"
|
|
);
|
|
is(
|
|
eventsRecorded.pop(),
|
|
LIGHT_THEME_NAME,
|
|
"theme-changed fired with the expected theme"
|
|
);
|
|
|
|
color = panelWin.getComputedStyle(themeBox).color;
|
|
isnot(color, "rgb(255, 0, 0)", "style unapplied");
|
|
|
|
onThemeSwithComplete = once(panelWin, "theme-switch-complete");
|
|
// Select test theme again.
|
|
testThemeOption.click();
|
|
await onThemeSwithComplete;
|
|
is(
|
|
gDevTools.getTheme(),
|
|
TEST_THEME_NAME,
|
|
"getTheme returns the expected theme"
|
|
);
|
|
is(
|
|
eventsRecorded.pop(),
|
|
TEST_THEME_NAME,
|
|
"theme-changed fired with the expected theme"
|
|
);
|
|
|
|
gDevTools.off("theme-changed", onThemeChanged);
|
|
});
|
|
|
|
add_task(async function themeUnregistration() {
|
|
const panelWin = toolbox.getCurrentPanel().panelWin;
|
|
const onUnRegisteredTheme = once(gDevTools, "theme-unregistered");
|
|
const onThemeSwitchComplete = once(panelWin, "theme-switch-complete");
|
|
const eventsRecorded = [];
|
|
|
|
function onThemeChanged(theme) {
|
|
eventsRecorded.push(theme);
|
|
}
|
|
gDevTools.on("theme-changed", onThemeChanged);
|
|
|
|
gDevTools.unregisterTheme(TEST_THEME_NAME);
|
|
await onUnRegisteredTheme;
|
|
await onThemeSwitchComplete;
|
|
|
|
is(
|
|
gDevTools.getTheme(),
|
|
gDevTools.getAutoTheme(),
|
|
"getTheme returns the expected theme"
|
|
);
|
|
is(
|
|
eventsRecorded.pop(),
|
|
gDevTools.getAutoTheme(),
|
|
"theme-changed fired with the expected theme"
|
|
);
|
|
ok(
|
|
!gDevTools.getThemeDefinitionMap().has(TEST_THEME_NAME),
|
|
"theme removed from map"
|
|
);
|
|
|
|
const doc = panelWin.frameElement.contentDocument;
|
|
const themeBox = doc.getElementById("devtools-theme-box");
|
|
|
|
// The default theme must be selected now.
|
|
ok(
|
|
themeBox.querySelector(`#devtools-theme-box [value=auto]`).checked,
|
|
`auto theme must be selected`
|
|
);
|
|
|
|
gDevTools.off("theme-changed", onThemeChanged);
|
|
});
|
|
|
|
add_task(async function cleanup() {
|
|
await toolbox.destroy();
|
|
toolbox = null;
|
|
});
|