14cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao/* 24cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * Copyright (C) 2010 The Android Open Source Project 34cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * 44cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * Licensed under the Apache License, Version 2.0 (the "License"); 54cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * you may not use this file except in compliance with the License. 64cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * You may obtain a copy of the License at 74cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * 84cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * http://www.apache.org/licenses/LICENSE-2.0 94cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * 104cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * Unless required by applicable law or agreed to in writing, software 114cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * distributed under the License is distributed on an "AS IS" BASIS, 124cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * See the License for the specific language governing permissions and 144cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao * limitations under the License. 154cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao */ 164cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 174cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Taopackage com.android.providers.contacts; 184cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 194cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Taoimport android.provider.ContactsContract.FullNameStyle; 204cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Taoimport android.test.AndroidTestCase; 213535990c241841cdc8d65aa00c5ec0c3efaab3d8Daisuke Miyakawaimport android.test.suitebuilder.annotation.SmallTest; 22d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shraunerimport android.util.Log; 234cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 240b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikovimport java.text.Collator; 25a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shraunerimport java.util.ArrayList; 260b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikovimport java.util.Arrays; 270b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikovimport java.util.HashSet; 280b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikovimport java.util.Iterator; 290f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shraunerimport java.util.List; 300b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikovimport java.util.Locale; 310b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikov 323535990c241841cdc8d65aa00c5ec0c3efaab3d8Daisuke Miyakawa@SmallTest 334cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Taopublic class ContactLocaleUtilsTest extends AndroidTestCase { 34d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner private static final String TAG = "ContactLocaleUtilsTest"; 35d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 36a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String PHONE_NUMBER_1 = "+1 (650) 555-1212"; 37a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String PHONE_NUMBER_2 = "650-555-1212"; 384cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String LATIN_NAME = "John Smith"; 39a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String LATIN_NAME_2 = "John Paul Jones"; 40a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String KANJI_NAME = "\u65e5"; 4121cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private static final String ARABIC_NAME = "\u0646\u0648\u0631"; /* Noor */ 424cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String CHINESE_NAME = "\u675C\u9D51"; 43d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner private static final String SERBIAN_NAME = "\u0408\u0435\u043B\u0435\u043D\u0430"; 443891893bf85d30963caf47a419114349c6520b2fJay Shrauner private static final String UKRAINIAN_NAME = "\u0406"; 453891893bf85d30963caf47a419114349c6520b2fJay Shrauner private static final String UKRAINIAN_NAME_2 = "\u0407"; 463891893bf85d30963caf47a419114349c6520b2fJay Shrauner private static final String UKRAINIAN_NAME_3 = "\u0490"; 474cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String CHINESE_LATIN_MIX_NAME_1 = "D\u675C\u9D51"; 484cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String CHINESE_LATIN_MIX_NAME_2 = "MARY \u675C\u9D51"; 494cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String[] CHINESE_NAME_KEY = {"\u9D51", "\u675C\u9D51", "JUAN", "DUJUAN", 504cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao "J", "DJ"}; 514cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String[] CHINESE_LATIN_MIX_NAME_1_KEY = {"\u9D51", "\u675C\u9D51", 524cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao "D \u675C\u9D51", "JUAN", "DUJUAN", "J", "DJ", "D DUJUAN", "DDJ"}; 534cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao private static final String[] CHINESE_LATIN_MIX_NAME_2_KEY = {"\u9D51", "\u675C\u9D51", 544cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao "MARY \u675C\u9D51", "JUAN", "DUJUAN", "MARY DUJUAN", "J", "DJ", "MDJ"}; 55cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao private static final String[] LATIN_NAME_KEY = {"John Smith", "Smith", "JS", "S"}; 56a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String[] LATIN_NAME_KEY_2 = { 57a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "John Paul Jones", "Paul Jones", "Jones", "JPJ", "PJ", "J"}; 58a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String[] LABELS_EN_US = { 59a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 60a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 61a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "#", ""}; 62a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String[] LABELS_JA_JP = { 63a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "", "\u3042", "\u304B", "\u3055", "\u305F", "\u306A", "\u306F", 64a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "\u307E", "\u3084", "\u3089", "\u308F", "\u4ED6", 65a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 66a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 67a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "#", ""}; 68a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String[] LABELS_ZH_TW = { 69a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "", "1\u5283", "2\u5283", "3\u5283", "4\u5283", "5\u5283", "6\u5283", 70a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "7\u5283", "8\u5283", "9\u5283", "10\u5283", "11\u5283", "12\u5283", 71a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "13\u5283", "14\u5283", "15\u5283", "16\u5283", "17\u5283", "18\u5283", 72a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "19\u5283", "20\u5283", "21\u5283", "22\u5283", "23\u5283", "24\u5283", 731f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "25\u5283", "26\u5283", "27\u5283", "28\u5283", "29\u5283", "30\u5283", 741f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "31\u5283", "32\u5283", "33\u5283", 751f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "35\u5283", "36\u5283", "39\u5283", "48\u5283", 76a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 77a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 78a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "#", ""}; 79a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String[] LABELS_KO = { 801f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "", "\u3131", "\u3134", "\u3137", "\u3139", "\u3141", "\u3142", 811f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u3145", "\u3147", "\u3148", "\u314A", "\u314B", "\u314C", "\u314D", 821f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u314E", 83a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 84a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 85a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner "#", ""}; 8621cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private static final String[] LABELS_AR = { 871f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "", "\u0627", "\u0628", "\u062a", "\u062b", "\u062c", "\u062d", 881f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u062e", "\u062f", "\u0630", "\u0631", "\u0632", "\u0633", "\u0634", 891f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u0635", "\u0636", "\u0637", "\u0638", "\u0639", "\u063a", "\u0641", 901f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u0642", "\u0643", "\u0644", "\u0645", "\u0646", "\u0647", "\u0648", 911f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner "\u064a", 923891893bf85d30963caf47a419114349c6520b2fJay Shrauner "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 9321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 9421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner "#", ""}; 95a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 96a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private static final String JAPANESE_MISC = "\u4ed6"; 97a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 9821cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private static final Locale LOCALE_ARABIC = new Locale("ar"); 99d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner private static final Locale LOCALE_SERBIAN = new Locale("sr"); 100d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner private static final Locale LOCALE_UKRAINIAN = new Locale("uk"); 101d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner private boolean hasSimplifiedChineseCollator; 102d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner private boolean hasTraditionalChineseCollator; 10321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private boolean hasJapaneseCollator; 10421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private boolean hasKoreanCollator; 10521cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner private boolean hasArabicCollator; 1061f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner private boolean hasGermanCollator; 107d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner private boolean hasSerbianCollator; 108d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner private boolean hasUkrainianCollator; 10921cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner 11021cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner @Override 11121cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner protected void setUp() throws Exception { 11221cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner super.setUp(); 11321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner final Locale locale[] = Collator.getAvailableLocales(); 11421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner for (int i = 0; i < locale.length; i++) { 115d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (LocaleSet.isLocaleSimplifiedChinese(locale[i])) { 116d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner hasSimplifiedChineseCollator = true; 117d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } else if (LocaleSet.isLocaleTraditionalChinese(locale[i])) { 118d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner hasTraditionalChineseCollator = true; 11921cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } else if (locale[i].equals(Locale.JAPAN)) { 12021cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner hasJapaneseCollator = true; 12121cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } else if (locale[i].equals(Locale.KOREA)) { 12221cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner hasKoreanCollator = true; 12321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } else if (locale[i].equals(LOCALE_ARABIC)) { 12421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner hasArabicCollator = true; 1251f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner } else if (locale[i].equals(Locale.GERMANY)) { 1261f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner hasGermanCollator = true; 127d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } else if (locale[i].equals(LOCALE_SERBIAN)) { 128d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner hasSerbianCollator = true; 129d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } else if (locale[i].equals(LOCALE_UKRAINIAN)) { 130d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner hasUkrainianCollator = true; 13121cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 13221cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 13321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 13421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner 135a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private String getLabel(String name) { 136a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils utils = ContactLocaleUtils.getInstance(); 137a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner int bucketIndex = utils.getBucketIndex(name); 138a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner return utils.getBucketLabel(bucketIndex); 139a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 140cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao 141a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private Iterator<String> getNameLookupKeys(String name, int nameStyle) { 142a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils utils = ContactLocaleUtils.getInstance(); 143a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner return utils.getNameLookupKeys(name, nameStyle); 144a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 1450b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikov 146a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private ArrayList<String> getLabels() { 147a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils utils = ContactLocaleUtils.getInstance(); 148a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner return utils.getLabels(); 149a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 1504cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 151a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner public void testEnglishContactLocaleUtils() throws Exception { 152a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.ENGLISH); 153a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_1)); 154a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_2)); 155a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("J", getLabel(LATIN_NAME)); 156a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("", getLabel(CHINESE_NAME)); 157a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("D", getLabel(CHINESE_LATIN_MIX_NAME_1)); 158a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("B", getLabel("Bob Smith")); 159a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 160d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner if (hasArabicCollator) { 161d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner assertEquals("\u0646", getLabel(ARABIC_NAME)); 162d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 163d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner if (hasSerbianCollator) { 164d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner assertEquals("\u0408", getLabel(SERBIAN_NAME)); 165d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 166d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner if (hasUkrainianCollator) { 1673891893bf85d30963caf47a419114349c6520b2fJay Shrauner assertEquals("\u0406", getLabel(UKRAINIAN_NAME)); 168d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 169d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner 170a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertNull(getNameLookupKeys(LATIN_NAME, FullNameStyle.UNDEFINED)); 171a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner verifyLabels(getLabels(), LABELS_EN_US); 1724cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao } 1734cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 174a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner public void testJapaneseContactLocaleUtils() throws Exception { 17521cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner if (!hasJapaneseCollator) { 176d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Japanese collator not found; skipping test"); 1770b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikov return; 1780b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikov } 1790b1eaf562411ffec26fd9113c3209ebdd29202e1Dmitri Plotnikov 180a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.JAPAN); 181a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_1)); 182a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_2)); 183a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals(JAPANESE_MISC, getLabel(KANJI_NAME)); 184a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("J", getLabel(LATIN_NAME)); 185a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals(JAPANESE_MISC, getLabel(CHINESE_NAME)); 186a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("D", getLabel(CHINESE_LATIN_MIX_NAME_1)); 187a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 188a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CJK)); 1890f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CHINESE)); 1904cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 191a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("B", getLabel("Bob Smith")); 192d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner verifyLabels(getLabels(), LABELS_JA_JP); 193a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 1944cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 195a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner public void testChineseContactLocaleUtils() throws Exception { 196d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (!hasSimplifiedChineseCollator) { 197d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Simplified Chinese collator not found; skipping test"); 198a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner return; 199a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 2004cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 201a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.SIMPLIFIED_CHINESE); 202a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_1)); 203a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_2)); 204a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("J", getLabel(LATIN_NAME)); 205a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("D", getLabel(CHINESE_NAME)); 206a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("D", getLabel(CHINESE_LATIN_MIX_NAME_1)); 207a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("B", getLabel("Bob Smith")); 208a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner verifyLabels(getLabels(), LABELS_EN_US); 209a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 210d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (hasTraditionalChineseCollator) { 211d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocale(Locale.TRADITIONAL_CHINESE); 212d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_1)); 213d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("#", getLabel(PHONE_NUMBER_2)); 214d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("J", getLabel(LATIN_NAME)); 215d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("7\u5283", getLabel(CHINESE_NAME)); 216d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("D", getLabel(CHINESE_LATIN_MIX_NAME_1)); 217d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } else { 218d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Traditional Chinese collator not found"); 219d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 220a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 221a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.SIMPLIFIED_CHINESE); 222a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner Iterator<String> keys = getNameLookupKeys(CHINESE_NAME, 223cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao FullNameStyle.CHINESE); 2244cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao verifyKeys(keys, CHINESE_NAME_KEY); 2254cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 226a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner keys = getNameLookupKeys(CHINESE_LATIN_MIX_NAME_1, FullNameStyle.CHINESE); 2274cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao verifyKeys(keys, CHINESE_LATIN_MIX_NAME_1_KEY); 2284cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 229a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner keys = getNameLookupKeys(CHINESE_LATIN_MIX_NAME_2, FullNameStyle.CHINESE); 2304cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao verifyKeys(keys, CHINESE_LATIN_MIX_NAME_2_KEY); 231a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 232d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (hasTraditionalChineseCollator) { 233d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocale(Locale.TRADITIONAL_CHINESE); 234d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("B", getLabel("Bob Smith")); 235d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner verifyLabels(getLabels(), LABELS_ZH_TW); 236d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 237d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 238d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 239d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner public void testPinyinEnabledSecondaryLocale() throws Exception { 240d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (!hasSimplifiedChineseCollator) { 241d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Simplified Chinese collator not found; skipping test"); 242d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner return; 243d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 244d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 245d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocales( 246d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner new LocaleSet(Locale.ENGLISH, Locale.SIMPLIFIED_CHINESE)); 247d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("D", getLabel(CHINESE_NAME)); 248d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 249d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Iterator<String> keys = getNameLookupKeys(CHINESE_NAME, 250d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner FullNameStyle.CHINESE); 251d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner verifyKeys(keys, CHINESE_NAME_KEY); 252d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 253d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 254d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner public void testPinyinDisabledSecondaryLocale() throws Exception { 255d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (!hasSimplifiedChineseCollator) { 256d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Simplified Chinese collator not found; skipping test"); 257d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner return; 258d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 259d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 260d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocales( 261d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner new LocaleSet(Locale.ENGLISH, Locale.JAPAN)); 262d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertEquals("", getLabel(CHINESE_NAME)); 263d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner 264d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CHINESE)); 265d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CJK)); 2664cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao } 2674cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao 26802d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov public void testChineseStyleNameWithDifferentLocale() throws Exception { 269d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (!hasSimplifiedChineseCollator) { 270d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Simplified Chinese collator not found; skipping test"); 27102d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov return; 2724cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao } 273a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 274a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.ENGLISH); 2750f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CHINESE)); 2760f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CJK)); 277a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 278d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocale(Locale.SIMPLIFIED_CHINESE); 2790f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner Iterator<String> keys = getNameLookupKeys(CHINESE_NAME, 2800f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner FullNameStyle.CJK); 281cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao verifyKeys(keys, CHINESE_NAME_KEY); 282a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner keys = getNameLookupKeys(LATIN_NAME, FullNameStyle.WESTERN); 283cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao verifyKeys(keys, LATIN_NAME_KEY); 284a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner keys = getNameLookupKeys(LATIN_NAME_2, FullNameStyle.WESTERN); 285a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner verifyKeys(keys, LATIN_NAME_KEY_2); 286a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 287d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner if (hasTraditionalChineseCollator) { 288d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner ContactLocaleUtils.setLocale(Locale.TRADITIONAL_CHINESE); 289d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner assertNull(getNameLookupKeys(CHINESE_NAME, FullNameStyle.CJK)); 290d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner } 291a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 292cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao 293a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner public void testKoreanContactLocaleUtils() throws Exception { 29421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner if (!hasKoreanCollator) { 295d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Korean collator not found; skipping test"); 29621cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner return; 29721cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 29821cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner 299a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner ContactLocaleUtils.setLocale(Locale.KOREA); 3001f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner assertEquals("\u3131", getLabel("\u1100")); 3011f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner assertEquals("\u3131", getLabel("\u3131")); 3021f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner assertEquals("\u3131", getLabel("\u1101")); 3031f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner assertEquals("\u314e", getLabel("\u1161")); 304a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals("B", getLabel("Bob Smith")); 305a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner verifyLabels(getLabels(), LABELS_KO); 306cdd03b2ba03718a7fa85663a2438136284a1557cBai Tao } 30702d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov 30821cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner public void testArabicContactLocaleUtils() throws Exception { 30921cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner if (!hasArabicCollator) { 310d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Arabic collator not found; skipping test"); 31121cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner return; 31221cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 31321cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner 31421cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner ContactLocaleUtils.setLocale(LOCALE_ARABIC); 31521cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner assertEquals("\u0646", getLabel(ARABIC_NAME)); 31621cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner assertEquals("B", getLabel("Bob Smith")); 31721cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner verifyLabels(getLabels(), LABELS_AR); 31821cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner } 31921cfa6019b9fb82c23edf978d27904757207d9b0Jay Shrauner 320d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner public void testSerbianContactLocaleUtils() throws Exception { 321d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner if (!hasSerbianCollator) { 322d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Serbian collator not found; skipping test"); 323d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner return; 324d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 325d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner 326d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner ContactLocaleUtils.setLocale(LOCALE_SERBIAN); 327d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner assertEquals("\u0408", getLabel(SERBIAN_NAME)); 328d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner assertEquals("B", getLabel("Bob Smith")); 329d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 330d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner 331d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner public void testUkrainianContactLocaleUtils() throws Exception { 332d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner if (!hasUkrainianCollator) { 333d4dbd063cf88e70b045607aa865b2fdb2329bf45Jay Shrauner Log.w(TAG, "Ukrainian collator not found; skipping test"); 334d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner return; 335d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 336d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner 337d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner ContactLocaleUtils.setLocale(LOCALE_UKRAINIAN); 3383891893bf85d30963caf47a419114349c6520b2fJay Shrauner assertEquals("\u0406", getLabel(UKRAINIAN_NAME)); 3393891893bf85d30963caf47a419114349c6520b2fJay Shrauner // ICU 55 has a bug whereby these letters have buckets created only if 3403891893bf85d30963caf47a419114349c6520b2fJay Shrauner // Ukrainian is the primary language. Once this is fixed also test 3413891893bf85d30963caf47a419114349c6520b2fJay Shrauner // these labels when in English locale. 3423891893bf85d30963caf47a419114349c6520b2fJay Shrauner assertEquals("\u0407", getLabel(UKRAINIAN_NAME_2)); 3433891893bf85d30963caf47a419114349c6520b2fJay Shrauner assertEquals("\u0490", getLabel(UKRAINIAN_NAME_3)); 344d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner assertEquals("B", getLabel("Bob Smith")); 345d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner } 346d3b23d40bc15640abaeafa4041737b59f61ea557Jay Shrauner 3471f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner public void testGermanContactLocaleUtils() throws Exception { 3481f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner if (!hasGermanCollator) { 3491f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner return; 3501f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner } 3511f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner 3521f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner ContactLocaleUtils.setLocale(Locale.GERMANY); 3531f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner assertEquals("S", getLabel("Sacher")); 354acacfa249c3aaf0372cf22afbe408c89720fbb53Jay Shrauner 355acacfa249c3aaf0372cf22afbe408c89720fbb53Jay Shrauner // ICU 51 has labels Sch and St. These were removed in ICU 52 356acacfa249c3aaf0372cf22afbe408c89720fbb53Jay Shrauner assertEquals("S", getLabel("Schiller")); 357acacfa249c3aaf0372cf22afbe408c89720fbb53Jay Shrauner assertEquals("S", getLabel("Steiff")); 358acacfa249c3aaf0372cf22afbe408c89720fbb53Jay Shrauner verifyLabels(getLabels(), LABELS_EN_US); 3591f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner } 3601f8895bc9efd6c20adb02652bccb2c011ebca114Jay Shrauner 36102d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov private void verifyKeys(final Iterator<String> resultKeys, final String[] expectedKeys) 36202d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov throws Exception { 36302d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov HashSet<String> allKeys = new HashSet<String>(); 36402d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov while (resultKeys.hasNext()) { 36502d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov allKeys.add(resultKeys.next()); 36602d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov } 367a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner assertEquals(new HashSet<String>(Arrays.asList(expectedKeys)), allKeys); 368a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner } 369a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner 3700f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner // Verify that the initial set of resultLabels matches the expectedLabels. 3710f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner // Ignore the (large) number of secondary locale labels that make up the 3720f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner // tail labels in the result set right before the final "#" and "" buckets. 373a6a9fa802d1b56c206c670ca1d313bc64effcb5dJay Shrauner private void verifyLabels(final ArrayList<String> resultLabels, 3740f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner final String[] expectedLabels) throws Exception { 3750f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner final List<String> expectedLabelList = Arrays.asList(expectedLabels); 3760f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner final int numLabels = expectedLabelList.size() - 2; 3770f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner assertEquals(expectedLabelList.subList(0, numLabels), 3780f4b7a9bfe4b2079a7c5bb22b4114b5672639b05Jay Shrauner resultLabels.subList(0, numLabels)); 37902d553d965c1e4c9c9a8f851eca1270b0f700036Dmitri Plotnikov } 3804cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao} 381