summaryrefslogtreecommitdiffstats
path: root/toolkit/components/aboutconfig/test/browser/browser_observe.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/aboutconfig/test/browser/browser_observe.js')
-rw-r--r--toolkit/components/aboutconfig/test/browser/browser_observe.js163
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");
+ }
+ });
+});