diff options
Diffstat (limited to 'modules/libpref/test/unit/test_stickyprefs.js')
-rw-r--r-- | modules/libpref/test/unit/test_stickyprefs.js | 170 |
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. -}); |