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