Revision control

Copy as Markdown

Other Tools

var { TBDistCustomizer } = ChromeUtils.importESModule(
);
function run_test() {
do_test_pending();
Services.locale.requestedLocales = ["en-US"];
// Create an instance of nsIFile out of the current process directory
const distroDir = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
// Construct a descendant of the distroDir file
distroDir.append("distribution");
// Create a clone of distroDir
const iniFile = distroDir.clone();
// Create a descendant of iniFile
iniFile.append("distribution.ini");
// It's a bug if distribution.ini already exists
if (iniFile.exists()) {
do_throw(
"distribution.ini already exists in objdir/mozilla/dist/bin/distribution."
);
}
registerCleanupFunction(function () {
// Remove the distribution.ini file
if (iniFile.exists()) {
iniFile.remove(true);
}
});
const testDir = Services.dirsvc.get("CurWorkD", Ci.nsIFile);
const testDistributionFile = testDir.clone();
// Construct descendant file
testDistributionFile.append("distribution.ini");
// Copy to distroDir
testDistributionFile.copyTo(distroDir, "distribution.ini");
Assert.ok(testDistributionFile.exists());
// Set the prefs
TBDistCustomizer.applyPrefDefaults();
const testIni = Cc["@mozilla.org/xpcom/ini-parser-factory;1"]
.getService(Ci.nsIINIParserFactory)
.createINIParser(testDistributionFile);
// Now check that prefs were set - test the Global prefs against the
// Global section in the ini file
let iniValue = testIni.getString("Global", "id");
let pref = Services.prefs.getCharPref("distribution.id");
Assert.equal(iniValue, pref);
iniValue = testIni.getString("Global", "version");
pref = Services.prefs.getCharPref("distribution.version");
Assert.equal(iniValue, pref);
let aboutLocale;
try {
aboutLocale = testIni.getString("Global", "about.en-US");
} catch (e) {
console.error(e);
}
if (aboutLocale == undefined) {
aboutLocale = testIni.getString("Global", "about");
}
pref = Services.prefs.getCharPref("distribution.about");
Assert.equal(aboutLocale, pref);
// Test Preferences section
let s = "Preferences";
for (const key of testIni.getKeys(s)) {
const value = TBDistCustomizer.parseValue(testIni.getString(s, key));
switch (typeof value) {
case "boolean":
Assert.equal(value, Services.prefs.getBoolPref(key));
break;
case "number":
Assert.equal(value, Services.prefs.getIntPref(key));
break;
case "string":
Assert.equal(value, Services.prefs.getCharPref(key));
break;
default:
do_throw(
"The preference " + key + " is of unknown type: " + typeof value
);
}
}
// Test the LocalizablePreferences-[locale] section
// Add any prefs found in it to the overrides array
const overrides = [];
s = "LocalizablePreferences-en-US";
for (const key of testIni.getKeys(s)) {
let value = TBDistCustomizer.parseValue(testIni.getString(s, key));
value = "data:text/plain," + key + "=" + value;
Assert.equal(value, Services.prefs.getCharPref(key));
overrides.push(key);
}
// Test the LocalizablePreferences section
// Any prefs here that aren't found in overrides are not overridden
// by LocalizablePrefs-[locale] and should be tested
s = "LocalizablePreferences";
for (const key of testIni.getKeys(s)) {
if (!overrides.includes(key)) {
let value = TBDistCustomizer.parseValue(testIni.getString(s, key));
value = value.replace(/%LOCALE%/g, "en-US");
value = "data:text/plain," + key + "=" + value;
Assert.equal(value, Services.prefs.getCharPref(key));
}
}
do_test_finished();
}