blob: fc37a1f56505eb2ff21cb9019bcaecd7e12ad0bd [file] [log] [blame]
// 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));
}
}