tor-browser

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

detector-locale.https.window.js (3317B)


      1 // META: title=LanguageDetector locale tests
      2 // META: global=window
      3 // META: timeout=long
      4 // META: script=resources/util.js
      5 // META: script=/resources/testdriver.js
      6 // META: script=../resources/util.js
      7 // META: script=../resources/locale-util.js
      8 
      9 'use strict';
     10 
     11 function getAvailability(expectedInputLanguages) {
     12  return LanguageDetector.availability({expectedInputLanguages});
     13 }
     14 
     15 promise_test(async t => {
     16  for (const [languageSubtag, variations] of Object.entries(
     17           valid_language_tags)) {
     18    const languageSubtagAvailability = await getAvailability([languageSubtag]);
     19 
     20    // Test each variation individually.
     21    for (const variation of variations) {
     22      assert_availability_consistent(
     23          await getAvailability([variation]), languageSubtagAvailability);
     24    }
     25 
     26    // Test all variations.
     27    assert_availability_consistent(
     28        await getAvailability(variations), languageSubtagAvailability);
     29  }
     30 }, 'LanguageDetector.availability() is consistent between language tag variations');
     31 
     32 
     33 async function getExpectedInputLanguages(expectedInputLanguages) {
     34  return (await createLanguageDetector({expectedInputLanguages}))
     35      .expectedInputLanguages;
     36 }
     37 
     38 async function assert_valid_expected_input_languages(language) {
     39  const expectedInputLanguages = await getExpectedInputLanguages([language]);
     40  assert_equals(expectedInputLanguages.length, 1);
     41  assert_is_variation(language, expectedInputLanguages[0]);
     42  assert_is_canonical(expectedInputLanguages[0]);
     43 }
     44 
     45 function uniqueCount(array) {
     46  return (new Set(array)).size;
     47 }
     48 
     49 promise_test(async t => {
     50  for (const [languageSubtag, variations] of Object.entries(
     51           valid_language_tags)) {
     52    if (await getAvailability([languageSubtag]) === 'unavailable') {
     53      continue;
     54    }
     55 
     56    await assert_valid_expected_input_languages(languageSubtag);
     57 
     58    for (const variation of variations) {
     59      await assert_valid_expected_input_languages(variation);
     60    }
     61 
     62    const expectedInputLanguages = await getExpectedInputLanguages(variations);
     63 
     64    // There should be no duplicates.
     65    assert_equals(
     66        expectedInputLanguages.length, uniqueCount(expectedInputLanguages));
     67 
     68    for (const language of expectedInputLanguages) {
     69      assert_is_canonical(language);
     70      assert_is_variation(language, languageSubtag);
     71    }
     72  }
     73 }, 'LanguageDetector has valid expectedInputLanguages');
     74 
     75 function assert_rejects_invalid_expected_input_languages(
     76    t, method, expectedInputLanguages) {
     77  return promise_rejects_js(t, RangeError, method({expectedInputLanguages}));
     78 }
     79 
     80 promise_test(async t => {
     81  for (const languageTag of invalid_language_tags) {
     82    assert_rejects_invalid_expected_input_languages(
     83        t, createLanguageDetector, [languageTag]);
     84  }
     85  assert_rejects_invalid_expected_input_languages(
     86      t, createLanguageDetector, invalid_language_tags);
     87 }, 'LanguageDetector.create() throws RangeError for invalid language tags');
     88 
     89 promise_test(async t => {
     90  for (const languageTag of invalid_language_tags) {
     91    assert_rejects_invalid_expected_input_languages(
     92        t, LanguageDetector.availability, [languageTag]);
     93  }
     94  assert_rejects_invalid_expected_input_languages(
     95      t, LanguageDetector.availability, invalid_language_tags);
     96 }, 'LanguageDetector.availability() throws RangeError for invalid language tags');