| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.base; |
| |
| import android.annotation.SuppressLint; |
| import android.os.Build; |
| import android.os.LocaleList; |
| import android.support.test.filters.SmallTest; |
| |
| import org.junit.Assert; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import org.chromium.base.test.BaseJUnit4ClassRunner; |
| import org.chromium.base.test.util.MinAndroidSdkLevel; |
| |
| import java.util.Locale; |
| |
| /** |
| * Tests for the LocaleUtils class. |
| */ |
| @RunWith(BaseJUnit4ClassRunner.class) |
| public class LocaleUtilsTest { |
| // This is also a part of test for toLanguageTag when API level is lower than 24 |
| @Test |
| @SmallTest |
| public void testGetUpdatedLanguageForChromium() { |
| String language = "en"; |
| String updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language); |
| Assert.assertEquals(language, updatedLanguage); |
| |
| language = "iw"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language); |
| Assert.assertEquals("he", updatedLanguage); |
| |
| language = "ji"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language); |
| Assert.assertEquals("yi", updatedLanguage); |
| |
| language = "in"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language); |
| Assert.assertEquals("id", updatedLanguage); |
| |
| language = "tl"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language); |
| Assert.assertEquals("fil", updatedLanguage); |
| } |
| |
| // This is also a part of test for toLanguageTags when API level is 24 or higher |
| @Test |
| @SmallTest |
| @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) |
| public void testGetUpdatedLocaleForChromium() { |
| Locale locale = new Locale("jp"); |
| Locale updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale); |
| Assert.assertEquals(locale, updatedLocale); |
| |
| locale = new Locale("iw"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale); |
| Assert.assertEquals(new Locale("he"), updatedLocale); |
| |
| locale = new Locale("ji"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale); |
| Assert.assertEquals(new Locale("yi"), updatedLocale); |
| |
| locale = new Locale("in"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale); |
| Assert.assertEquals(new Locale("id"), updatedLocale); |
| |
| locale = new Locale("tl"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale); |
| Assert.assertEquals(new Locale("fil"), updatedLocale); |
| } |
| |
| // This is also a part of test for forLanguageTag when API level is lower than 21 |
| @Test |
| @SmallTest |
| public void testGetUpdatedLanguageForAndroid() { |
| String language = "en"; |
| String updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language); |
| Assert.assertEquals(language, updatedLanguage); |
| |
| language = "und"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language); |
| Assert.assertEquals("", updatedLanguage); |
| |
| language = "fil"; |
| updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language); |
| Assert.assertEquals("tl", updatedLanguage); |
| } |
| |
| // This is also a part of test for forLanguageTag when API level is 21 or higher |
| @Test |
| @SmallTest |
| @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) |
| public void testGetUpdatedLocaleForAndroid() { |
| Locale locale = new Locale("jp"); |
| Locale updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale); |
| Assert.assertEquals(locale, updatedLocale); |
| |
| locale = new Locale("und"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale); |
| Assert.assertEquals(new Locale(""), updatedLocale); |
| |
| locale = new Locale("fil"); |
| updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale); |
| Assert.assertEquals(new Locale("tl"), updatedLocale); |
| } |
| |
| // Test for toLanguageTag when API level is lower than 24 |
| @Test |
| @SmallTest |
| public void testToLanguageTag() { |
| Locale locale = new Locale("en", "US"); |
| String localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("en-US", localeString); |
| |
| locale = new Locale("jp"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("jp", localeString); |
| |
| locale = new Locale("mas"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("mas", localeString); |
| |
| locale = new Locale("es", "005"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("es-005", localeString); |
| |
| locale = new Locale("iw"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("he", localeString); |
| |
| locale = new Locale("ji"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("yi", localeString); |
| |
| locale = new Locale("in", "ID"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("id-ID", localeString); |
| |
| locale = new Locale("tl", "PH"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("fil-PH", localeString); |
| |
| locale = new Locale("no", "NO", "NY"); |
| localeString = LocaleUtils.toLanguageTag(locale); |
| Assert.assertEquals("nn-NO", localeString); |
| } |
| |
| // Test for toLanguageTags when API level is 24 or higher |
| @Test |
| @SmallTest |
| @MinAndroidSdkLevel(Build.VERSION_CODES.N) |
| @SuppressLint("NewApi") |
| public void testToLanguageTags() { |
| Locale locale1 = new Locale("en", "US"); |
| Locale locale2 = new Locale("es", "005"); |
| LocaleList localeList = new LocaleList(locale1, locale2); |
| String localeString = LocaleUtils.toLanguageTags(localeList); |
| Assert.assertEquals("en-US,es-005", localeString); |
| |
| locale1 = new Locale("jp"); |
| locale2 = new Locale("mas"); |
| localeList = new LocaleList(locale1, locale2); |
| localeString = LocaleUtils.toLanguageTags(localeList); |
| Assert.assertEquals("jp,mas", localeString); |
| |
| locale1 = new Locale("iw"); |
| locale2 = new Locale("ji"); |
| localeList = new LocaleList(locale1, locale2); |
| localeString = LocaleUtils.toLanguageTags(localeList); |
| Assert.assertEquals("he,yi", localeString); |
| |
| locale1 = new Locale("in", "ID"); |
| locale2 = new Locale("tl", "PH"); |
| localeList = new LocaleList(locale1, locale2); |
| localeString = LocaleUtils.toLanguageTags(localeList); |
| Assert.assertEquals("id-ID,fil-PH", localeString); |
| |
| locale1 = new Locale("no", "NO", "NY"); |
| localeList = new LocaleList(locale1); |
| localeString = LocaleUtils.toLanguageTags(localeList); |
| Assert.assertEquals("nn-NO", localeString); |
| } |
| |
| // Test for forLanguageTag when API level is lower than 21 |
| @Test |
| @SmallTest |
| public void testForLanguageTagCompat() { |
| String languageTag = ""; |
| Locale locale = new Locale(""); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "und"; |
| locale = new Locale(""); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "en"; |
| locale = new Locale("en"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "mas"; |
| locale = new Locale("mas"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "en-GB"; |
| locale = new Locale("en", "GB"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "es-419"; |
| locale = new Locale("es", "419"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| // Tests if updated Chromium language code and deprecated language code |
| // are pointing to the same Locale Object. |
| languageTag = "he"; |
| locale = new Locale("iw"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "iw"; |
| locale = new Locale("he"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "ji"; |
| locale = new Locale("yi"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "yi"; |
| locale = new Locale("ji"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "in"; |
| locale = new Locale("id"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "id"; |
| locale = new Locale("in"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| // Tests for Tagalog/Filipino if updated Chromium language code and |
| // language code are pointing to the same Locale Object. |
| languageTag = "tl"; |
| locale = new Locale("tl"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "fil"; |
| locale = new Locale("tl"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| // Test with invalid inputs. |
| languageTag = "notValidLanguage"; |
| locale = new Locale(""); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| |
| languageTag = "en-notValidCountry"; |
| locale = new Locale("en"); |
| Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); |
| } |
| } |