• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base;
6 
7 import android.annotation.SuppressLint;
8 import android.content.res.Configuration;
9 import android.os.Build;
10 import android.os.LocaleList;
11 
12 import androidx.test.filters.SmallTest;
13 
14 import org.junit.Assert;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17 
18 import org.chromium.base.test.BaseJUnit4ClassRunner;
19 import org.chromium.base.test.util.MinAndroidSdkLevel;
20 
21 import java.util.Locale;
22 
23 /**
24  * Tests for the LocaleUtils class.
25  */
26 @RunWith(BaseJUnit4ClassRunner.class)
27 public class LocaleUtilsTest {
28     // This is also a part of test for toLanguageTag when API level is lower than 24
29     @Test
30     @SmallTest
testGetUpdatedLanguageForChromium()31     public void testGetUpdatedLanguageForChromium() {
32         String language = "en";
33         String updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language);
34         Assert.assertEquals(language, updatedLanguage);
35 
36         language = "iw";
37         updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language);
38         Assert.assertEquals("he", updatedLanguage);
39 
40         language = "ji";
41         updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language);
42         Assert.assertEquals("yi", updatedLanguage);
43 
44         language = "in";
45         updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language);
46         Assert.assertEquals("id", updatedLanguage);
47 
48         language = "tl";
49         updatedLanguage = LocaleUtils.getUpdatedLanguageForChromium(language);
50         Assert.assertEquals("fil", updatedLanguage);
51     }
52 
53     // This is also a part of test for toLanguageTags when API level is 24 or higher
54     @Test
55     @SmallTest
56     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
testGetUpdatedLocaleForChromium()57     public void testGetUpdatedLocaleForChromium() {
58         Locale locale = new Locale("jp");
59         Locale updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale);
60         Assert.assertEquals(locale, updatedLocale);
61 
62         locale = new Locale("iw");
63         updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale);
64         Assert.assertEquals(new Locale("he"), updatedLocale);
65 
66         locale = new Locale("ji");
67         updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale);
68         Assert.assertEquals(new Locale("yi"), updatedLocale);
69 
70         locale = new Locale("in");
71         updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale);
72         Assert.assertEquals(new Locale("id"), updatedLocale);
73 
74         locale = new Locale("tl");
75         updatedLocale = LocaleUtils.getUpdatedLocaleForChromium(locale);
76         Assert.assertEquals(new Locale("fil"), updatedLocale);
77     }
78 
79     // This is also a part of test for forLanguageTag when API level is lower than 21
80     @Test
81     @SmallTest
testGetUpdatedLanguageForAndroid()82     public void testGetUpdatedLanguageForAndroid() {
83         String language = "en";
84         String updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language);
85         Assert.assertEquals(language, updatedLanguage);
86 
87         language = "und";
88         updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language);
89         Assert.assertEquals("", updatedLanguage);
90 
91         language = "fil";
92         updatedLanguage = LocaleUtils.getUpdatedLanguageForAndroid(language);
93         Assert.assertEquals("tl", updatedLanguage);
94     }
95 
96     // This is also a part of test for forLanguageTag when API level is 21 or higher
97     @Test
98     @SmallTest
99     @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP)
testGetUpdatedLocaleForAndroid()100     public void testGetUpdatedLocaleForAndroid() {
101         Locale locale = new Locale("jp");
102         Locale updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale);
103         Assert.assertEquals(locale, updatedLocale);
104 
105         locale = new Locale("und");
106         updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale);
107         Assert.assertEquals(new Locale(""), updatedLocale);
108 
109         locale = new Locale("fil");
110         updatedLocale = LocaleUtils.getUpdatedLocaleForAndroid(locale);
111         Assert.assertEquals(new Locale("tl"), updatedLocale);
112     }
113 
114     // Test for toLanguageTag when API level is lower than 24
115     @Test
116     @SmallTest
testToLanguageTag()117     public void testToLanguageTag() {
118         Locale locale = new Locale("en", "US");
119         String localeString = LocaleUtils.toLanguageTag(locale);
120         Assert.assertEquals("en-US", localeString);
121 
122         locale = new Locale("jp");
123         localeString = LocaleUtils.toLanguageTag(locale);
124         Assert.assertEquals("jp", localeString);
125 
126         locale = new Locale("mas");
127         localeString = LocaleUtils.toLanguageTag(locale);
128         Assert.assertEquals("mas", localeString);
129 
130         locale = new Locale("es", "005");
131         localeString = LocaleUtils.toLanguageTag(locale);
132         Assert.assertEquals("es-005", localeString);
133 
134         locale = new Locale("iw");
135         localeString = LocaleUtils.toLanguageTag(locale);
136         Assert.assertEquals("he", localeString);
137 
138         locale = new Locale("ji");
139         localeString = LocaleUtils.toLanguageTag(locale);
140         Assert.assertEquals("yi", localeString);
141 
142         locale = new Locale("in", "ID");
143         localeString = LocaleUtils.toLanguageTag(locale);
144         Assert.assertEquals("id-ID", localeString);
145 
146         locale = new Locale("tl", "PH");
147         localeString = LocaleUtils.toLanguageTag(locale);
148         Assert.assertEquals("fil-PH", localeString);
149 
150         locale = new Locale("no", "NO", "NY");
151         localeString = LocaleUtils.toLanguageTag(locale);
152         Assert.assertEquals("nn-NO", localeString);
153     }
154 
155     // Test for toLanguageTags when API level is 24 or higher
156     @Test
157     @SmallTest
158     @MinAndroidSdkLevel(Build.VERSION_CODES.N)
159     @SuppressLint("NewApi")
testToLanguageTags()160     public void testToLanguageTags() {
161         Locale locale1 = new Locale("en", "US");
162         Locale locale2 = new Locale("es", "005");
163         LocaleList localeList = new LocaleList(locale1, locale2);
164         String localeString = LocaleUtils.toLanguageTags(localeList);
165         Assert.assertEquals("en-US,es-005", localeString);
166 
167         locale1 = new Locale("jp");
168         locale2 = new Locale("mas");
169         localeList = new LocaleList(locale1, locale2);
170         localeString = LocaleUtils.toLanguageTags(localeList);
171         Assert.assertEquals("jp,mas", localeString);
172 
173         locale1 = new Locale("iw");
174         locale2 = new Locale("ji");
175         localeList = new LocaleList(locale1, locale2);
176         localeString = LocaleUtils.toLanguageTags(localeList);
177         Assert.assertEquals("he,yi", localeString);
178 
179         locale1 = new Locale("in", "ID");
180         locale2 = new Locale("tl", "PH");
181         localeList = new LocaleList(locale1, locale2);
182         localeString = LocaleUtils.toLanguageTags(localeList);
183         Assert.assertEquals("id-ID,fil-PH", localeString);
184 
185         locale1 = new Locale("no", "NO", "NY");
186         localeList = new LocaleList(locale1);
187         localeString = LocaleUtils.toLanguageTags(localeList);
188         Assert.assertEquals("nn-NO", localeString);
189     }
190 
191     // Test for forLanguageTag when API level is lower than 21
192     @Test
193     @SmallTest
testForLanguageTagCompat()194     public void testForLanguageTagCompat() {
195         String languageTag = "";
196         Locale locale = new Locale("");
197         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
198 
199         languageTag = "und";
200         locale = new Locale("");
201         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
202 
203         languageTag = "en";
204         locale = new Locale("en");
205         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
206 
207         languageTag = "mas";
208         locale = new Locale("mas");
209         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
210 
211         languageTag = "en-GB";
212         locale = new Locale("en", "GB");
213         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
214 
215         languageTag = "es-419";
216         locale = new Locale("es", "419");
217         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
218 
219         // Tests if updated Chromium language code and deprecated language code
220         // are pointing to the same Locale Object.
221         languageTag = "he";
222         locale = new Locale("iw");
223         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
224 
225         languageTag = "iw";
226         locale = new Locale("he");
227         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
228 
229         languageTag = "ji";
230         locale = new Locale("yi");
231         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
232 
233         languageTag = "yi";
234         locale = new Locale("ji");
235         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
236 
237         languageTag = "in";
238         locale = new Locale("id");
239         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
240 
241         languageTag = "id";
242         locale = new Locale("in");
243         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
244 
245         // Tests for Tagalog/Filipino if updated Chromium language code and
246         // language code are pointing to the same Locale Object.
247         languageTag = "tl";
248         locale = new Locale("tl");
249         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
250 
251         languageTag = "fil";
252         locale = new Locale("tl");
253         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
254 
255         // Test with invalid inputs.
256         languageTag = "notValidLanguage";
257         locale = new Locale("");
258         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
259 
260         languageTag = "en-notValidCountry";
261         locale = new Locale("en");
262         Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag));
263     }
264 
265     // Test for toLanguage.
266     @Test
267     @SmallTest
testToLanguage()268     public void testToLanguage() {
269         Assert.assertEquals("en", LocaleUtils.toBaseLanguage("en-US"));
270         Assert.assertEquals("en", LocaleUtils.toBaseLanguage("en"));
271         Assert.assertEquals("", LocaleUtils.toBaseLanguage("-"));
272         Assert.assertEquals("", LocaleUtils.toBaseLanguage("-US"));
273         Assert.assertEquals("", LocaleUtils.toBaseLanguage(""));
274         Assert.assertEquals("fil", LocaleUtils.toBaseLanguage("fil"));
275     }
276 
277     // Test for isBaseLanguageEqual
278     @Test
279     @SmallTest
testIsBaseLanguageEqual()280     public void testIsBaseLanguageEqual() {
281         Assert.assertTrue(LocaleUtils.isBaseLanguageEqual("pt-PT", "pt-PT"));
282         Assert.assertTrue(LocaleUtils.isBaseLanguageEqual("pt-PT", "pt"));
283         Assert.assertTrue(LocaleUtils.isBaseLanguageEqual("pt", "pt-PT-xx"));
284         Assert.assertTrue(LocaleUtils.isBaseLanguageEqual("zh-Hans-CN", "zh-HK"));
285         Assert.assertTrue(LocaleUtils.isBaseLanguageEqual("", ""));
286 
287         Assert.assertFalse(LocaleUtils.isBaseLanguageEqual("en-US", "es-US"));
288         Assert.assertFalse(LocaleUtils.isBaseLanguageEqual("af", "zu"));
289         Assert.assertFalse(LocaleUtils.isBaseLanguageEqual("af", ""));
290         Assert.assertFalse(LocaleUtils.isBaseLanguageEqual("", "zu"));
291     }
292 
293     // Test for getConfigurationLocale < N
294     @Test
295     @SmallTest
testGetConfigurationLocale()296     public void testGetConfigurationLocale() {
297         Configuration config = new Configuration();
298         Assert.assertEquals("", LocaleUtils.getConfigurationLanguage(config));
299 
300         config.setLocale(Locale.forLanguageTag("hi-IN"));
301         Assert.assertEquals("hi-IN", LocaleUtils.getConfigurationLanguage(config));
302 
303         config.setLocale(new Locale("ar"));
304         Assert.assertEquals("ar", LocaleUtils.getConfigurationLanguage(config));
305     }
306 
307     // Test for getConfigurationLocale N+ (with LocaleList)
308     @Test
309     @SmallTest
310     @MinAndroidSdkLevel(Build.VERSION_CODES.N)
testGetConfigurationN()311     public void testGetConfigurationN() {
312         Configuration config = new Configuration();
313 
314         Locale locale1 = new Locale("hi", "IN");
315         Locale locale2 = new Locale("tl", "PH");
316         LocaleList localeList = new LocaleList(locale1, locale2);
317         config.setLocales(localeList);
318         Assert.assertEquals("hi-IN", LocaleUtils.getConfigurationLanguage(config));
319 
320         locale1 = new Locale("ceb");
321         locale2 = new Locale("tl", "PH");
322         localeList = new LocaleList(locale1, locale2);
323         config.setLocales(localeList);
324         Assert.assertEquals("ceb", LocaleUtils.getConfigurationLanguage(config));
325     }
326 
327     // Test for setDefaultLocalesFromConfiguration
328     @Test
329     @SmallTest
testSetDefaultLocalesFromConfiguration()330     public void testSetDefaultLocalesFromConfiguration() {
331         Configuration config = new Configuration();
332         config.setLocale(new Locale("tl", "PH"));
333         LocaleUtils.setDefaultLocalesFromConfiguration(config);
334         Assert.assertEquals("tl-PH", Locale.getDefault().toLanguageTag());
335 
336         config.setLocale(new Locale("es", "AR"));
337         LocaleUtils.setDefaultLocalesFromConfiguration(config);
338         Assert.assertEquals("es-AR", Locale.getDefault().toLanguageTag());
339     }
340 
341     // Test for setDefaultLocalesFromConfiguration N+ (with LocaleList)
342     @Test
343     @SmallTest
344     @MinAndroidSdkLevel(Build.VERSION_CODES.N)
testSetDefaultLocalesFromConfigurationN()345     public void testSetDefaultLocalesFromConfigurationN() {
346         Configuration config = new Configuration();
347         String tags = "tl-PH,es-AR,en";
348         config.setLocales(LocaleList.forLanguageTags(tags));
349         LocaleUtils.setDefaultLocalesFromConfiguration(config);
350         Assert.assertEquals("tl-PH", Locale.getDefault().toLanguageTag());
351         Assert.assertEquals(tags, LocaleList.getDefault().toLanguageTags());
352 
353         tags = "en,en-US,en-GB";
354         config.setLocales(LocaleList.forLanguageTags(tags));
355         LocaleUtils.setDefaultLocalesFromConfiguration(config);
356         Assert.assertEquals("en", Locale.getDefault().toLanguageTag());
357         Assert.assertEquals(tags, LocaleList.getDefault().toLanguageTags());
358     }
359 
360     // Test for prependToLocaleList
361     @Test
362     @SmallTest
363     @MinAndroidSdkLevel(Build.VERSION_CODES.N)
testPrependToLocaleList()364     public void testPrependToLocaleList() {
365         // Prepend to empty list
366         LocaleList resultList = LocaleUtils.ApisN.prependToLocaleList("ceb-PH", new LocaleList());
367         Assert.assertEquals("ceb-PH", resultList.toLanguageTags());
368 
369         // Prepend and not in list
370         LocaleList baseList = LocaleList.forLanguageTags("en,es-ES,fr");
371         resultList = LocaleUtils.ApisN.prependToLocaleList("zu", baseList);
372         Assert.assertEquals("zu,en,es-ES,fr", resultList.toLanguageTags());
373 
374         // Prepend and in middle of list
375         resultList = LocaleUtils.ApisN.prependToLocaleList("es-ES", baseList);
376         Assert.assertEquals("es-ES,en,fr", resultList.toLanguageTags());
377 
378         // Prepend and at end of list
379         resultList = LocaleUtils.ApisN.prependToLocaleList("fr", baseList);
380         Assert.assertEquals("fr,en,es-ES", resultList.toLanguageTags());
381 
382         // Prepend and at front of list
383         resultList = LocaleUtils.ApisN.prependToLocaleList("en", baseList);
384         Assert.assertEquals("en,es-ES,fr", resultList.toLanguageTags());
385 
386         // Prepend to list of one
387         baseList = LocaleList.forLanguageTags("fr");
388         resultList = LocaleUtils.ApisN.prependToLocaleList("en", baseList);
389         Assert.assertEquals("en,fr", resultList.toLanguageTags());
390 
391         // Prepend to list of one (self)
392         resultList = LocaleUtils.ApisN.prependToLocaleList("fr", baseList);
393         Assert.assertEquals("fr", resultList.toLanguageTags());
394     }
395 }
396