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