diff options
Diffstat (limited to 'toolkit/components/aboutconfig/test/browser/browser_observe.js')
-rw-r--r-- | toolkit/components/aboutconfig/test/browser/browser_observe.js | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/toolkit/components/aboutconfig/test/browser/browser_observe.js b/toolkit/components/aboutconfig/test/browser/browser_observe.js new file mode 100644 index 0000000000..1f1ab5d217 --- /dev/null +++ b/toolkit/components/aboutconfig/test/browser/browser_observe.js @@ -0,0 +1,163 @@ +/* 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"); + } + }); +}); |