test_pseudo.js (3996B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 5 const originalValues = { 6 requested: Services.locale.requestedLocales, 7 }; 8 9 const l10nReg = new L10nRegistry(); 10 11 function getMockRegistry() { 12 const mockSource = L10nFileSource.createMock("test", "app", ["en-US"], "/localization/{locale}/", [ 13 { 14 path: "/localization/en-US/mock.ftl", 15 source: ` 16 key = This is a single message 17 .tooltip = This is a tooltip 18 .accesskey = f 19 ` 20 } 21 ]); 22 let registry = new L10nRegistry(); 23 registry.registerSources([mockSource]); 24 return registry; 25 } 26 27 function getAttributeByName(attributes, name) { 28 return attributes.find(attr => attr.name === name); 29 } 30 31 /** 32 * This test verifies that as we switch between 33 * different pseudo strategies, the Localization object 34 * follows and formats using the given strategy. 35 * 36 * We test values and attributes and make sure that 37 * a single-character attributes, commonly used for access keys 38 * don't get transformed. 39 */ 40 add_task(async function test_pseudo_works() { 41 Services.prefs.setStringPref("intl.l10n.pseudo", ""); 42 43 let mockRegistry = getMockRegistry(); 44 45 const l10n = new Localization([ 46 "mock.ftl", 47 ], false, mockRegistry); 48 49 { 50 // 1. Start with no pseudo 51 52 let message = (await l10n.formatMessages([{id: "key"}]))[0]; 53 54 ok(message.value.includes("This is a single message")); 55 let attr0 = getAttributeByName(message.attributes, "tooltip"); 56 ok(attr0.value.includes("This is a tooltip")); 57 let attr1 = getAttributeByName(message.attributes, "accesskey"); 58 equal(attr1.value, "f"); 59 } 60 61 { 62 // 2. Set Accented Pseudo 63 64 Services.prefs.setStringPref("intl.l10n.pseudo", "accented"); 65 let message = (await l10n.formatMessages([{id: "key"}]))[0]; 66 67 ok(message.value.includes("[Ŧħiş iş aa şiƞɠŀee ḿeeşşaaɠee]")); 68 let attr0 = getAttributeByName(message.attributes, "tooltip"); 69 ok(attr0.value.includes("[Ŧħiş iş aa ŧooooŀŧiƥ]")); 70 let attr1 = getAttributeByName(message.attributes, "accesskey"); 71 equal(attr1.value, "f"); 72 } 73 74 { 75 // 3. Set Bidi Pseudo 76 77 Services.prefs.setStringPref("intl.l10n.pseudo", "bidi"); 78 let message = (await l10n.formatMessages([{id: "key"}]))[0]; 79 80 ok(message.value.includes("iş a şiƞɠŀe ḿeşşaɠe")); 81 let attr0 = getAttributeByName(message.attributes, "tooltip"); 82 ok(attr0.value.includes("Ŧħiş iş a ŧooŀŧiƥ")); 83 let attr1 = getAttributeByName(message.attributes, "accesskey"); 84 equal(attr1.value, "f"); 85 } 86 87 { 88 // 4. Remove pseudo 89 90 Services.prefs.setStringPref("intl.l10n.pseudo", ""); 91 let message = (await l10n.formatMessages([{id: "key"}]))[0]; 92 93 ok(message.value.includes("This is a single message")); 94 let attr0 = getAttributeByName(message.attributes, "tooltip"); 95 ok(attr0.value.includes("This is a tooltip")); 96 let attr1 = getAttributeByName(message.attributes, "accesskey"); 97 equal(attr1.value, "f"); 98 } 99 100 Services.locale.requestedLocales = originalValues.requested; 101 }); 102 103 /** 104 * This test verifies that setting a bogus pseudo locale 105 * strategy doesn't break anything. 106 */ 107 add_task(async function test_unavailable_strategy_works() { 108 Services.prefs.setStringPref("intl.l10n.pseudo", ""); 109 110 let mockRegistry = getMockRegistry(); 111 112 const l10n = new Localization([ 113 "mock.ftl", 114 ], false, mockRegistry); 115 116 { 117 // 1. Set unavailable pseudo strategy 118 Services.prefs.setStringPref("intl.l10n.pseudo", "unknown-strategy"); 119 120 let message = (await l10n.formatMessages([{id: "key"}]))[0]; 121 122 ok(message.value.includes("This is a single message")); 123 let attr0 = getAttributeByName(message.attributes, "tooltip"); 124 ok(attr0.value.includes("This is a tooltip")); 125 let attr1 = getAttributeByName(message.attributes, "accesskey"); 126 equal(attr1.value, "f"); 127 } 128 129 Services.prefs.setStringPref("intl.l10n.pseudo", ""); 130 Services.locale.requestedLocales = originalValues.requested; 131 });