1f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov/* 2f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project 3f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * 4f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * you may not use this file except in compliance with the License. 6f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * You may obtain a copy of the License at 7f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * 8f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * 10f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * See the License for the specific language governing permissions and 14f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * limitations under the License. 15f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov */ 168920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens 17f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikovpackage com.android.providers.contacts; 18f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 19d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikovimport android.provider.ContactsContract.FullNameStyle; 20f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikovimport android.test.suitebuilder.annotation.SmallTest; 21f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 2238210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport junit.framework.TestCase; 2338210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki 24eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikovimport java.text.Collator; 25eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikovimport java.util.Arrays; 26f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikovimport java.util.Locale; 27f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 28f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov/** 29f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov * Unit tests for {@link NameLookupBuilder}. 308920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * 318920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * Run the test like this: 328920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * <code> 338920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * adb shell am instrument -e class com.android.providers.contacts.NameLookupBuilderTest -w \ 348920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * com.android.providers.contacts.tests/android.test.InstrumentationTestRunner 358920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * </code> 36f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov */ 37f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov@SmallTest 38f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikovpublic class NameLookupBuilderTest extends TestCase { 39f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 40f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov private static class TestNameLookupBuilder extends NameLookupBuilder { 41f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 42f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov StringBuilder sb = new StringBuilder(); 43f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 44f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public TestNameLookupBuilder(NameSplitter splitter) { 45f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov super(splitter); 46f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 47f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 48f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov @Override 49f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov protected String normalizeName(String name) { 50f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 51f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov // TO make the test more readable, simply return the name unnormalized 52f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov return name; 53f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 54f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 55f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov @Override 56f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov protected String[] getCommonNicknameClusters(String normalizedName) { 57f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov if (normalizedName.equals("Bill")) { 58f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov return new String[] {"*William"}; 59f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } else if (normalizedName.equals("Al")) { 60f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov return new String[] {"*Alex", "*Alice"}; 61f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 62f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov return null; 63f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 64f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 65f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public String inserted() { 66f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov return sb.toString(); 67f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 68f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 69f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov @Override 70f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov protected void insertNameLookup(long rawContactId, long dataId, int lookupType, 71f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov String string) { 72f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov sb.append("(").append(lookupType).append(":").append(string).append(")"); 73f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 74f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 75f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 76f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov private TestNameLookupBuilder mBuilder; 77f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 78f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov @Override 79f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov protected void setUp() throws Exception { 80f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov super.setUp(); 81f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov mBuilder = new TestNameLookupBuilder( 82f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov new NameSplitter("Mr", "", "", "", Locale.getDefault())); 83f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 84f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 85f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testEmptyName() { 86d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "", FullNameStyle.UNDEFINED); 87f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("", mBuilder.inserted()); 88f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 89f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 90f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testSingleUniqueName() { 91d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Foo", FullNameStyle.UNDEFINED); 92f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("(0:Foo)(2:Foo)", mBuilder.inserted()); 93f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 94f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 95f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testSingleUniqueNameWithPrefix() { 96d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Mr. Foo", FullNameStyle.UNDEFINED); 97f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("(0:Foo)(2:Foo)", mBuilder.inserted()); 98f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 99f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 100f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testTwoUniqueNames() { 101d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Foo Bar", FullNameStyle.UNDEFINED); 102f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("(0:Foo.Bar)(2:FooBar)(1:Bar.Foo)(2:BarFoo)", mBuilder.inserted()); 103f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 104f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 105f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testThreeUniqueNames() { 106d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Foo Bar Baz", FullNameStyle.UNDEFINED); 107f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 108f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov // All permutations 109f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals( 110f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(0:Foo.Bar.Baz)(2:FooBarBaz)" + 111f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Baz.Bar)(2:FooBazBar)" + 112f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 113f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Foo.Baz)(2:BarFooBaz)" + 114f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Baz.Foo)(2:BarBazFoo)" + 115f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 116f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Bar.Foo)(2:BazBarFoo)" + 117f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Foo.Bar)(2:BazFooBar)", mBuilder.inserted()); 118f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 119f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 120f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testFourUniqueNames() { 121d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Foo Bar Baz Biz", FullNameStyle.UNDEFINED); 122f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 123f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov // All permutations 124f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals( 125f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(0:Foo.Bar.Baz.Biz)(2:FooBarBazBiz)" + 126f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Bar.Biz.Baz)(2:FooBarBizBaz)" + 127f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Baz.Bar.Biz)(2:FooBazBarBiz)" + 128f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Baz.Biz.Bar)(2:FooBazBizBar)" + 129f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Biz.Baz.Bar)(2:FooBizBazBar)" + 130f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.Biz.Bar.Baz)(2:FooBizBarBaz)" + 131f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 132f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Foo.Baz.Biz)(2:BarFooBazBiz)" + 133f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Foo.Biz.Baz)(2:BarFooBizBaz)" + 134f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Baz.Foo.Biz)(2:BarBazFooBiz)" + 135f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Baz.Biz.Foo)(2:BarBazBizFoo)" + 136f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Biz.Baz.Foo)(2:BarBizBazFoo)" + 137f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bar.Biz.Foo.Baz)(2:BarBizFooBaz)" + 138f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 139f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Bar.Foo.Biz)(2:BazBarFooBiz)" + 140f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Bar.Biz.Foo)(2:BazBarBizFoo)" + 141f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Foo.Bar.Biz)(2:BazFooBarBiz)" + 142f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Foo.Biz.Bar)(2:BazFooBizBar)" + 143f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Biz.Foo.Bar)(2:BazBizFooBar)" + 144f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Baz.Biz.Bar.Foo)(2:BazBizBarFoo)" + 145f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 146f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Bar.Baz.Foo)(2:BizBarBazFoo)" + 147f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Bar.Foo.Baz)(2:BizBarFooBaz)" + 148f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Baz.Bar.Foo)(2:BizBazBarFoo)" + 149f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Baz.Foo.Bar)(2:BizBazFooBar)" + 150f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Foo.Baz.Bar)(2:BizFooBazBar)" + 151f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Biz.Foo.Bar.Baz)(2:BizFooBarBaz)", mBuilder.inserted()); 152f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 153f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 154f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testSingleNickname() { 155d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Bill", FullNameStyle.UNDEFINED); 156f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("(0:Bill)(2:Bill)(1:*William)", mBuilder.inserted()); 157f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 158f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 159f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testSingleNameWithTwoNicknames() { 160d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Al", FullNameStyle.UNDEFINED); 161f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals("(0:Al)(2:Al)(1:*Alex)(1:*Alice)", mBuilder.inserted()); 162f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 163f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 164f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testTwoNamesOneOfWhichIsNickname() { 165d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Foo Al", FullNameStyle.UNDEFINED); 166f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals( 167f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(0:Foo.Al)(2:FooAl)" + 168f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Al.Foo)(2:AlFoo)" + 169f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.*Alex)(1:*Alex.Foo)" + 170f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Foo.*Alice)(1:*Alice.Foo)", mBuilder.inserted()); 171f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 172f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov 173f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov public void testTwoNamesBothNickname() { 174d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Bill Al", FullNameStyle.UNDEFINED); 175f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov assertEquals( 176f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(0:Bill.Al)(2:BillAl)" + 177f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Al.Bill)(2:AlBill)" + 178f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:*William.Al)(1:Al.*William)" + 179f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:*William.*Alex)(1:*Alex.*William)" + 180f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:*William.*Alice)(1:*Alice.*William)" + 181f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bill.*Alex)(1:*Alex.Bill)" + 182f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov "(1:Bill.*Alice)(1:*Alice.Bill)", mBuilder.inserted()); 183f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov } 184c91ffc49403818f280c382f01bbfd5cd9a9bca6bDmitri Plotnikov 185d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov public void testChineseName() { 186eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikov // Only run this test when Chinese collation is supported 187eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikov if (!Arrays.asList(Collator.getAvailableLocales()).contains(Locale.CHINA)) { 188eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikov return; 189eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikov } 190eb8d2387e312748e4f1d92e00b4dcc7eb8085e15Dmitri Plotnikov 191d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "\u695A\u8FAD", FullNameStyle.CHINESE); 192d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov assertEquals( 193d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov "(0:\u695A\u8FAD)" + 19492ddc5cdc4d89ee2c6e861ae7b3a3a913ffa0100Dmitri Plotnikov "(2:\u695A\u8FAD)", 19592ddc5cdc4d89ee2c6e861ae7b3a3a913ffa0100Dmitri Plotnikov mBuilder.inserted()); 196d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov } 197d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov 19856f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee public void testKoreanName() { 19992ddc5cdc4d89ee2c6e861ae7b3a3a913ffa0100Dmitri Plotnikov // Only run this test when Korean collation is supported. 20056f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee if (!Arrays.asList(Collator.getAvailableLocales()).contains(Locale.KOREA)) { 20156f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee return; 20256f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee } 20356f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee 20456f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee // Lee Sang Il 20556f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee mBuilder.insertNameLookup(0, 0, "\uC774\uC0C1\uC77C", FullNameStyle.KOREAN); 20656f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee assertEquals( 20756f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee "(0:\uC774\uC0C1\uC77C)" + // Lee Sang Il 20892ddc5cdc4d89ee2c6e861ae7b3a3a913ffa0100Dmitri Plotnikov "(2:\uC774\uC0C1\uC77C)", 20956f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee mBuilder.inserted()); 21056f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee } 21156f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee 21256f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee public void testKoreanNameWithTwoCharactersFamilyName() { 21356f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee // Only run this test when Chinese collation is supported. 21456f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee if (!Arrays.asList(Collator.getAvailableLocales()).contains(Locale.KOREA)) { 21556f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee return; 21656f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee } 21756f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee 21856f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee // Sun Woo Young Nyeu 21956f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee mBuilder.insertNameLookup(0, 0, "\uC120\uC6B0\uC6A9\uB140", FullNameStyle.KOREAN); 22056f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee assertEquals( 22156f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee "(0:\uC120\uC6B0\uC6A9\uB140)" + // Sun Woo Young Nyeu 22292ddc5cdc4d89ee2c6e861ae7b3a3a913ffa0100Dmitri Plotnikov "(2:\uC120\uC6B0\uC6A9\uB140)", // Sun Woo Young Nyeu 22356f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee mBuilder.inserted()); 22456f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee } 22556f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee 226c91ffc49403818f280c382f01bbfd5cd9a9bca6bDmitri Plotnikov public void testMultiwordName() { 227d806946b6561dca3f34ded156c6ee89a5113996eDmitri Plotnikov mBuilder.insertNameLookup(0, 0, "Jo Jeffrey John Jessy Longname", FullNameStyle.UNDEFINED); 228c91ffc49403818f280c382f01bbfd5cd9a9bca6bDmitri Plotnikov String actual = mBuilder.inserted(); 229339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov 230339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov // Exact name 231339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(0:Jo.Jeffrey.John.Jessy.Longname)")); 232339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov 233339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov // Full collation key 234339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:JoJeffreyJohnJessyLongname)")); 235339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov 236339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov // Variant: four longest parts 237339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(1:Longname.Jeffrey.Jessy.John)")); 238339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov 239339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov // All individual words 240339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:Jo")); 241339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:Jeffrey")); 242339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:John")); 243339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:Jessy")); 244339603c831c0f0440312c40bee7008bef93dac95Dmitri Plotnikov assertTrue(actual.contains("(2:Longname")); 245c91ffc49403818f280c382f01bbfd5cd9a9bca6bDmitri Plotnikov } 246f23764675b35b5262a39c79aad8e9842460274b2Dmitri Plotnikov} 247