mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
Prior to this change, SpecialPowers used the extension id to identiy extension instances in inter-process messaging. This required that an id be allocated from the content process side when loadExtension() was called, but that made it impossible to test code that exercises the code path in the AddonManager that allocates ids for extensions that do not include an id in the manifest (it also made the loadExtension() api clunky). With this change, SpecialPowers allocates an internal identifier for messaging, but this identifier is separate from extension ids. Confusingly, we still store the actual extension id in an id property on the object returned by loadExtension(), but there are enough tests that reference this that it would be unnecessarily disruptive to get rid of it so it stays for now... MozReview-Commit-ID: G6xk1mBJJL8 --HG-- extra : rebase_source : a0891e5ba308972c35813f55274badf9edde62f7 extra : source : e8818ef3c28489e196d1db92cabf224861b693c9
128 lines
3.3 KiB
JavaScript
128 lines
3.3 KiB
JavaScript
"use strict";
|
|
|
|
Cu.import("resource://gre/modules/Extension.jsm");
|
|
|
|
/* globals ExtensionData */
|
|
|
|
const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
|
|
|
|
function* generateAddon(data) {
|
|
let id = uuidGenerator.generateUUID().number;
|
|
|
|
data = Object.assign({applications: {gecko: {id}}}, data);
|
|
let xpi = Extension.generateXPI(data);
|
|
do_register_cleanup(() => {
|
|
Services.obs.notifyObservers(xpi, "flush-cache-entry", null);
|
|
xpi.remove(false);
|
|
});
|
|
|
|
let fileURI = Services.io.newFileURI(xpi);
|
|
let jarURI = NetUtil.newURI(`jar:${fileURI.spec}!/`);
|
|
|
|
let extension = new ExtensionData(jarURI);
|
|
yield extension.readManifest();
|
|
|
|
return extension;
|
|
}
|
|
|
|
add_task(function* testMissingDefaultLocale() {
|
|
let extension = yield generateAddon({
|
|
"files": {
|
|
"_locales/en_US/messages.json": {},
|
|
},
|
|
});
|
|
|
|
equal(extension.errors.length, 0, "No errors reported");
|
|
|
|
yield extension.initAllLocales();
|
|
|
|
equal(extension.errors.length, 1, "One error reported");
|
|
|
|
do_print(`Got error: ${extension.errors[0]}`);
|
|
|
|
ok(extension.errors[0].includes('"default_locale" property is required'),
|
|
"Got missing default_locale error");
|
|
});
|
|
|
|
|
|
add_task(function* testInvalidDefaultLocale() {
|
|
let extension = yield generateAddon({
|
|
"manifest": {
|
|
"default_locale": "en",
|
|
},
|
|
|
|
"files": {
|
|
"_locales/en_US/messages.json": {},
|
|
},
|
|
});
|
|
|
|
equal(extension.errors.length, 1, "One error reported");
|
|
|
|
do_print(`Got error: ${extension.errors[0]}`);
|
|
|
|
ok(extension.errors[0].includes("Loading locale file _locales/en/messages.json"),
|
|
"Got invalid default_locale error");
|
|
|
|
yield extension.initAllLocales();
|
|
|
|
equal(extension.errors.length, 2, "Two errors reported");
|
|
|
|
do_print(`Got error: ${extension.errors[1]}`);
|
|
|
|
ok(extension.errors[1].includes('"default_locale" property must correspond'),
|
|
"Got invalid default_locale error");
|
|
});
|
|
|
|
|
|
add_task(function* testUnexpectedDefaultLocale() {
|
|
let extension = yield generateAddon({
|
|
"manifest": {
|
|
"default_locale": "en_US",
|
|
},
|
|
});
|
|
|
|
equal(extension.errors.length, 1, "One error reported");
|
|
|
|
do_print(`Got error: ${extension.errors[0]}`);
|
|
|
|
ok(extension.errors[0].includes("Loading locale file _locales/en-US/messages.json"),
|
|
"Got invalid default_locale error");
|
|
|
|
yield extension.initAllLocales();
|
|
|
|
equal(extension.errors.length, 2, "One error reported");
|
|
|
|
do_print(`Got error: ${extension.errors[1]}`);
|
|
|
|
ok(extension.errors[1].includes('"default_locale" property must correspond'),
|
|
"Got unexpected default_locale error");
|
|
});
|
|
|
|
|
|
add_task(function* testInvalidSyntax() {
|
|
let extension = yield generateAddon({
|
|
"manifest": {
|
|
"default_locale": "en_US",
|
|
},
|
|
|
|
"files": {
|
|
"_locales/en_US/messages.json": '{foo: {message: "bar", description: "baz"}}',
|
|
},
|
|
});
|
|
|
|
equal(extension.errors.length, 1, "No errors reported");
|
|
|
|
do_print(`Got error: ${extension.errors[0]}`);
|
|
|
|
ok(extension.errors[0].includes("Loading locale file _locales\/en_US\/messages\.json: SyntaxError"),
|
|
"Got syntax error");
|
|
|
|
yield extension.initAllLocales();
|
|
|
|
equal(extension.errors.length, 2, "One error reported");
|
|
|
|
do_print(`Got error: ${extension.errors[1]}`);
|
|
|
|
ok(extension.errors[1].includes("Loading locale file _locales\/en_US\/messages\.json: SyntaxError"),
|
|
"Got syntax error");
|
|
});
|