summaryrefslogtreecommitdiff
path: root/modules/libpref/test/unit/test_stickyprefs.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/libpref/test/unit/test_stickyprefs.js')
-rw-r--r--modules/libpref/test/unit/test_stickyprefs.js170
1 files changed, 0 insertions, 170 deletions
diff --git a/modules/libpref/test/unit/test_stickyprefs.js b/modules/libpref/test/unit/test_stickyprefs.js
deleted file mode 100644
index c2c5a7c4b..000000000
--- a/modules/libpref/test/unit/test_stickyprefs.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/licenses/publicdomain/ */
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-const ps = Services.prefs;
-
-// Once we fetch the profile directory the xpcshell test harness will send
-// a profile-before-change notification at shutdown. This causes the prefs
-// service to flush the prefs file - and the prefs file it uses ends up being
-// testPrefSticky*.js in the test dir. This upsets things in confusing ways :)
-// We avoid this by ensuring our "temp" prefs.js is the current prefs file.
-do_get_profile();
-do_register_cleanup(saveAndReload);
-
-// A little helper to reset the service and load some pref files
-function resetAndLoad(filenames) {
- ps.resetPrefs();
- for (let filename of filenames) {
- ps.readUserPrefs(do_get_file(filename));
- }
-}
-
-// A little helper that saves the current state to a file in the profile
-// dir, then resets the service and re-reads the file it just saved.
-// Used to test what gets actually written - things the pref service decided
-// not to write don't exist at all after this call.
-function saveAndReload() {
- let file = do_get_profile();
- file.append("prefs.js");
- ps.savePrefFile(file);
-
- // Now reset the pref service and re-read what we saved.
- ps.resetPrefs();
- ps.readUserPrefs(file);
-}
-
-function run_test() {
- run_next_test();
-}
-
-// A sticky pref should not be written if the value is unchanged.
-add_test(function notWrittenWhenUnchanged() {
- resetAndLoad(["data/testPrefSticky.js"]);
- Assert.strictEqual(ps.getBoolPref("testPref.unsticky.bool"), true);
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), false);
-
- // write prefs - but we haven't changed the sticky one, so it shouldn't be written.
- saveAndReload();
- // sticky should not have been written to the new file.
- try {
- ps.getBoolPref("testPref.sticky.bool");
- Assert.ok(false, "expected failure reading this pref");
- } catch (ex) {
- Assert.ok(ex, "exception reading regular pref");
- }
- run_next_test();
-});
-
-// Loading a sticky_pref then a user_pref for the same pref means it should
-// always be written.
-add_test(function writtenOnceLoadedWithoutChange() {
- // Load the same pref file *as well as* a pref file that has a user_pref for
- // our sticky with the default value. It should be re-written without us
- // touching it.
- resetAndLoad(["data/testPrefSticky.js", "data/testPrefStickyUser.js"]);
- // reset and re-read what we just wrote - it should be written.
- saveAndReload();
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), false,
- "user_pref was written with default value");
- run_next_test();
-});
-
-// If a sticky pref is explicicitly changed, even to the default, it is written.
-add_test(function writtenOnceLoadedWithChangeNonDefault() {
- // Load the same pref file *as well as* a pref file that has a user_pref for
- // our sticky - then change the pref. It should be written.
- resetAndLoad(["data/testPrefSticky.js", "data/testPrefStickyUser.js"]);
- // Set a new val and check we wrote it.
- ps.setBoolPref("testPref.sticky.bool", false);
- saveAndReload();
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), false,
- "user_pref was written with custom value");
- run_next_test();
-});
-
-// If a sticky pref is changed to the non-default value, it is written.
-add_test(function writtenOnceLoadedWithChangeNonDefault() {
- // Load the same pref file *as well as* a pref file that has a user_pref for
- // our sticky - then change the pref. It should be written.
- resetAndLoad(["data/testPrefSticky.js", "data/testPrefStickyUser.js"]);
- // Set a new val and check we wrote it.
- ps.setBoolPref("testPref.sticky.bool", true);
- saveAndReload();
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), true,
- "user_pref was written with custom value");
- run_next_test();
-});
-
-// Test that prefHasUserValue always returns true whenever there is a sticky
-// value, even when that value matches the default. This is mainly for
-// about:config semantics - prefs with a sticky value always remain bold and
-// always offer "reset" (which fully resets and drops the sticky value as if
-// the pref had never changed.)
-add_test(function hasUserValue() {
- // sticky pref without user value.
- resetAndLoad(["data/testPrefSticky.js"]);
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), false);
- Assert.ok(!ps.prefHasUserValue("testPref.sticky.bool"),
- "should not initially reflect a user value");
-
- ps.setBoolPref("testPref.sticky.bool", false);
- Assert.ok(ps.prefHasUserValue("testPref.sticky.bool"),
- "should reflect a user value after set to default");
-
- ps.setBoolPref("testPref.sticky.bool", true);
- Assert.ok(ps.prefHasUserValue("testPref.sticky.bool"),
- "should reflect a user value after change to non-default");
-
- ps.clearUserPref("testPref.sticky.bool");
- Assert.ok(!ps.prefHasUserValue("testPref.sticky.bool"),
- "should reset to no user value");
- ps.setBoolPref("testPref.sticky.bool", false, "expected default");
-
- // And make sure the pref immediately reflects a user value after load.
- resetAndLoad(["data/testPrefSticky.js", "data/testPrefStickyUser.js"]);
- Assert.strictEqual(ps.getBoolPref("testPref.sticky.bool"), false);
- Assert.ok(ps.prefHasUserValue("testPref.sticky.bool"),
- "should have a user value when loaded value is the default");
- run_next_test();
-});
-
-// Test that clearUserPref removes the "sticky" value.
-add_test(function clearUserPref() {
- // load things such that we have a sticky value which is the same as the
- // default.
- resetAndLoad(["data/testPrefSticky.js", "data/testPrefStickyUser.js"]);
- ps.clearUserPref("testPref.sticky.bool");
-
- // Once we save prefs the sticky pref should no longer be written.
- saveAndReload();
- try {
- ps.getBoolPref("testPref.sticky.bool");
- Assert.ok(false, "expected failure reading this pref");
- } catch (ex) {
- Assert.ok(ex, "pref doesn't have a sticky value");
- }
- run_next_test();
-});
-
-// Test that a pref observer gets a notification fired when a sticky pref
-// has it's value changed to the same value as the default. The reason for
-// this behaviour is that later we might have other code that cares about a
-// pref being sticky (IOW, we notify due to the "state" of the pref changing
-// even if the value has not)
-add_test(function observerFires() {
- // load things so there's no sticky value.
- resetAndLoad(["data/testPrefSticky.js"]);
-
- function observe(subject, topic, data) {
- Assert.equal(data, "testPref.sticky.bool");
- ps.removeObserver("testPref.sticky.bool", observe);
- run_next_test();
- }
- ps.addObserver("testPref.sticky.bool", observe, false);
-
- ps.setBoolPref("testPref.sticky.bool", ps.getBoolPref("testPref.sticky.bool"));
- // and the observer will fire triggering the next text.
-});