diff options
Diffstat (limited to 'devtools/client/shared/shim/test/test_service_prefs.html')
-rw-r--r-- | devtools/client/shared/shim/test/test_service_prefs.html | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/devtools/client/shared/shim/test/test_service_prefs.html b/devtools/client/shared/shim/test/test_service_prefs.html new file mode 100644 index 000000000..99e827dfd --- /dev/null +++ b/devtools/client/shared/shim/test/test_service_prefs.html @@ -0,0 +1,244 @@ +<!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> |