1102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa/* 2102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * Copyright (C) 2016 The Android Open Source Project 3102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * 4102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * Licensed under the Apache License, Version 2.0 (the "License"); 5102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * you may not use this file except in compliance with the License. 6102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * You may obtain a copy of the License at 7102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * 8102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * http://www.apache.org/licenses/LICENSE-2.0 9102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * 10102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * Unless required by applicable law or agreed to in writing, software 11102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * distributed under the License is distributed on an "AS IS" BASIS, 12102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * See the License for the specific language governing permissions and 14102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa * limitations under the License. 15102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa */ 16102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 17102ff0726dad764df741e41766d78fcfb829184aYohei Yukawapackage com.android.internal.inputmethod; 18102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 1923cbe85610f780134cc77dd4a54732a22ed6e86eYohei Yukawaimport android.os.LocaleList; 20102ff0726dad764df741e41766d78fcfb829184aYohei Yukawaimport android.test.InstrumentationTestCase; 21102ff0726dad764df741e41766d78fcfb829184aYohei Yukawaimport android.test.suitebuilder.annotation.SmallTest; 22102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 23102ff0726dad764df741e41766d78fcfb829184aYohei Yukawaimport java.util.ArrayList; 24102ff0726dad764df741e41766d78fcfb829184aYohei Yukawaimport java.util.Locale; 25102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 26102ff0726dad764df741e41766d78fcfb829184aYohei Yukawapublic class LocaleUtilsTest extends InstrumentationTestCase { 27102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 28102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa private static final LocaleUtils.LocaleExtractor<Locale> sIdentityMapper = 29102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa new LocaleUtils.LocaleExtractor<Locale>() { 30102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @Override 31102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public Locale get(Locale source) { 32102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa return source; 33102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 34102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa }; 35102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 36102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @SmallTest 37102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public void testFilterByLanguageEmptyLanguageList() throws Exception { 38102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 39102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-US")); 40102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fr-CA")); 41102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("in")); 42102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("ja")); 43102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fil")); 44102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 45102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = LocaleList.getEmptyLocaleList(); 46102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 47102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 48102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 49102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(0, dest.size()); 50102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 51102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 52102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @SmallTest 53072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka public void testFilterDoesNotMatchAnything() throws Exception { 54072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 55072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("en-US")); 56072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("fr-CA")); 57072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("in")); 58072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("ja")); 59072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("fil")); 60072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 61072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("zh-Hans-TW"); 62072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 63072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 64072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 65072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(0, dest.size()); 66072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 67072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 68072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka @SmallTest 69102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public void testFilterByLanguageEmptySource() throws Exception { 70102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 71102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 72102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = LocaleList.forLanguageTags("fr,en-US,ja-JP"); 73102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 74102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 75102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 76102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(0, dest.size()); 77102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 78102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 79102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @SmallTest 80102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public void testFilterByLanguageNullAvailableLocales() throws Exception { 81102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 82102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 83102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 84102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 85102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 86102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 87102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 88102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(0, dest.size()); 89102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 90102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 91102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 92102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 93102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 94102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 95102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 96102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 97102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 98102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 99102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(0, dest.size()); 100102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 101102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 102102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 103102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 104102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 105102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 106102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-US")); 107102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 108102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 109102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 110102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 111102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 112102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(1), dest.get(0)); // "en-US" 113102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 114102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 115102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 116102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 117102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 118102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 119102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en")); 120102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 121102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 122102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 123102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 124102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 125102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(1), dest.get(0)); // "en" 126102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 127102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 128102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 129102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 130102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 131102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 132102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("ja-JP")); 133102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 134102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(null); 135102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 136102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 137102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(0, dest.size()); 138102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 139102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 140102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 141102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @SmallTest 142102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public void testFilterByLanguage() throws Exception { 143072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 144072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 145072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("en-US")); 146072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("fr-CA")); 147072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("in")); 148072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("ja")); 149072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("fil")); 150102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 151072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("fr,en-US,ja-JP"); 152102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 153072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 154072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 155072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(3, dest.size()); 156072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(1), dest.get(0)); // "fr-CA" 157072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(1)); // "en-US" 158072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(3), dest.get(2)); // "ja" 159072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 160072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 161072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 162072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("en-US")); 163072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("en-GB")); 164072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("en-IN")); 165072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 166072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("en-US"); 167072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 168072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 169072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 170072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 171072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(0)); // "en-US" 172072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 173102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 174102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa 175102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa @SmallTest 176102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa public void testFilterByLanguageTheSameLanguage() throws Exception { 177102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 178102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 179102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 180102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 181102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fr-CA")); 182102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-US")); 183102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 184102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 185102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 186102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(1), dest.get(0)); // "en-US" 187102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 188102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 189102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 190102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 191102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 192102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fr-CA")); 193102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en")); 194102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 195102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 196102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 197102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(1), dest.get(0)); // "en" 198102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 199102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 200102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 201102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en,en-IN"); 202102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 203102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fr-CA")); 204102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-CA")); 205102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-IN")); 206102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 207102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 208102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 209102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(2), dest.get(0)); // "en-IN" 210102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 211102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa { 212102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final LocaleList preferredLocales = 213102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleList.forLanguageTags("en-AU,en-GB,en-US,en-IN"); 214102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> availableLocales = new ArrayList<>(); 215102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("fr-CA")); 216102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-CA")); 217102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-NZ")); 218102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa availableLocales.add(Locale.forLanguageTag("en-BZ")); 219102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa final ArrayList<Locale> dest = new ArrayList<>(); 220102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 221102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(1, dest.size()); 222102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa assertEquals(availableLocales.get(1), dest.get(0)); // "en-CA" 223102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 224102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa } 225072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 226072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka @SmallTest 227072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka public void testFilterByLanguageFallbackRules() throws Exception { 228072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 229072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn-RS"); 230072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 231072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-BA")); 232072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-CS")); 233072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-ME")); 234072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-RS")); 235072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-BA")); 236072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-CS")); 237072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-ME")); 238072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-RS")); 239072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 240072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 241072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 242072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(7), dest.get(0)); // "sr-Latn-RS" 243072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 244072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 245072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn-RS-x-android"); 246072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 247072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-BA")); 248072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-CS")); 249072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-ME")); 250072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-RS")); 251072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-BA")); 252072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-CS")); 253072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-ME")); 254072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-RS")); 255072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 256072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 257072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 258072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(7), dest.get(0)); // "sr-Latn-RS" 259072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 260072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 261072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn-RS"); 262072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 263072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-BA-x-android")); 264072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-CS-x-android")); 265072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-ME-x-android")); 266072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-RS-x-android")); 267072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-BA-x-android")); 268072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-CS-x-android")); 269072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-ME-x-android")); 270072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-RS-x-android")); 271072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 272072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 273072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 274072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(7), dest.get(0)); // "sr-Latn-RS-x-android" 275072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 276072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 277072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 278072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn-RS"); 279072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 280072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr")); 281072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl")); 282072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn")); 283072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 284072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 285072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 286072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(2), dest.get(0)); // "sr-Latn" 287072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 288072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 289072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 290072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-RS"); 291072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 292072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr")); 293072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-RS")); 294072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn")); 295072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 296072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 297072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 298072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(0)); // "sr" 299072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 300072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 301072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 302072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn"); 303072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 304072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr")); 305072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-RS")); 306072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn")); 307072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 308072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 309072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 310072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(2), dest.get(0)); // "sr-Latn" 311072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 312072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 313072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 314072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr"); 315072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 316072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr")); 317072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-RS")); 318072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn")); 319072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 320072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 321072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 322072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(0)); // "sr" 323072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 324072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 325072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr"); 326072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 327072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn")); 328072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-RS")); 329072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr")); 330072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 331072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 332072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 333072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(1), dest.get(0)); // "sr-RS" 334072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 335072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 336072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 337072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr"); 338072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 339072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-RS")); 340072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-RS")); 341072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 342072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 343072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 344072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(0)); // "sr-Cyrl-RS" 345072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 346072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 347072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("sr-Latn"); 348072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 349072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Latn-RS")); 350072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("sr-Cyrl-RS")); 351072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 352072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 353072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 354072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(0), dest.get(0)); // "sr-Latn-RS" 355072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 356072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 357072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka 358072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka public void testFilterKnownLimitation() throws Exception { 359072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka // Following test cases are not for intentional behavior but checks for preventing the 360072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka // behavior from becoming worse. 361072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 362072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("ja-Hrkt"); 363072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 364072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("ja-Jpan")); 365072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("ja-Hrkt")); 366072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 367072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 368072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 369072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka // Should be ja-Jpan since it supports ja-Hrkt and listed before ja-Hrkt. 370072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(1), dest.get(0)); 371072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 372072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka { 373072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final LocaleList preferredLocales = LocaleList.forLanguageTags("zh-Hani"); 374072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> availableLocales = new ArrayList<>(); 375072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("zh-Hans")); 376072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("zh-Hant")); 377072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("zh-Hanb")); 378072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka availableLocales.add(Locale.forLanguageTag("zh-Hani")); 379072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka final ArrayList<Locale> dest = new ArrayList<>(); 380072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka LocaleUtils.filterByLanguage(availableLocales, sIdentityMapper, preferredLocales, dest); 381072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(1, dest.size()); 382072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka // Should be zh-Hans since it supports zh-Hani. Also zh-Hant, zh-Hanb supports zh-Hani. 383072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka assertEquals(availableLocales.get(3), dest.get(0)); 384072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 385072a95a3094af2ced4f009ad62c4553c28e3f830Seigo Nonaka } 386102ff0726dad764df741e41766d78fcfb829184aYohei Yukawa} 387