tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });