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