1/*
2 * Copyright (C) 2017 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
17package com.android.providers.settings;
18
19import static junit.framework.Assert.assertEquals;
20import static junit.framework.Assert.assertSame;
21import static junit.framework.Assert.assertNull;
22import static junit.framework.Assert.fail;
23
24import com.android.internal.app.LocalePicker;
25import com.android.providers.settings.SettingsHelper;
26
27import android.os.LocaleList;
28import android.support.test.runner.AndroidJUnit4;
29
30import java.util.ArrayList;
31import java.util.List;
32import java.util.Locale;
33
34import org.junit.Test;
35import org.junit.runner.RunWith;
36
37/**
38 * Tests for the SettingsHelperTest
39 */
40@RunWith(AndroidJUnit4.class)
41public class SettingsHelperTest {
42    @Test
43    public void testResolveLocales() throws Exception {
44        // Empty string from backup server
45        assertEquals(LocaleList.forLanguageTags("en-US"),
46                SettingsHelper.resolveLocales(
47                        LocaleList.forLanguageTags(""),  // restore
48                        LocaleList.forLanguageTags("en-US"),  // current
49                        new String[] { "en-US" }));  // supported
50
51        // Same as current settings
52        assertEquals(LocaleList.forLanguageTags("en-US"),
53                SettingsHelper.resolveLocales(
54                        LocaleList.forLanguageTags("en-US"),  // restore
55                        LocaleList.forLanguageTags("en-US"),  // current
56                        new String[] { "en-US" }));  // supported
57
58        assertEquals(LocaleList.forLanguageTags("en-US,ja-JP"),
59                SettingsHelper.resolveLocales(
60                        LocaleList.forLanguageTags("en-US,ja-JP"),  // restore
61                        LocaleList.forLanguageTags("en-US,ja-JP"),  // current
62                        new String[] { "en-US", "ja-JP" }));  // supported
63
64        // Current locale must be kept at the first place.
65        assertEquals(LocaleList.forLanguageTags("ja-JP,en-US"),
66                SettingsHelper.resolveLocales(
67                        LocaleList.forLanguageTags("en-US"),  // restore
68                        LocaleList.forLanguageTags("ja-JP"),  // current
69                        new String[] { "en-US", "ja-JP" }));  // supported
70
71        assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"),
72                SettingsHelper.resolveLocales(
73                        LocaleList.forLanguageTags("en-US"),  // restore
74                        LocaleList.forLanguageTags("ja-JP,ko-KR"),  // current
75                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
76
77        assertEquals(LocaleList.forLanguageTags("ja-JP,en-US,ko-KR"),
78                SettingsHelper.resolveLocales(
79                        LocaleList.forLanguageTags("en-US,ko-KR"),  // restore
80                        LocaleList.forLanguageTags("ja-JP"),  // current
81                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
82
83        // Duplicated entries must be removed.
84        assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"),
85                SettingsHelper.resolveLocales(
86                        LocaleList.forLanguageTags("en-US,ko-KR"),  // restore
87                        LocaleList.forLanguageTags("ja-JP,ko-KR"),  // current
88                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
89
90        // Drop unsupported locales.
91        assertEquals(LocaleList.forLanguageTags("en-US"),
92                SettingsHelper.resolveLocales(
93                        LocaleList.forLanguageTags("en-US,zh-CN"),  // restore
94                        LocaleList.forLanguageTags("en-US"),  // current
95                        new String[] { "en-US" }));  // supported
96
97        // Comparison happens on fully-expanded locale.
98        assertEquals(LocaleList.forLanguageTags("en-US,sr-Latn-SR,sr-Cryl-SR"),
99                SettingsHelper.resolveLocales(
100                        LocaleList.forLanguageTags("sr-Cryl-SR"),  // restore
101                        LocaleList.forLanguageTags("en-US,sr-Latn-SR"),  // current
102                        new String[] { "en-US", "sr-Latn-SR", "sr-Cryl-SR" }));  // supported
103
104        assertEquals(LocaleList.forLanguageTags("en-US"),
105                SettingsHelper.resolveLocales(
106                        LocaleList.forLanguageTags("kk-Cryl-KZ"),  // restore
107                        LocaleList.forLanguageTags("en-US"),  // current
108                        new String[] { "en-US", "kk-Latn-KZ" }));  // supported
109
110        assertEquals(LocaleList.forLanguageTags("en-US,kk-Cryl-KZ"),
111                SettingsHelper.resolveLocales(
112                        LocaleList.forLanguageTags("kk-Cryl-KZ"),  // restore
113                        LocaleList.forLanguageTags("en-US"),  // current
114                        new String[] { "en-US", "kk-Cryl-KZ" }));  // supported
115
116        assertEquals(LocaleList.forLanguageTags("en-US,zh-CN"),
117                SettingsHelper.resolveLocales(
118                        LocaleList.forLanguageTags("zh-Hans-CN"),  // restore
119                        LocaleList.forLanguageTags("en-US"),  // current
120                        new String[] { "en-US", "zh-CN" }));  // supported
121
122        assertEquals(LocaleList.forLanguageTags("en-US,zh-Hans-CN"),
123                SettingsHelper.resolveLocales(
124                        LocaleList.forLanguageTags("zh-CN"),  // restore
125                        LocaleList.forLanguageTags("en-US"),  // current
126                        new String[] { "en-US", "zh-Hans-CN" }));  // supported
127
128        // Old langauge code should be updated.
129        assertEquals(LocaleList.forLanguageTags("en-US,he-IL,id-ID,yi"),
130                SettingsHelper.resolveLocales(
131                        LocaleList.forLanguageTags("iw-IL,in-ID,ji"),  // restore
132                        LocaleList.forLanguageTags("en-US"),  // current
133                        new String[] { "he-IL", "id-ID", "yi" }));  // supported
134    }
135}
136