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