summaryrefslogtreecommitdiffstats
path: root/toolkit/components/normandy/test/unit/test_PrefUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/normandy/test/unit/test_PrefUtils.js')
-rw-r--r--toolkit/components/normandy/test/unit/test_PrefUtils.js223
1 files changed, 223 insertions, 0 deletions
diff --git a/toolkit/components/normandy/test/unit/test_PrefUtils.js b/toolkit/components/normandy/test/unit/test_PrefUtils.js
new file mode 100644
index 0000000000..57130d8783
--- /dev/null
+++ b/toolkit/components/normandy/test/unit/test_PrefUtils.js
@@ -0,0 +1,223 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { PrefUtils } = ChromeUtils.importESModule(
+ "resource://normandy/lib/PrefUtils.sys.mjs"
+);
+
+add_task(function getPrefGetsValues() {
+ const defaultBranch = Services.prefs.getDefaultBranch("");
+ const userBranch = Services.prefs;
+
+ defaultBranch.setBoolPref("test.bool", false);
+ userBranch.setBoolPref("test.bool", true);
+ defaultBranch.setIntPref("test.int", 1);
+ userBranch.setIntPref("test.int", 2);
+ defaultBranch.setStringPref("test.string", "default");
+ userBranch.setStringPref("test.string", "user");
+
+ equal(
+ PrefUtils.getPref("test.bool", { branch: "user" }),
+ true,
+ "should read user branch bools"
+ );
+ equal(
+ PrefUtils.getPref("test.int", { branch: "user" }),
+ 2,
+ "should read user branch ints"
+ );
+ equal(
+ PrefUtils.getPref("test.string", { branch: "user" }),
+ "user",
+ "should read user branch strings"
+ );
+
+ equal(
+ PrefUtils.getPref("test.bool", { branch: "default" }),
+ false,
+ "should read default branch bools"
+ );
+ equal(
+ PrefUtils.getPref("test.int", { branch: "default" }),
+ 1,
+ "should read default branch ints"
+ );
+ equal(
+ PrefUtils.getPref("test.string", { branch: "default" }),
+ "default",
+ "should read default branch strings"
+ );
+
+ equal(
+ PrefUtils.getPref("test.bool"),
+ true,
+ "should read bools from the user branch by default"
+ );
+ equal(
+ PrefUtils.getPref("test.int"),
+ 2,
+ "should read ints from the user branch by default"
+ );
+ equal(
+ PrefUtils.getPref("test.string"),
+ "user",
+ "should read strings from the user branch by default"
+ );
+
+ equal(
+ PrefUtils.getPref("test.does_not_exist"),
+ null,
+ "Should return null for non-existent prefs by default"
+ );
+ let defaultValue = Symbol();
+ equal(
+ PrefUtils.getPref("test.does_not_exist", { defaultValue }),
+ defaultValue,
+ "Should use the passed default value"
+ );
+});
+
+// This is an important test because the pref system can behave in strange ways
+// when the user branch has a value, but the default branch does not.
+add_task(function getPrefHandlesUserValueNoDefaultValue() {
+ Services.prefs.setStringPref("test.only-user-value", "user");
+
+ let defaultValue = Symbol();
+ equal(
+ PrefUtils.getPref("test.only-user-value", {
+ branch: "default",
+ defaultValue,
+ }),
+ defaultValue
+ );
+ equal(PrefUtils.getPref("test.only-user-value", { branch: "default" }), null);
+ equal(PrefUtils.getPref("test.only-user-value", { branch: "user" }), "user");
+ equal(PrefUtils.getPref("test.only-user-value"), "user");
+});
+
+add_task(function getPrefInvalidBranch() {
+ Assert.throws(
+ () => PrefUtils.getPref("test.pref", { branch: "invalid" }),
+ PrefUtils.UnexpectedPreferenceBranch
+ );
+});
+
+add_task(function setPrefSetsValues() {
+ const defaultBranch = Services.prefs.getDefaultBranch("");
+ const userBranch = Services.prefs;
+
+ defaultBranch.setIntPref("test.int", 1);
+ userBranch.setIntPref("test.int", 2);
+ defaultBranch.setStringPref("test.string", "default");
+ userBranch.setStringPref("test.string", "user");
+ defaultBranch.setBoolPref("test.bool", false);
+ userBranch.setBoolPref("test.bool", true);
+
+ PrefUtils.setPref("test.int", 3);
+ equal(
+ userBranch.getIntPref("test.int"),
+ 3,
+ "the user branch should change for ints"
+ );
+ PrefUtils.setPref("test.int", 4, { branch: "default" });
+ equal(
+ userBranch.getIntPref("test.int"),
+ 3,
+ "changing the default branch shouldn't affect the user branch for ints"
+ );
+ PrefUtils.setPref("test.int", null, { branch: "user" });
+ equal(
+ userBranch.getIntPref("test.int"),
+ 4,
+ "clearing the user branch should reveal the default value for ints"
+ );
+
+ PrefUtils.setPref("test.string", "user override");
+ equal(
+ userBranch.getStringPref("test.string"),
+ "user override",
+ "the user branch should change for strings"
+ );
+ PrefUtils.setPref("test.string", "default override", { branch: "default" });
+ equal(
+ userBranch.getStringPref("test.string"),
+ "user override",
+ "changing the default branch shouldn't affect the user branch for strings"
+ );
+ PrefUtils.setPref("test.string", null, { branch: "user" });
+ equal(
+ userBranch.getStringPref("test.string"),
+ "default override",
+ "clearing the user branch should reveal the default value for strings"
+ );
+
+ PrefUtils.setPref("test.bool", false);
+ equal(
+ userBranch.getBoolPref("test.bool"),
+ false,
+ "the user branch should change for bools"
+ );
+ // The above effectively unsets the user branch, since it is now the same as the default branch
+ PrefUtils.setPref("test.bool", true, { branch: "default" });
+ equal(
+ userBranch.getBoolPref("test.bool"),
+ true,
+ "the default branch should change for bools"
+ );
+
+ defaultBranch.setBoolPref("test.bool", false);
+ userBranch.setBoolPref("test.bool", true);
+ equal(
+ userBranch.getBoolPref("test.bool"),
+ true,
+ "the precondition should hold"
+ );
+ PrefUtils.setPref("test.bool", null, { branch: "user" });
+ equal(
+ userBranch.getBoolPref("test.bool"),
+ false,
+ "setting the user branch to null should reveal the default value for bools"
+ );
+});
+
+add_task(function setPrefInvalidBranch() {
+ Assert.throws(
+ () => PrefUtils.setPref("test.pref", "value", { branch: "invalid" }),
+ PrefUtils.UnexpectedPreferenceBranch
+ );
+});
+
+add_task(function clearPrefClearsValues() {
+ const defaultBranch = Services.prefs.getDefaultBranch("");
+ const userBranch = Services.prefs;
+
+ defaultBranch.setStringPref("test.string", "default");
+ userBranch.setStringPref("test.string", "user");
+ equal(
+ userBranch.getStringPref("test.string"),
+ "user",
+ "the precondition should hold"
+ );
+ PrefUtils.clearPref("test.string");
+ equal(
+ userBranch.getStringPref("test.string"),
+ "default",
+ "clearing the user branch should reveal the default value for bools"
+ );
+
+ PrefUtils.clearPref("test.string", { branch: "default" });
+ equal(
+ userBranch.getStringPref("test.string"),
+ "default",
+ "clearing the default branch shouldn't do anything"
+ );
+});
+
+add_task(function clearPrefInvalidBranch() {
+ Assert.throws(
+ () => PrefUtils.clearPref("test.pref", { branch: "invalid" }),
+ PrefUtils.UnexpectedPreferenceBranch
+ );
+});