1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.textservices; 18 19 import static org.junit.Assert.assertEquals; 20 import static org.junit.Assert.assertFalse; 21 22 import androidx.test.filters.SmallTest; 23 import androidx.test.runner.AndroidJUnit4; 24 25 import org.junit.Test; 26 import org.junit.runner.RunWith; 27 28 import java.util.ArrayList; 29 import java.util.Locale; 30 31 @SmallTest 32 @RunWith(AndroidJUnit4.class) 33 public class LocaleUtilsTest { 34 private static final Locale LOCALE_EN = new Locale("en"); 35 private static final Locale LOCALE_EN_US = new Locale("en", "US"); 36 private static final Locale LOCALE_EN_GB = new Locale("en", "GB"); 37 private static final Locale LOCALE_EN_IN = new Locale("en", "IN"); 38 private static final Locale LOCALE_FIL = new Locale("fil"); 39 private static final Locale LOCALE_FIL_PH = new Locale("fil", "PH"); 40 private static final Locale LOCALE_JA = new Locale("ja"); 41 private static final Locale LOCALE_JA_JP = new Locale("ja", "JP"); 42 private static final Locale LOCALE_TH = new Locale("ht"); 43 private static final Locale LOCALE_TH_TH = new Locale("ht", "TH"); 44 private static final Locale LOCALE_TH_TH_TH = new Locale("ht", "TH", "TH"); 45 46 @Test testGetSuitableLocalesForSpellChecker()47 public void testGetSuitableLocalesForSpellChecker() throws Exception { 48 { 49 final ArrayList<Locale> locales = 50 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_EN_US); 51 assertEquals(3, locales.size()); 52 assertEquals(LOCALE_EN_US, locales.get(0)); 53 assertEquals(LOCALE_EN_GB, locales.get(1)); 54 assertEquals(LOCALE_EN, locales.get(2)); 55 } 56 57 { 58 final ArrayList<Locale> locales = 59 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_EN_GB); 60 assertEquals(3, locales.size()); 61 assertEquals(LOCALE_EN_GB, locales.get(0)); 62 assertEquals(LOCALE_EN_US, locales.get(1)); 63 assertEquals(LOCALE_EN, locales.get(2)); 64 } 65 66 { 67 final ArrayList<Locale> locales = 68 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_EN); 69 assertEquals(3, locales.size()); 70 assertEquals(LOCALE_EN, locales.get(0)); 71 assertEquals(LOCALE_EN_US, locales.get(1)); 72 assertEquals(LOCALE_EN_GB, locales.get(2)); 73 } 74 75 { 76 final ArrayList<Locale> locales = 77 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_EN_IN); 78 assertEquals(4, locales.size()); 79 assertEquals(LOCALE_EN_IN, locales.get(0)); 80 assertEquals(LOCALE_EN_US, locales.get(1)); 81 assertEquals(LOCALE_EN_GB, locales.get(2)); 82 assertEquals(LOCALE_EN, locales.get(3)); 83 } 84 85 { 86 final ArrayList<Locale> locales = 87 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_JA_JP); 88 assertEquals(5, locales.size()); 89 assertEquals(LOCALE_JA_JP, locales.get(0)); 90 assertEquals(LOCALE_JA, locales.get(1)); 91 assertEquals(LOCALE_EN_US, locales.get(2)); 92 assertEquals(LOCALE_EN_GB, locales.get(3)); 93 assertEquals(Locale.ENGLISH, locales.get(4)); 94 } 95 96 // Test 3-letter language code. 97 { 98 final ArrayList<Locale> locales = 99 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_FIL_PH); 100 assertEquals(5, locales.size()); 101 assertEquals(LOCALE_FIL_PH, locales.get(0)); 102 assertEquals(LOCALE_FIL, locales.get(1)); 103 assertEquals(LOCALE_EN_US, locales.get(2)); 104 assertEquals(LOCALE_EN_GB, locales.get(3)); 105 assertEquals(Locale.ENGLISH, locales.get(4)); 106 } 107 108 // Test variant. 109 { 110 final ArrayList<Locale> locales = 111 LocaleUtils.getSuitableLocalesForSpellChecker(LOCALE_TH_TH_TH); 112 assertEquals(6, locales.size()); 113 assertEquals(LOCALE_TH_TH_TH, locales.get(0)); 114 assertEquals(LOCALE_TH_TH, locales.get(1)); 115 assertEquals(LOCALE_TH, locales.get(2)); 116 assertEquals(LOCALE_EN_US, locales.get(3)); 117 assertEquals(LOCALE_EN_GB, locales.get(4)); 118 assertEquals(Locale.ENGLISH, locales.get(5)); 119 } 120 121 // Test Locale extension. 122 { 123 final Locale localeWithoutVariant = LOCALE_JA_JP; 124 final Locale localeWithVariant = new Locale.Builder() 125 .setLocale(LOCALE_JA_JP) 126 .setExtension('x', "android") 127 .build(); 128 assertFalse(localeWithoutVariant.equals(localeWithVariant)); 129 130 final ArrayList<Locale> locales = 131 LocaleUtils.getSuitableLocalesForSpellChecker(localeWithVariant); 132 assertEquals(5, locales.size()); 133 assertEquals(LOCALE_JA_JP, locales.get(0)); 134 assertEquals(LOCALE_JA, locales.get(1)); 135 assertEquals(LOCALE_EN_US, locales.get(2)); 136 assertEquals(LOCALE_EN_GB, locales.get(3)); 137 assertEquals(Locale.ENGLISH, locales.get(4)); 138 } 139 } 140 } 141