10f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka/* 20f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * Copyright (C) 2017 The Android Open Source Project 30f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * 40f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 50f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * you may not use this file except in compliance with the License. 60f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * You may obtain a copy of the License at 70f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * 80f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 90f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * 100f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 110f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 120f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * See the License for the specific language governing permissions and 140f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * limitations under the License. 150f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka */ 160f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 170f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakapackage com.android.providers.settings; 180f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 190f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport static junit.framework.Assert.assertEquals; 200f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport static junit.framework.Assert.assertSame; 210f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport static junit.framework.Assert.assertNull; 220f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport static junit.framework.Assert.fail; 230f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 240f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport com.android.internal.app.LocalePicker; 250f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport com.android.providers.settings.SettingsHelper; 260f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 270f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport android.os.LocaleList; 280f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport android.support.test.runner.AndroidJUnit4; 290f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 300f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport java.util.ArrayList; 310f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport java.util.List; 320f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport java.util.Locale; 330f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 340f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport org.junit.Test; 350f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakaimport org.junit.runner.RunWith; 360f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 370f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka/** 380f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka * Tests for the SettingsHelperTest 390f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka */ 400f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka@RunWith(AndroidJUnit4.class) 410f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonakapublic class SettingsHelperTest { 420f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka @Test 430f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka public void testResolveLocales() throws Exception { 440f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Empty string from backup server 450f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US"), 460f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 470f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags(""), // restore 480f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 490f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US" })); // supported 500f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 510f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Same as current settings 520f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US"), 530f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 540f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // restore 550f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 560f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US" })); // supported 570f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 580f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,ja-JP"), 590f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 600f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,ja-JP"), // restore 610f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,ja-JP"), // current 620f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "ja-JP" })); // supported 630f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 640f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Current locale must be kept at the first place. 650f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("ja-JP,en-US"), 660f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 670f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // restore 680f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("ja-JP"), // current 690f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "ja-JP" })); // supported 700f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 710f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"), 720f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 730f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // restore 740f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("ja-JP,ko-KR"), // current 750f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "ja-JP", "ko-KR" })); // supported 760f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 770f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("ja-JP,en-US,ko-KR"), 780f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 790f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,ko-KR"), // restore 800f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("ja-JP"), // current 810f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "ja-JP", "ko-KR" })); // supported 820f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 830f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Duplicated entries must be removed. 840f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"), 850f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 860f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,ko-KR"), // restore 870f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("ja-JP,ko-KR"), // current 880f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "ja-JP", "ko-KR" })); // supported 890f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 900f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Drop unsupported locales. 910f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US"), 920f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 930f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,zh-CN"), // restore 940f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 950f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US" })); // supported 960f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 970f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Comparison happens on fully-expanded locale. 980f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,sr-Latn-SR,sr-Cryl-SR"), 990f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1000f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("sr-Cryl-SR"), // restore 1010f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US,sr-Latn-SR"), // current 1020f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "sr-Latn-SR", "sr-Cryl-SR" })); // supported 1030f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 1040f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US"), 1050f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1060f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("kk-Cryl-KZ"), // restore 1070f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 1080f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "kk-Latn-KZ" })); // supported 1090f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 1100f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,kk-Cryl-KZ"), 1110f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1120f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("kk-Cryl-KZ"), // restore 1130f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 1140f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "kk-Cryl-KZ" })); // supported 1150f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 1160f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,zh-CN"), 1170f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1180f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("zh-Hans-CN"), // restore 1190f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 1200f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "zh-CN" })); // supported 1210f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 1220f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,zh-Hans-CN"), 1230f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1240f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("zh-CN"), // restore 1250f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 1260f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "en-US", "zh-Hans-CN" })); // supported 1270f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka 1280f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka // Old langauge code should be updated. 1290f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka assertEquals(LocaleList.forLanguageTags("en-US,he-IL,id-ID,yi"), 1300f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka SettingsHelper.resolveLocales( 1310f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("iw-IL,in-ID,ji"), // restore 1320f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka LocaleList.forLanguageTags("en-US"), // current 1330f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka new String[] { "he-IL", "id-ID", "yi" })); // supported 1340f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka } 1350f19cc779fb81bca0d00fd0a062f431cedb5f684Seigo Nonaka} 136