Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>setting-group Tests</title>
<link
rel="stylesheet"
/>
<link rel="stylesheet" href="chrome://global/skin/global.css" />
<script src="../../../../../toolkit/content/tests/widgets/lit-test-helpers.js"></script>
<script
type="module"
src="chrome://browser/content/preferences/widgets/setting-group.mjs"
></script>
<script
type="module"
src="chrome://browser/content/preferences/widgets/setting-control.mjs"
></script>
<script
type="module"
src="chrome://global/content/elements/moz-support-link.mjs"
></script>
<script
type="application/javascript"
src="chrome://global/content/preferencesBindings.js"
></script>
<script>
/* import-globals-from /toolkit/content/preferencesBindings.js */
let html, testHelpers;
const LABEL_L10N_ID = "browsing-use-autoscroll";
const GROUP_L10N_ID = "pane-experimental-reset";
function renderTemplate(config) {
return testHelpers.renderTemplate(html`
<setting-group
.config=${config}
.getSetting=${(...args) => Preferences.getSetting(...args)}
></setting-group>
`);
}
function waitForSettingChange(setting) {
return new Promise(resolve => {
setting.on("change", function handler() {
setting.off("change", handler);
resolve();
});
});
}
add_setup(async function setup() {
await SpecialPowers.pushPrefEnv({
set: [["settings.revamp.design", false]],
});
testHelpers = new InputTestHelpers();
({ html } = await testHelpers.setupLit());
testHelpers.setupTests({
templateFn: () => html`<setting-group></setting-group>`,
});
MozXULElement.insertFTLIfNeeded("branding/brand.ftl");
MozXULElement.insertFTLIfNeeded("browser/preferences/preferences.ftl");
});
add_task(async function testSimpleXulPrefCheckboxes() {
const PREF_ONE = "test.settings-group.one";
const SETTING_ONE = "setting-one";
const PREF_TWO = "test.settings-group.two";
const SETTING_TWO = "setting-two";
await SpecialPowers.pushPrefEnv({
set: [
[PREF_ONE, true],
[PREF_TWO, false],
],
});
Preferences.addAll([
{ id: PREF_ONE, type: "bool" },
{ id: PREF_TWO, type: "bool" },
]);
Preferences.addSetting({
id: SETTING_ONE,
pref: PREF_ONE,
});
Preferences.addSetting({
id: SETTING_TWO,
pref: PREF_TWO,
});
let config = {
items: [
{ l10nId: LABEL_L10N_ID, id: SETTING_ONE },
{ l10nId: LABEL_L10N_ID, id: SETTING_TWO },
],
};
let result = await renderTemplate(config);
let group = result.querySelector("setting-group");
ok(group, "setting-group is created");
ok(group.config, "it got a config");
let checkboxes = result.querySelectorAll("checkbox");
is(checkboxes.length, 2, "Rendered two checkboxes");
is(checkboxes[0].dataset.l10nId, LABEL_L10N_ID, "Label is set");
is(checkboxes[0].checked, true, "First checkbox is checked");
is(Services.prefs.getBoolPref(PREF_ONE), true, "First pref is true");
is(checkboxes[1].checked, false, "Second checkbox is unchecked");
is(Services.prefs.getBoolPref(PREF_TWO), false, "Second pref is false");
let settingChanged = waitForSettingChange(
Preferences.getSetting(SETTING_ONE)
);
synthesizeMouseAtCenter(
checkboxes[0].querySelector(".checkbox-check"),
{}
);
await settingChanged;
is(checkboxes[0].checked, false, "First checkbox is unchecked");
is(Services.prefs.getBoolPref(PREF_ONE), false, "First pref is false");
settingChanged = waitForSettingChange(
Preferences.getSetting(SETTING_TWO)
);
synthesizeMouseAtCenter(
checkboxes[1].querySelector(".checkbox-check"),
{}
);
await settingChanged;
is(checkboxes[1].checked, true, "Second checkbox is checked");
is(Services.prefs.getBoolPref(PREF_TWO), true, "Second pref is true");
settingChanged = waitForSettingChange(
Preferences.getSetting(SETTING_ONE)
);
Services.prefs.setBoolPref(PREF_ONE, true);
await settingChanged;
is(
checkboxes[0].checked,
true,
"First checkbox becomes checked after pref change"
);
is(Services.prefs.getBoolPref(PREF_ONE), true, "First pref is true");
settingChanged = waitForSettingChange(
Preferences.getSetting(SETTING_TWO)
);
Services.prefs.setBoolPref(PREF_TWO, false);
await settingChanged;
is(
checkboxes[1].checked,
false,
"Second checkbox becomes unchecked after pref change"
);
is(Services.prefs.getBoolPref(PREF_TWO), false, "Second pref is false");
});
add_task(async function testSupportLinkXulCheckbox() {
const SETTING = "setting-support-link";
Preferences.addSetting({
id: SETTING,
get: () => true,
});
let config = {
items: [{ l10nId: LABEL_L10N_ID, id: SETTING, supportPage: "foo" }],
};
let result = await renderTemplate(config);
let checkbox = result.querySelector("checkbox");
ok(checkbox, "Got a checkbox");
ok(
checkbox.classList.contains("tail-with-learn-more"),
"Checkbox gets the correct class"
);
let container = checkbox.parentElement;
is(container.localName, "hbox", "Checkbox is in an hbox");
let supportLink = container.querySelector("a");
ok(supportLink, "The support link was created");
is(
supportLink.constructor,
customElements.get("moz-support-link"),
"It's a support link"
);
is(supportLink.supportPage, "foo", "The support page is set");
});
add_task(async function testSupportLinkXulSubcategory() {
const SETTING = "setting-subcategory";
Preferences.addSetting({
id: SETTING,
get: () => true,
});
let config = {
items: [
{
l10nId: LABEL_L10N_ID,
id: SETTING,
subcategory: "exsubcategory",
},
{
l10nId: LABEL_L10N_ID,
id: SETTING,
subcategory: "exsubcategory2",
supportPage: "foo",
},
],
};
let result = await renderTemplate(config);
let [basic, supportLink] = result.querySelectorAll("checkbox");
ok(basic, "Got the basic checkbox");
is(
basic.dataset.subcategory,
"exsubcategory",
"Subcategory is set for basic"
);
ok(supportLink, "Got the support link checkbox");
let container = supportLink.parentElement;
is(container.localName, "hbox", "Support link is in a container");
is(
container.dataset.subcategory,
"exsubcategory2",
"Support link container has subcategory"
);
});
add_task(async function testSettingGroupRevamp() {
const PREF_ONE = "test.settings-group.itemone";
const SETTING_ONE = "setting-item-one";
const PREF_TWO = "test.settings-group.itemtwo";
const SETTING_TWO = "setting-item-two";
await SpecialPowers.pushPrefEnv({
set: [
[PREF_ONE, true],
[PREF_TWO, false],
["settings.revamp.design", true],
],
});
Preferences.addAll([
{ id: PREF_ONE, type: "bool" },
{ id: PREF_TWO, type: "bool" },
]);
Preferences.addSetting({
id: SETTING_ONE,
pref: PREF_ONE,
});
Preferences.addSetting({
id: SETTING_TWO,
pref: PREF_TWO,
});
let config = {
l10nId: GROUP_L10N_ID,
items: [
{ l10nId: LABEL_L10N_ID, id: SETTING_ONE },
{ l10nId: LABEL_L10N_ID, id: SETTING_TWO },
],
};
let result = await renderTemplate(config);
let group = result.querySelector("setting-group");
ok(group, "setting-group is created");
ok(group.config, "it got a config");
let fieldset = group.children[0];
is(fieldset.localName, "moz-fieldset", "First child is a fieldset");
is(
fieldset.dataset.l10nId,
GROUP_L10N_ID,
"Fieldset has the group label"
);
let [item1, item2] = fieldset.children;
is(item1.localName, "setting-control", "First setting-control");
is(item1.config.id, SETTING_ONE, "First setting-control id is correct");
is(item2.localName, "setting-control", "Second setting-control");
is(
item2.config.id,
SETTING_TWO,
"Second setting-control id is correct"
);
});
</script>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
</body>
</html>