modules/libpref/test/unit/test_extprefs.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/modules/libpref/test/unit/test_extprefs.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,70 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/licenses/publicdomain/  */
     1.6 +
     1.7 +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
     1.8 +Components.utils.import("resource://gre/modules/Services.jsm");
     1.9 +
    1.10 +// The profile directory is already set up in the head_ files.
    1.11 +
    1.12 +function arrayenumerator(a)
    1.13 +{
    1.14 +  return {
    1.15 +    i_: 0,
    1.16 +    QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]),
    1.17 +    hasMoreElements: function ae_hasMoreElements() {
    1.18 +      return this.i_ < a.length;
    1.19 +    },
    1.20 +    getNext: function ae_getNext() {
    1.21 +      return a[this.i_++];
    1.22 +    }
    1.23 +  };
    1.24 +}
    1.25 +
    1.26 +function run_test() {
    1.27 +  var ps = Cc["@mozilla.org/preferences-service;1"].
    1.28 +    getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch);
    1.29 +
    1.30 +  var extprefs = [do_get_file("extdata")];
    1.31 +  
    1.32 +  var extProvider = {
    1.33 +    QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider,
    1.34 +                                           Ci.nsIDirectoryServiceProvider2]),
    1.35 +    getFile: function ep_getFile() {
    1.36 +      throw Cr.NS_ERROR_FAILURE;
    1.37 +    },
    1.38 +    
    1.39 +    getFiles: function ep_getFiles(key) {
    1.40 +      if (key != "ExtPrefDL")
    1.41 +        throw Cr.NS_ERROR_FAILURE;
    1.42 +
    1.43 +      return arrayenumerator(extprefs);
    1.44 +    }
    1.45 +  };
    1.46 +  
    1.47 +  let prefFile = do_get_file("data/testPref.js");
    1.48 +
    1.49 +  do_check_throws(function() {
    1.50 +    ps.getBoolPref("testExtPref.bool");
    1.51 +  }, Cr.NS_ERROR_UNEXPECTED);
    1.52 +  do_check_throws(function() {
    1.53 +    ps.getBoolPref("testPref.bool1");
    1.54 +  }, Cr.NS_ERROR_UNEXPECTED);
    1.55 +  
    1.56 +  ps.readUserPrefs(prefFile);
    1.57 +
    1.58 +  do_check_true(ps.getBoolPref("testPref.bool1"));
    1.59 +  ps.setBoolPref("testPref.bool1", false);
    1.60 +  do_check_false(ps.getBoolPref("testPref.bool1"));
    1.61 +  
    1.62 +  dirSvc.registerProvider(extProvider);
    1.63 +  Services.obs.notifyObservers(null, "load-extension-defaults", null);
    1.64 +
    1.65 +  // The extension default should be available.
    1.66 +  do_check_true(ps.getBoolPref("testExtPref.bool"));
    1.67 +
    1.68 +  // The extension default should not override existing user prefs
    1.69 +  do_check_false(ps.getBoolPref("testPref.bool2"));
    1.70 +
    1.71 +  // The extension default should not modify existing set values
    1.72 +  do_check_false(ps.getBoolPref("testPref.bool1"));
    1.73 +}

mercurial