163 lines
5.2 KiB
JavaScript
163 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
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");
|
|
}
|
|
});
|
|
});
|