Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["test.aboutconfig.modify.boolean", true],
["test.aboutconfig.modify.number", 1337],
[
"test.aboutconfig.modify.string",
"the answer to the life the universe and everything",
],
],
});
registerCleanupFunction(() => {
Services.prefs.clearUserPref(PREF_BOOLEAN_DEFAULT_TRUE);
Services.prefs.clearUserPref(PREF_NUMBER_DEFAULT_ZERO);
Services.prefs.clearUserPref(PREF_STRING_DEFAULT_EMPTY);
});
});
add_task(async function test_observe_add_user_pref_before_search() {
Assert.equal(
Services.prefs.getPrefType(PREF_NEW),
Ci.nsIPrefBranch.PREF_INVALID
);
await AboutConfigTest.withNewTab(
async function () {
this.bypassWarningButton.click();
// No results are shown after the warning page is dismissed or bypassed,
// and newly added preferences should not be displayed.
Preferences.set(PREF_NEW, true);
Assert.ok(!this.prefsTable.firstElementChild);
Preferences.reset(PREF_NEW);
},
{ dontBypassWarning: true }
);
});
add_task(async function test_observe_add_user_pref() {
Assert.equal(
Services.prefs.getPrefType(PREF_NEW),
Ci.nsIPrefBranch.PREF_INVALID
);
await AboutConfigTest.withNewTab(async function () {
for (let value of [false, true, "", "value", 0, -10]) {
// A row should be added when a new preference is added.
Assert.ok(!this.getRow(PREF_NEW));
Preferences.set(PREF_NEW, value);
let row = this.getRow(PREF_NEW);
Assert.equal(row.value, "" + value);
// The row should stay when the preference is removed.
Preferences.reset(PREF_NEW);
Assert.ok(row.hasClass("deleted"));
// Re-adding the preference from the interface should restore its value.
row.editColumnButton.click();
if (value.constructor.name != "Boolean") {
row.editColumnButton.click();
}
Assert.equal(row.value, "" + value);
Assert.ok(Preferences.get(PREF_NEW) === value);
// Filtering again after deleting should remove the row.
Preferences.reset(PREF_NEW);
this.showAll();
Assert.ok(!this.getRow(PREF_NEW));
// Searching for the preference name should give the ability to add it.
Preferences.reset(PREF_NEW);
this.search(PREF_NEW);
row = this.getRow(PREF_NEW);
Assert.ok(!row.hasClass("deleted"));
// The row for adding should be reused if the new preference is added.
Preferences.set(PREF_NEW, value);
Assert.equal(row.value, "" + value);
// If a new preference does not match the filter it is not displayed.
Preferences.reset(PREF_NEW);
this.search(PREF_NEW + ".extra");
Assert.ok(!this.getRow(PREF_NEW));
Preferences.set(PREF_NEW, value);
Assert.ok(!this.getRow(PREF_NEW));
// Resetting the filter should display the new preference.
this.showAll();
Assert.equal(this.getRow(PREF_NEW).value, "" + value);
// Reset the preference, then continue by adding a different value.
Preferences.reset(PREF_NEW);
this.showAll();
}
});
});
add_task(async function test_observe_delete_user_pref() {
for (let value of [true, "value", -10]) {
Preferences.set(PREF_NEW, value);
await AboutConfigTest.withNewTab(async function () {
// Deleting the preference should keep the row.
let row = this.getRow(PREF_NEW);
Preferences.reset(PREF_NEW);
Assert.ok(row.hasClass("deleted"));
// Filtering again should remove the row.
this.showAll();
Assert.ok(!this.getRow(PREF_NEW));
});
}
});
add_task(async function test_observe_reset_user_pref() {
await SpecialPowers.pushPrefEnv({
set: [[PREF_BOOLEAN_DEFAULT_TRUE, false]],
});
await AboutConfigTest.withNewTab(async function () {
let row = this.getRow(PREF_BOOLEAN_DEFAULT_TRUE);
Preferences.reset(PREF_BOOLEAN_DEFAULT_TRUE);
Assert.ok(!row.hasClass("has-user-value"));
Assert.equal(row.value, "true");
});
});
add_task(async function test_observe_modify() {
await AboutConfigTest.withNewTab(async function () {
for (let [name, value] of [
["test.aboutconfig.modify.boolean", false],
["test.aboutconfig.modify.number", -10],
["test.aboutconfig.modify.string", "value"],
[PREF_BOOLEAN_DEFAULT_TRUE, false],
[PREF_NUMBER_DEFAULT_ZERO, 1],
[PREF_STRING_DEFAULT_EMPTY, "string"],
]) {
let row = this.getRow(name);
Assert.notEqual(row.value, "" + value);
Preferences.set(name, value);
Assert.equal(row.value, "" + value);
if (value.constructor.name == "Boolean") {
continue;
}
// Changing the value or removing while editing should not take effect.
row.editColumnButton.click();
row.valueInput.value = "42";
Preferences.reset(name);
Assert.equal(row.element, this.getRow(name).element);
Assert.equal(row.valueInput.value, "42");
// Saving should store the value even if the preference was modified.
row.editColumnButton.click();
Assert.equal(row.value, "42");
Assert.equal(Preferences.get(name), "42");
}
});
});