131 lines
3.9 KiB
JavaScript
131 lines
3.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
|
|
const originalValues = {
|
|
requested: Services.locale.requestedLocales,
|
|
};
|
|
|
|
const l10nReg = new L10nRegistry();
|
|
|
|
function getMockRegistry() {
|
|
const mockSource = L10nFileSource.createMock("test", "app", ["en-US"], "/localization/{locale}/", [
|
|
{
|
|
path: "/localization/en-US/mock.ftl",
|
|
source: `
|
|
key = This is a single message
|
|
.tooltip = This is a tooltip
|
|
.accesskey = f
|
|
`
|
|
}
|
|
]);
|
|
let registry = new L10nRegistry();
|
|
registry.registerSources([mockSource]);
|
|
return registry;
|
|
}
|
|
|
|
function getAttributeByName(attributes, name) {
|
|
return attributes.find(attr => attr.name === name);
|
|
}
|
|
|
|
/**
|
|
* This test verifies that as we switch between
|
|
* different pseudo strategies, the Localization object
|
|
* follows and formats using the given strategy.
|
|
*
|
|
* We test values and attributes and make sure that
|
|
* a single-character attributes, commonly used for access keys
|
|
* don't get transformed.
|
|
*/
|
|
add_task(async function test_pseudo_works() {
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "");
|
|
|
|
let mockRegistry = getMockRegistry();
|
|
|
|
const l10n = new Localization([
|
|
"mock.ftl",
|
|
], false, mockRegistry);
|
|
|
|
{
|
|
// 1. Start with no pseudo
|
|
|
|
let message = (await l10n.formatMessages([{id: "key"}]))[0];
|
|
|
|
ok(message.value.includes("This is a single message"));
|
|
let attr0 = getAttributeByName(message.attributes, "tooltip");
|
|
ok(attr0.value.includes("This is a tooltip"));
|
|
let attr1 = getAttributeByName(message.attributes, "accesskey");
|
|
equal(attr1.value, "f");
|
|
}
|
|
|
|
{
|
|
// 2. Set Accented Pseudo
|
|
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "accented");
|
|
let message = (await l10n.formatMessages([{id: "key"}]))[0];
|
|
|
|
ok(message.value.includes("[Ŧħiş iş aa şiƞɠŀee ḿeeşşaaɠee]"));
|
|
let attr0 = getAttributeByName(message.attributes, "tooltip");
|
|
ok(attr0.value.includes("[Ŧħiş iş aa ŧooooŀŧiƥ]"));
|
|
let attr1 = getAttributeByName(message.attributes, "accesskey");
|
|
equal(attr1.value, "f");
|
|
}
|
|
|
|
{
|
|
// 3. Set Bidi Pseudo
|
|
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "bidi");
|
|
let message = (await l10n.formatMessages([{id: "key"}]))[0];
|
|
|
|
ok(message.value.includes("iş a şiƞɠŀe ḿeşşaɠe"));
|
|
let attr0 = getAttributeByName(message.attributes, "tooltip");
|
|
ok(attr0.value.includes("Ŧħiş iş a ŧooŀŧiƥ"));
|
|
let attr1 = getAttributeByName(message.attributes, "accesskey");
|
|
equal(attr1.value, "f");
|
|
}
|
|
|
|
{
|
|
// 4. Remove pseudo
|
|
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "");
|
|
let message = (await l10n.formatMessages([{id: "key"}]))[0];
|
|
|
|
ok(message.value.includes("This is a single message"));
|
|
let attr0 = getAttributeByName(message.attributes, "tooltip");
|
|
ok(attr0.value.includes("This is a tooltip"));
|
|
let attr1 = getAttributeByName(message.attributes, "accesskey");
|
|
equal(attr1.value, "f");
|
|
}
|
|
|
|
Services.locale.requestedLocales = originalValues.requested;
|
|
});
|
|
|
|
/**
|
|
* This test verifies that setting a bogus pseudo locale
|
|
* strategy doesn't break anything.
|
|
*/
|
|
add_task(async function test_unavailable_strategy_works() {
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "");
|
|
|
|
let mockRegistry = getMockRegistry();
|
|
|
|
const l10n = new Localization([
|
|
"mock.ftl",
|
|
], false, mockRegistry);
|
|
|
|
{
|
|
// 1. Set unavailable pseudo strategy
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "unknown-strategy");
|
|
|
|
let message = (await l10n.formatMessages([{id: "key"}]))[0];
|
|
|
|
ok(message.value.includes("This is a single message"));
|
|
let attr0 = getAttributeByName(message.attributes, "tooltip");
|
|
ok(attr0.value.includes("This is a tooltip"));
|
|
let attr1 = getAttributeByName(message.attributes, "accesskey");
|
|
equal(attr1.value, "f");
|
|
}
|
|
|
|
Services.prefs.setStringPref("intl.l10n.pseudo", "");
|
|
Services.locale.requestedLocales = originalValues.requested;
|
|
});
|