nsIPrefOverrideMap is a fast and JS/C++-convenient map of prefs to values that we will use to override currently-set pref values when serializing prefs for FxBackup later in this patch series. FxBackup needs this to avoid storing values set by Nimbus. Differential Revision: https://phabricator.services.mozilla.com/D262456
69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const BOOL_TEST_PREF = "test.nsPrefOverrideMap.bool";
|
|
const INT_TEST_PREF = "test.nsPrefOverrideMap.int";
|
|
const STRING_TEST_PREF = "test.nsPrefOverrideMap.string";
|
|
|
|
add_task(async function test_map() {
|
|
let map = Cc["@mozilla.org/pref-override-map;1"].createInstance(
|
|
Ci.nsIPrefOverrideMap
|
|
);
|
|
|
|
// Set types of prefs. Map operations must respect them.
|
|
Services.prefs.setBoolPref(BOOL_TEST_PREF, false);
|
|
Services.prefs.setIntPref(INT_TEST_PREF, -1);
|
|
Services.prefs.setStringPref(STRING_TEST_PREF, "string");
|
|
|
|
Assert.throws(
|
|
() => map.addEntry("not.a.real.pref", 0),
|
|
/NS_ERROR_DOM_NOT_FOUND_ERR/
|
|
);
|
|
Assert.throws(
|
|
() => map.getEntry("not.a.real.pref"),
|
|
/NS_ERROR_DOM_NOT_FOUND_ERR/
|
|
);
|
|
|
|
// Entry must be added to map before getEntry
|
|
Assert.throws(() => map.getEntry(BOOL_TEST_PREF), /NS_ERROR_ILLEGAL_VALUE/);
|
|
|
|
// Entry value can be changed.
|
|
map.addEntry(BOOL_TEST_PREF, false);
|
|
Assert.equal(map.getEntry(BOOL_TEST_PREF), false);
|
|
map.addEntry(BOOL_TEST_PREF, true);
|
|
Assert.equal(map.getEntry(BOOL_TEST_PREF), true);
|
|
|
|
// Cannot change pref value type
|
|
Assert.throws(
|
|
() => map.addEntry(BOOL_TEST_PREF, "wrong type"),
|
|
/TypeMismatchError/
|
|
);
|
|
Assert.throws(
|
|
() => map.addEntry(INT_TEST_PREF, "wrong type"),
|
|
/TypeMismatchError/
|
|
);
|
|
Assert.throws(
|
|
() => map.addEntry(STRING_TEST_PREF, true),
|
|
/TypeMismatchError/
|
|
);
|
|
|
|
// null value is allowed for any type
|
|
Assert.equal(map.getEntry(BOOL_TEST_PREF), true);
|
|
map.addEntry(BOOL_TEST_PREF, null);
|
|
Assert.equal(map.getEntry(BOOL_TEST_PREF), null);
|
|
map.addEntry(INT_TEST_PREF, null);
|
|
Assert.equal(map.getEntry(INT_TEST_PREF), null);
|
|
map.addEntry(STRING_TEST_PREF, null);
|
|
Assert.equal(map.getEntry(STRING_TEST_PREF), null);
|
|
|
|
// Type must be bool, number, string or null
|
|
Assert.throws(() => map.addEntry(BOOL_TEST_PREF, {}), /TypeMismatchError/);
|
|
Assert.equal(map.getEntry(BOOL_TEST_PREF), null);
|
|
|
|
// Cleanup
|
|
Services.prefs.clearUserPref(BOOL_TEST_PREF);
|
|
Services.prefs.clearUserPref(INT_TEST_PREF);
|
|
Services.prefs.clearUserPref(STRING_TEST_PREF);
|
|
});
|