michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: const {classes: Cc, interfaces: Ci, results: Cr, utils: Cu, manager: Cm} = Components; michael@0: michael@0: Cu.import("resource://gre/modules/Preferences.jsm"); michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_test(function test_set_get_pref() { michael@0: Preferences.set("test_set_get_pref.integer", 1); michael@0: do_check_eq(Preferences.get("test_set_get_pref.integer"), 1); michael@0: michael@0: Preferences.set("test_set_get_pref.string", "foo"); michael@0: do_check_eq(Preferences.get("test_set_get_pref.string"), "foo"); michael@0: michael@0: Preferences.set("test_set_get_pref.boolean", true); michael@0: do_check_eq(Preferences.get("test_set_get_pref.boolean"), true); michael@0: michael@0: // Clean up. michael@0: Preferences.resetBranch("test_set_get_pref."); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_get_branch_pref() { michael@0: let prefs = new Preferences("test_set_get_branch_pref."); michael@0: michael@0: prefs.set("something", 1); michael@0: do_check_eq(prefs.get("something"), 1); michael@0: do_check_false(Preferences.has("something")); michael@0: michael@0: // Clean up. michael@0: prefs.reset("something"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_get_multiple_prefs() { michael@0: Preferences.set({ "test_set_get_multiple_prefs.integer": 1, michael@0: "test_set_get_multiple_prefs.string": "foo", michael@0: "test_set_get_multiple_prefs.boolean": true }); michael@0: michael@0: let [i, s, b] = Preferences.get(["test_set_get_multiple_prefs.integer", michael@0: "test_set_get_multiple_prefs.string", michael@0: "test_set_get_multiple_prefs.boolean"]); michael@0: michael@0: do_check_eq(i, 1); michael@0: do_check_eq(s, "foo"); michael@0: do_check_eq(b, true); michael@0: michael@0: // Clean up. michael@0: Preferences.resetBranch("test_set_get_multiple_prefs."); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_get_multiple_prefs_with_default_value() { michael@0: Preferences.set({ "test_get_multiple_prefs_with_default_value.a": 1, michael@0: "test_get_multiple_prefs_with_default_value.b": 2 }); michael@0: michael@0: let [a, b, c] = Preferences.get(["test_get_multiple_prefs_with_default_value.a", michael@0: "test_get_multiple_prefs_with_default_value.b", michael@0: "test_get_multiple_prefs_with_default_value.c"], michael@0: 0); michael@0: michael@0: do_check_eq(a, 1); michael@0: do_check_eq(b, 2); michael@0: do_check_eq(c, 0); michael@0: michael@0: // Clean up. michael@0: Preferences.resetBranch("test_get_multiple_prefs_with_default_value."); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_get_unicode_pref() { michael@0: Preferences.set("test_set_get_unicode_pref", String.fromCharCode(960)); michael@0: do_check_eq(Preferences.get("test_set_get_unicode_pref"), String.fromCharCode(960)); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_set_get_unicode_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_null_pref() { michael@0: try { michael@0: Preferences.set("test_set_null_pref", null); michael@0: // We expect this to throw, so the test is designed to fail if it doesn't. michael@0: do_check_true(false); michael@0: } michael@0: catch(ex) {} michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_undefined_pref() { michael@0: try { michael@0: Preferences.set("test_set_undefined_pref"); michael@0: // We expect this to throw, so the test is designed to fail if it doesn't. michael@0: do_check_true(false); michael@0: } michael@0: catch(ex) {} michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_unsupported_pref() { michael@0: try { michael@0: Preferences.set("test_set_unsupported_pref", new Array()); michael@0: // We expect this to throw, so the test is designed to fail if it doesn't. michael@0: do_check_true(false); michael@0: } michael@0: catch(ex) {} michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // Make sure that we can get a string pref that we didn't set ourselves michael@0: // (i.e. that the way we get a string pref using getComplexValue doesn't michael@0: // hork us getting a string pref that wasn't set using setComplexValue). michael@0: add_test(function test_get_string_pref() { michael@0: let svc = Cc["@mozilla.org/preferences-service;1"]. michael@0: getService(Ci.nsIPrefService). michael@0: getBranch(""); michael@0: svc.setCharPref("test_get_string_pref", "a normal string"); michael@0: do_check_eq(Preferences.get("test_get_string_pref"), "a normal string"); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_get_string_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_set_get_number_pref() { michael@0: Preferences.set("test_set_get_number_pref", 5); michael@0: do_check_eq(Preferences.get("test_set_get_number_pref"), 5); michael@0: michael@0: // Non-integer values get converted to integers. michael@0: Preferences.set("test_set_get_number_pref", 3.14159); michael@0: do_check_eq(Preferences.get("test_set_get_number_pref"), 3); michael@0: michael@0: // Values outside the range -(2^31-1) to 2^31-1 overflow. michael@0: try { michael@0: Preferences.set("test_set_get_number_pref", Math.pow(2, 31)); michael@0: // We expect this to throw, so the test is designed to fail if it doesn't. michael@0: do_check_true(false); michael@0: } michael@0: catch(ex) {} michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_set_get_number_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_reset_pref() { michael@0: Preferences.set("test_reset_pref", 1); michael@0: Preferences.reset("test_reset_pref"); michael@0: do_check_eq(Preferences.get("test_reset_pref"), undefined); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_reset_pref_branch() { michael@0: Preferences.set("test_reset_pref_branch.foo", 1); michael@0: Preferences.set("test_reset_pref_branch.bar", 2); michael@0: Preferences.resetBranch("test_reset_pref_branch."); michael@0: do_check_eq(Preferences.get("test_reset_pref_branch.foo"), undefined); michael@0: do_check_eq(Preferences.get("test_reset_pref_branch.bar"), undefined); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // Make sure the module doesn't throw an exception when asked to reset michael@0: // a nonexistent pref. michael@0: add_test(function test_reset_nonexistent_pref() { michael@0: Preferences.reset("test_reset_nonexistent_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // Make sure the module doesn't throw an exception when asked to reset michael@0: // a nonexistent pref branch. michael@0: add_test(function test_reset_nonexistent_pref_branch() { michael@0: Preferences.resetBranch("test_reset_nonexistent_pref_branch."); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_observe_prefs_function() { michael@0: let observed = false; michael@0: let observer = function() { observed = !observed }; michael@0: michael@0: Preferences.observe("test_observe_prefs_function", observer); michael@0: Preferences.set("test_observe_prefs_function", "something"); michael@0: do_check_true(observed); michael@0: michael@0: Preferences.ignore("test_observe_prefs_function", observer); michael@0: Preferences.set("test_observe_prefs_function", "something else"); michael@0: do_check_true(observed); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_observe_prefs_function"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_observe_prefs_object() { michael@0: let observer = { michael@0: observed: false, michael@0: observe: function() { michael@0: this.observed = !this.observed; michael@0: } michael@0: }; michael@0: michael@0: Preferences.observe("test_observe_prefs_object", observer.observe, observer); michael@0: Preferences.set("test_observe_prefs_object", "something"); michael@0: do_check_true(observer.observed); michael@0: michael@0: Preferences.ignore("test_observe_prefs_object", observer.observe, observer); michael@0: Preferences.set("test_observe_prefs_object", "something else"); michael@0: do_check_true(observer.observed); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_observe_prefs_object"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_observe_prefs_nsIObserver() { michael@0: let observer = { michael@0: observed: false, michael@0: observe: function(subject, topic, data) { michael@0: this.observed = !this.observed; michael@0: do_check_true(subject instanceof Ci.nsIPrefBranch); michael@0: do_check_eq(topic, "nsPref:changed"); michael@0: do_check_eq(data, "test_observe_prefs_nsIObserver"); michael@0: } michael@0: }; michael@0: michael@0: Preferences.observe("test_observe_prefs_nsIObserver", observer); michael@0: Preferences.set("test_observe_prefs_nsIObserver", "something"); michael@0: do_check_true(observer.observed); michael@0: michael@0: Preferences.ignore("test_observe_prefs_nsIObserver", observer); michael@0: Preferences.set("test_observe_prefs_nsIObserver", "something else"); michael@0: do_check_true(observer.observed); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("test_observe_prefs_nsIObserver"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: /* michael@0: add_test(function test_observe_exact_pref() { michael@0: let observed = false; michael@0: let observer = function() { observed = !observed }; michael@0: michael@0: Preferences.observe("test_observe_exact_pref", observer); michael@0: Preferences.set("test_observe_exact_pref.sub-pref", "something"); michael@0: do_check_false(observed); michael@0: michael@0: // Clean up. michael@0: Preferences.ignore("test_observe_exact_pref", observer); michael@0: Preferences.reset("test_observe_exact_pref.sub-pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: */ michael@0: michael@0: add_test(function test_observe_value_of_set_pref() { michael@0: let observer = function(newVal) { do_check_eq(newVal, "something") }; michael@0: michael@0: Preferences.observe("test_observe_value_of_set_pref", observer); michael@0: Preferences.set("test_observe_value_of_set_pref", "something"); michael@0: michael@0: // Clean up. michael@0: Preferences.ignore("test_observe_value_of_set_pref", observer); michael@0: Preferences.reset("test_observe_value_of_set_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_observe_value_of_reset_pref() { michael@0: let observer = function(newVal) { do_check_true(typeof newVal == "undefined") }; michael@0: michael@0: Preferences.set("test_observe_value_of_reset_pref", "something"); michael@0: Preferences.observe("test_observe_value_of_reset_pref", observer); michael@0: Preferences.reset("test_observe_value_of_reset_pref"); michael@0: michael@0: // Clean up. michael@0: Preferences.ignore("test_observe_value_of_reset_pref", observer); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_has_pref() { michael@0: do_check_false(Preferences.has("test_has_pref")); michael@0: Preferences.set("test_has_pref", "foo"); michael@0: do_check_true(Preferences.has("test_has_pref")); michael@0: michael@0: Preferences.set("test_has_pref.foo", "foo"); michael@0: Preferences.set("test_has_pref.bar", "bar"); michael@0: let [hasFoo, hasBar, hasBaz] = Preferences.has(["test_has_pref.foo", michael@0: "test_has_pref.bar", michael@0: "test_has_pref.baz"]); michael@0: do_check_true(hasFoo); michael@0: do_check_true(hasBar); michael@0: do_check_false(hasBaz); michael@0: michael@0: // Clean up. michael@0: Preferences.resetBranch("test_has_pref"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_isSet_pref() { michael@0: // Use a pref that we know has a default value but no user-set value. michael@0: // This feels dangerous; perhaps we should create some other default prefs michael@0: // that we can use for testing. michael@0: do_check_false(Preferences.isSet("toolkit.defaultChromeURI")); michael@0: Preferences.set("toolkit.defaultChromeURI", "foo"); michael@0: do_check_true(Preferences.isSet("toolkit.defaultChromeURI")); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("toolkit.defaultChromeURI"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: /* michael@0: add_test(function test_lock_prefs() { michael@0: // Use a pref that we know has a default value. michael@0: // This feels dangerous; perhaps we should create some other default prefs michael@0: // that we can use for testing. michael@0: do_check_false(Preferences.locked("toolkit.defaultChromeURI")); michael@0: Preferences.lock("toolkit.defaultChromeURI"); michael@0: do_check_true(Preferences.locked("toolkit.defaultChromeURI")); michael@0: Preferences.unlock("toolkit.defaultChromeURI"); michael@0: do_check_false(Preferences.locked("toolkit.defaultChromeURI")); michael@0: michael@0: let val = Preferences.get("toolkit.defaultChromeURI"); michael@0: Preferences.set("toolkit.defaultChromeURI", "test_lock_prefs"); michael@0: do_check_eq(Preferences.get("toolkit.defaultChromeURI"), "test_lock_prefs"); michael@0: Preferences.lock("toolkit.defaultChromeURI"); michael@0: do_check_eq(Preferences.get("toolkit.defaultChromeURI"), val); michael@0: Preferences.unlock("toolkit.defaultChromeURI"); michael@0: do_check_eq(Preferences.get("toolkit.defaultChromeURI"), "test_lock_prefs"); michael@0: michael@0: // Clean up. michael@0: Preferences.reset("toolkit.defaultChromeURI"); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: */