gecko/modules/libpref/test/unit/test_extprefs.js

71 lines
2.0 KiB
JavaScript

/* 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");
// The profile directory is already set up in the head_ files.
function arrayenumerator(a)
{
return {
i_: 0,
QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]),
hasMoreElements: function ae_hasMoreElements() {
return this.i_ < a.length;
},
getNext: function ae_getNext() {
return a[this.i_++];
}
};
}
function run_test() {
var ps = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch);
var extprefs = [do_get_file("extdata")];
var extProvider = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider,
Ci.nsIDirectoryServiceProvider2]),
getFile: function ep_getFile() {
throw Cr.NS_ERROR_FAILURE;
},
getFiles: function ep_getFiles(key) {
if (key != "ExtPrefDL")
throw Cr.NS_ERROR_FAILURE;
return arrayenumerator(extprefs);
}
};
let prefFile = do_get_file("data/testPref.js");
do_check_throws(function() {
ps.getBoolPref("testExtPref.bool");
}, Cr.NS_ERROR_UNEXPECTED);
do_check_throws(function() {
ps.getBoolPref("testPref.bool1");
}, Cr.NS_ERROR_UNEXPECTED);
ps.readUserPrefs(prefFile);
do_check_true(ps.getBoolPref("testPref.bool1"));
ps.setBoolPref("testPref.bool1", false);
do_check_false(ps.getBoolPref("testPref.bool1"));
dirSvc.registerProvider(extProvider);
Services.obs.notifyObservers(null, "load-extension-defaults", null);
// The extension default should be available.
do_check_true(ps.getBoolPref("testExtPref.bool"));
// The extension default should not override existing user prefs
do_check_false(ps.getBoolPref("testPref.bool2"));
// The extension default should not modify existing set values
do_check_false(ps.getBoolPref("testPref.bool1"));
}