<!DOCTYPE html> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1265808 --> <head> <title>Test for Bug 1265808 - replace Services.prefs</title> <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"> <script type="application/javascript;version=1.8"> "use strict"; var exports = {} var module = {exports}; // Add some starter prefs. localStorage.setItem("Services.prefs:devtools.branch1.somebool", JSON.stringify({ // bool type: 128, defaultValue: false, hasUserValue: false, userValue: false })); localStorage.setItem("Services.prefs:devtools.branch1.somestring", JSON.stringify({ // string type: 32, defaultValue: "dinosaurs", hasUserValue: true, userValue: "elephants" })); localStorage.setItem("Services.prefs:devtools.branch2.someint", JSON.stringify({ // string type: 64, defaultValue: -16, hasUserValue: false, userValue: null })); </script> <script type="application/javascript;version=1.8" src="prefs-wrapper.js"></script> <script type="application/javascript;version=1.8" src="resource://devtools/client/shared/shim/Services.js"></script> </head> <body> <script type="application/javascript;version=1.8"> "use strict"; function do_tests() { // We can't load the defaults in this context. Services._defaultPrefsEnabled = false; is(Services.prefs.getBoolPref("devtools.branch1.somebool"), false, "bool pref value"); Services.prefs.setBoolPref("devtools.branch1.somebool", true); is(Services.prefs.getBoolPref("devtools.branch1.somebool"), true, "bool pref value after setting"); let threw; try { threw = false; WrappedPrefs.getIntPref("devtools.branch1.somebool"); } catch (e) { threw = true; } ok(threw, "type-checking for bool pref"); try { threw = false; Services.prefs.setIntPref("devtools.branch1.somebool", 27); } catch (e) { threw = true; } ok(threw, "type-checking for setting bool pref"); try { threw = false; Services.prefs.setBoolPref("devtools.branch1.somebool", 27); } catch (e) { threw = true; } ok(threw, "setting bool pref to wrong type"); try { threw = false; Services.prefs.getCharPref("devtools.branch2.someint"); } catch (e) { threw = true; } ok(threw, "type-checking for int pref"); try { threw = false; Services.prefs.setCharPref("devtools.branch2.someint", "whatever"); } catch (e) { threw = true; } ok(threw, "type-checking for setting int pref"); try { threw = false; Services.prefs.setIntPref("devtools.branch2.someint", "whatever"); } catch (e) { threw = true; } ok(threw, "setting int pref to wrong type"); try { threw = false; Services.prefs.getBoolPref("devtools.branch1.somestring"); } catch (e) { threw = true; } ok(threw, "type-checking for char pref"); try { threw = false; Services.prefs.setBoolPref("devtools.branch1.somestring", true); } catch (e) { threw = true; } ok(threw, "type-checking for setting char pref"); try { threw = false; Services.prefs.setCharPref("devtools.branch1.somestring", true); } catch (e) { threw = true; } ok(threw, "setting char pref to wrong type"); is(Services.prefs.getPrefType("devtools.branch1.somebool"), Services.prefs.PREF_BOOL, "type of bool pref"); is(Services.prefs.getPrefType("devtools.branch2.someint"), Services.prefs.PREF_INT, "type of int pref"); is(Services.prefs.getPrefType("devtools.branch1.somestring"), Services.prefs.PREF_STRING, "type of string pref"); WrappedPrefs.setBoolPref("devtools.branch1.somebool", true); ok(WrappedPrefs.getBoolPref("devtools.branch1.somebool"), "set bool pref"); WrappedPrefs.setIntPref("devtools.branch2.someint", -93); is(WrappedPrefs.getIntPref("devtools.branch2.someint"), -93, "set int pref"); WrappedPrefs.setCharPref("devtools.branch1.somestring", "hello"); is(WrappedPrefs.getCharPref("devtools.branch1.somestring"), "hello", "set string pref"); Services.prefs.clearUserPref("devtools.branch1.somestring"); is(Services.prefs.getCharPref("devtools.branch1.somestring"), "dinosaurs", "clear string pref"); ok(Services.prefs.prefHasUserValue("devtools.branch1.somebool"), "bool pref has user value"); ok(!Services.prefs.prefHasUserValue("devtools.branch1.somestring"), "string pref does not have user value"); Services.prefs.savePrefFile(null); ok(true, "saved pref file without error"); let branch0 = Services.prefs.getBranch(null); let branch1 = Services.prefs.getBranch("devtools.branch1."); branch1.setCharPref("somestring", "octopus"); Services.prefs.setCharPref("devtools.branch1.somestring", "octopus"); is(Services.prefs.getCharPref("devtools.branch1.somestring"), "octopus", "set correctly via branch"); is(branch0.getCharPref("devtools.branch1.somestring"), "octopus", "get via base branch"); is(branch1.getCharPref("somestring"), "octopus", "get via branch"); let notifications = {}; let clearNotificationList = () => { notifications = {}; } let observer = { observe: function (subject, topic, data) { notifications[data] = true; } }; branch0.addObserver("devtools.branch1", null, null); branch0.addObserver("devtools.branch1.", observer, false); branch1.addObserver("", observer, false); Services.prefs.setCharPref("devtools.branch1.somestring", "elf owl"); isDeeply(notifications, { "devtools.branch1.somestring": true, "somestring": true }, "notifications sent to two listeners"); clearNotificationList(); Services.prefs.setIntPref("devtools.branch2.someint", 1729); isDeeply(notifications, {}, "no notifications sent"); clearNotificationList(); branch0.removeObserver("devtools.branch1.", observer); Services.prefs.setCharPref("devtools.branch1.somestring", "tapir"); isDeeply(notifications, { "somestring": true }, "removeObserver worked"); clearNotificationList(); branch0.addObserver("devtools.branch1.somestring", observer, false); Services.prefs.setCharPref("devtools.branch1.somestring", "northern shoveler"); isDeeply(notifications, { "devtools.branch1.somestring": true, "somestring": true }, "notifications sent to two listeners"); branch0.removeObserver("devtools.branch1.somestring", observer); // Make sure we update if the pref change comes from somewhere else. clearNotificationList(); pref("devtools.branch1.someotherstring", "lazuli bunting"); isDeeply(notifications, { "someotherstring": true }, "pref worked"); // Regression test for bug 1296427. pref("devtools.hud.loglimit", 1000); pref("devtools.hud.loglimit.network", 1000); // Clean up. localStorage.clear(); SimpleTest.finish(); } SimpleTest.waitForExplicitFinish(); SpecialPowers.pushPrefEnv( {"set": [ ["devtools.branch1.somestring", "elephants"], ["devtools.branch1.somebool", false], ["devtools.branch2.someint", "-16"], ]}, do_tests); </script> </body>