Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
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;
});