14097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov/*
24097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project
34097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov *
44097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
54097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * you may not use this file except in compliance with the License.
64097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * You may obtain a copy of the License at
74097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov *
84097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
94097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov *
104097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
114097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
124097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * See the License for the specific language governing permissions and
144097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * limitations under the License.
154097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov */
164097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
1728f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts;
184097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
19635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikovimport android.provider.ContactsContract.FullNameStyle;
20635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikovimport android.provider.ContactsContract.PhoneticNameStyle;
214097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikovimport android.test.suitebuilder.annotation.SmallTest;
224097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2338210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.android.providers.contacts.NameSplitter.Name;
24622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey
25790d120a13119275ab811fa1d57f5c4d0e5042e8Dmitri Plotnikovimport junit.framework.TestCase;
26790d120a13119275ab811fa1d57f5c4d0e5042e8Dmitri Plotnikov
2738210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport java.util.Locale;
2838210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki
294097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov/**
304097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov * Tests for {@link NameSplitter}.
318920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens *
328920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * Run the test like this:
338920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * <code>
348920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * adb shell am instrument -e class com.android.providers.contacts.NameSplitterTest -w \
358920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens *         com.android.providers.contacts.tests/android.test.InstrumentationTestRunner
368920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * </code>
374097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov */
384097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov@SmallTest
394097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikovpublic class NameSplitterTest extends TestCase {
404097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    private NameSplitter mNameSplitter;
414097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
424097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    @Override
434097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    protected void setUp() throws Exception {
444097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        super.setUp();
455dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        createNameSplitter(Locale.US);
46635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
474097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
48635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void createNameSplitter(Locale locale) {
49635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter = new NameSplitter("Mr, Ms, Mrs", "d', st, st., von", "Jr., M.D., MD, D.D.S.",
50635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "&, AND", locale);
514097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
524097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
534097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    public void testNull() {
544097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName(null, null, null, null, null, null);
55622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName(null, null, null, null, null, null);
564097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
574097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
584097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    public void testEmpty() {
594097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("", null, null, null, null, null);
60622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName(null, null, null, null, null, null);
614097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
624097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
634097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    public void testSpaces() {
644097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName(" ", null, null, null, null, null);
65622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName(null, null, null, null, null, null);
664097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
674097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
68635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testFamilyName() {
69c10787a94ab8d0163480b6f33bd4367d142164d4Dmitri Plotnikov        assertSplitName("Smith", null, "Smith", null, null, null);
70c10787a94ab8d0163480b6f33bd4367d142164d4Dmitri Plotnikov        assertJoinedName("Smith", null, "Smith", null, null, null);
714097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
724097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
73c19e02a37399c55b852d6570f73553e859b0139aDmitri Plotnikov    public void testIgnoreSuffix() {
74c19e02a37399c55b852d6570f73553e859b0139aDmitri Plotnikov        assertSplitName("Ms MD", "Ms", null, null, "MD", null);
7555e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Ms MD", "Ms", null, null, "MD", null);
76c19e02a37399c55b852d6570f73553e859b0139aDmitri Plotnikov    }
77c19e02a37399c55b852d6570f73553e859b0139aDmitri Plotnikov
78635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGivenFamilyName() {
794097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John Smith", null, "John", null, "Smith", null);
80622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName("John Smith", null, "John", null, "Smith", null);
814097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
824097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
83635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGivenMiddleFamilyName() {
844097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John Edward Smith", null, "John", "Edward", "Smith", null);
85635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Edward Smith", null, "John", "Edward", "Smith", null);
864097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
874097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
88635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testThreeNamesAndFamilyName() {
894097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John Edward Kevin Smith", null, "John Edward", "Kevin", "Smith", null);
90635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Edward Kevin Smith", null, "John Edward", "Kevin", "Smith", null);
914097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
924097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
93635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testPrefixFivenFamilyName() {
9417a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("Mr. John Smith", "Mr.", "John", null, "Smith", null);
9555e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Mr John Smith", "Mr", "John", null, "Smith", null);
9617a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("Mr.John Smith", "Mr.", "John", null, "Smith", null);
9755e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Mr John Smith", "Mr", "John", null, "Smith", null);
984097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
994097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
100635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testFivenFamilyNameSuffix() {
101635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("John Smith Jr", null, "John", null, "Smith", "Jr");
102635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Smith, Jr.", null, "John", null, "Smith", "Jr");
1034097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1044097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
105635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGivenFamilyNameSuffixWithDot() {
1064097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John Smith M.D.", null, "John", null, "Smith", "M.D.");
107635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Smith, M.D.", null, "John", null, "Smith", "M.D.");
1084097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John Smith D D S", null, "John", null, "Smith", "D D S");
109635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Smith, D D S", null, "John", null, "Smith", "D D S");
1104097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1114097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
112635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGivenSuffixFamilyName() {
1134097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John von Smith", null, "John", null, "von Smith", null);
114622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName("John von Smith", null, "John", null, "von Smith", null);
1154097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1164097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
117635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGivenSuffixFamilyNameWithDot() {
1184097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John St.Smith", null, "John", null, "St. Smith", null);
119622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName("John St. Smith", null, "John", null, "St. Smith", null);
1204097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1214097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
122635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testPrefixGivenMiddleFamily() {
12317a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("Mr. John Kevin Smith", "Mr.", "John", "Kevin", "Smith", null);
12455e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Mr John Kevin Smith", "Mr", "John", "Kevin", "Smith", null);
12517a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("Mr.John Kevin Smith", "Mr.", "John", "Kevin", "Smith", null);
12655e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Mr. John Kevin Smith", "Mr.", "John", "Kevin", "Smith", null);
127635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
128635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
129635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testPrefixGivenMiddleFamilySuffix() {
13017a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("Mr. John Kevin Smith Jr.", "Mr.", "John", "Kevin", "Smith", "Jr.");
13155e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("Mr John Kevin Smith, Jr.", "Mr", "John", "Kevin", "Smith", "Jr");
1324097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1334097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
134635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testPrefixGivenMiddlePrefixFamilySuffixWrongCapitalization() {
13517a22fae02931ae536f35293ca13a8de53439f72Dmitri Plotnikov        assertSplitName("MR. john keVin VON SmiTh JR.", "MR.", "john", "keVin", "VON SmiTh", "JR.");
13655e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        assertJoinedName("MR john keVin VON SmiTh, JR.", "MR", "john", "keVin", "VON SmiTh", "JR");
1374097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1384097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
139635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testPrefixFamilySuffix() {
140635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("von Smith Jr.", null, null, null, "von Smith", "Jr.");
141635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("von Smith, Jr.", null, null, null, "von Smith", "Jr");
1424097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1434097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
144635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testFamilyNameGiven() {
145635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John", null, "John", null, "Smith", null);
146635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith  , John", null, "John", null, "Smith", null);
147635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John Kimble", null, "John", "Kimble", "Smith", null);
148635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John K.", null, "John", "K.", "Smith", null);
149635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John, Jr.", null, "John", null, "Smith", "Jr.");
150635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John Kimble, Jr.", null, "John", "Kimble", "Smith", "Jr.");
151635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("von Braun, John, Jr.", null, "John", null, "von Braun", "Jr.");
152635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("von Braun, John Kimble, Jr.", null, "John", "Kimble", "von Braun", "Jr.");
1534097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1544097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
155635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testTwoNamesAndFamilyNameWithAmpersand() {
1564097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John & Edward Smith", null, "John & Edward", null, "Smith", null);
157622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName("John & Edward Smith", null, "John & Edward", null, "Smith", null);
1584097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertSplitName("John and Edward Smith", null, "John and Edward", null, "Smith", null);
159635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("Smith, John and Edward", null, "John and Edward", null, "Smith", null);
160622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertJoinedName("John and Edward Smith", null, "John and Edward", null, "Smith", null);
1614097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
1624097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
1634097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    public void testWithMiddleInitialAndNoDot() {
164635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("John E. Smith", null, "John", "E.", "Smith", null);
165635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John E Smith", null, "John", "E", "Smith", null);
166635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
167635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
168635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testWithLongGivenNameAndDot() {
169635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("John Ed. K. Smith", null, "John Ed.", "K.", "Smith", null);
170635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("John Ed. K Smith", null, "John Ed.", "K", "Smith", null);
171635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
172635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
173635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGuessFullNameStyleEmpty() {
174635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.UNDEFINED, null);
175635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.UNDEFINED, "");
176635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
177635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
178635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGuessFullNameStyleWestern() {
179635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
180635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Latin letters
181635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.WESTERN, "John Doe");
182635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
1834cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao        // Starts with a Latin letter, but contains Japanese letters
1844cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao        assertFullNameStyle(FullNameStyle.JAPANESE, "A\u3080\u308D\u306A\u307F\u3048");
185635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
186635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Starts with an Extended Latin letter "Latin Capital Ligature OE"
187635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.WESTERN, "\u0152uvre");
188635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
189635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Non-letters don't make a difference. This one starts with a vertical line
190635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.WESTERN, "\uFF5C.?+Smith");
191635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
192635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
193635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGuessFullNameStyleJapanese() {
1945dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        createNameSplitter(Locale.JAPAN);
195635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
196635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Hiragana: always Japanese
197635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.JAPANESE, "\u3042\u3080\u308D\u306A\u307F\u3048");
198635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
199635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Katakana: always Japanese
200635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.JAPANESE, "\u30A2\u30E0\u30ED \u30CA\u30DF\u30A8");
201635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
202635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Half-width Katakana: always Japanese
203635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.JAPANESE, "\uFF71\uFF91\uFF9B \uFF85\uFF90\uFF74");
204635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
2055dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        // Kanji: we cannot tell if this is Japanese, Chinese or Korean, but we are
2065dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        // in Locale.JAPAN, so assume Japanese
2075dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.JAPANESE, "\u5B89\u5BA4\u5948\u7F8E\u6075");
208635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
209635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // TODO: mix
210635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
211635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Accompanied by a phonetic name in Hiragana, we can safely assume that the
212635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // name is Japanese
213635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.JAPANESE, "\u5B89\u5BA4\u5948\u7F8E\u6075",
214635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u3042\u3080\u308D", null, "\u306A\u307F\u3048");
215635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
2164cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao        // Starts with a latin letter - not Western
2174cd13c4266d8e476e1a49c4b6bcd5b18c33d0de3Bai Tao        assertFullNameStyle(FullNameStyle.JAPANESE, "A\u3080\u308D\u306A\u307F\u3048");
218635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
219635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
220635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGuessFullNameStyleChinese() {
2215dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        createNameSplitter(Locale.CHINA);
222635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
2235dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        // Hanzi: we cannot tell if this is Chinese, Japanese or Korean,
2245dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        // but we are in Locale.CHINA, so assume this is Chinese
2255dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.CHINESE, "\u675C\u9D51");
226635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
227635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Accompanied by a phonetic name in Pinyin, we can safely assume that the
2285dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        // name is Chinese
229635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.CHINESE, "\u675C\u9D51",
230635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "du4", null, "juan1");
231635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
232635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Non-letters don't make a difference. This one starts with a vertical line
2335dd6d5d4acb93adc05f1fde904080787f2397f51Dmitri Plotnikov        assertFullNameStyle(FullNameStyle.CHINESE, "\uFF5C--(\u675C\u9D51)");
234635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
235635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
236635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
237635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testGuessPhoneticNameStyle() {
238635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
239635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Hiragana
240635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, "\u3042\u3080\u308D", null, null);
241635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, null, "\u3042\u3080\u308D", null);
242635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, null, null, "\u306A\u307F\u3048");
243635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, "\u3042\u3080\u308D", null,
244635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u306A\u307F\u3048");
245635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
246635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Katakana
247635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, "\u30A2\u30E0\u30ED", null,
248635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u30CA\u30DF\u30A8");
249635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
250635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Half-width Katakana
251635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.JAPANESE, "\u30A2\u30E0\u30ED", null,
252635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u30CA\u30DF\u30A8");
253635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
254635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Chinese
255635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertPhoneticNameStyle(PhoneticNameStyle.PINYIN, "du4", null, "juan1");
2564097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
2574097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
258635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testSplitJapaneseName() {
259635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        createNameSplitter(Locale.JAPAN);
260635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
261635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // One word is interpreted as given name only
262635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u3042\u3080\u308D", null, "\u3042\u3080\u308D", null, null, null);
263635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
264635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Two words are interpreted as family + give name
265635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u3042\u3080\u308D \u306A\u307F\u3048", null, "\u306A\u307F\u3048", null,
266635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u3042\u3080\u308D", null);
267635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
268635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Multiple words are interpreted as "family - given names"
269635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u3042\u3080\u308D \u3068\u304A\u308B \u306A\u307F\u3048", null,
270635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u3068\u304A\u308B \u306A\u307F\u3048", null, "\u3042\u3080\u308D", null);
271635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
272635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Hanzi characters without spaces: lump them all in the given name
273635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u6BB5\u5C0F\u6D9B", null, "\u6BB5\u5C0F\u6D9B", null, null, null);
274635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
275635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
276635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testSplitChineseName() {
277635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        createNameSplitter(Locale.CHINA);
278635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
279635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Two Hanzi characters: familyName+givenName
280635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u6BB5\u5C0F", null, "\u5C0F", null, "\u6BB5", null);
281635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
282635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Two Hanzi characters: familyName+middleName+givenName
283635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u6BB5\u5C0F\u6D9B", null, "\u6D9B", "\u5C0F", "\u6BB5", null);
284635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
285635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Two Hanzi characters: familyName(2)+middleName+givenName
286635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertSplitName("\u6BB5\u5C0F\u6D9B\u6D9C", null, "\u6D9C", "\u6D9B", "\u6BB5\u5C0F", null);
287635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
288635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
289635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testJoinJapaneseName() {
290635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        createNameSplitter(Locale.JAPAN);
291635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
292635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("\u3042\u3080\u308D", FullNameStyle.JAPANESE, null, "\u3042\u3080\u308D",
293635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                null, null, null, true);
294635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
295635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Given-name-first flag is ignored for CJK locales
296635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("\u3084\u307E\u3056\u304D \u3068\u304A\u308B", FullNameStyle.JAPANESE,
297635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                null, "\u3068\u304A\u308B", null, "\u3084\u307E\u3056\u304D", null, false);
298635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("\u3084\u307E\u3056\u304D \u3068\u304A\u308B \u3068\u304A\u308B",
299635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                FullNameStyle.JAPANESE, null, "\u3068\u304A\u308B", "\u3068\u304A\u308B",
300635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u3084\u307E\u3056\u304D", null, false);
301635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
302635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
303635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    public void testJoinChineseName() {
304635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        createNameSplitter(Locale.CHINA);
305635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
306635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        // Given-name-first flag is ignored for CJK locales
307635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("\u6BB5\u5C0F\u6D9B", FullNameStyle.CHINESE, null,
308635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u6D9B", "\u5C0F", "\u6BB5", null, true);
309635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName("\u6BB5\u5C0F\u6D9B", FullNameStyle.CHINESE, null,
310635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                "\u6D9B", "\u5C0F", "\u6BB5", null, false);
311622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey    }
3124097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
3134097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    private void assertSplitName(String fullName, String prefix, String givenNames,
314635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov            String middleName, String familyName, String suffix) {
315622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        final Name name = new Name();
316622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        mNameSplitter.split(name, fullName);
317622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertEquals(prefix, name.getPrefix());
318622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertEquals(givenNames, name.getGivenNames());
319622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertEquals(middleName, name.getMiddleName());
320635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertEquals(familyName, name.getFamilyName());
321622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey        assertEquals(suffix, name.getSuffix());
322622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey    }
323622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey
324635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void assertJoinedName(String expected, String prefix, String givenNames,
325635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov            String middleName, String familyName, String suffix) {
326635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertJoinedName(expected, FullNameStyle.WESTERN, prefix, givenNames, middleName,
327635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov                familyName, suffix, true);
328635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
329635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
330635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void assertJoinedName(String expected, int nameStyle, String prefix, String givenNames,
331635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov            String middleName, String familyName, String suffix, boolean givenNameFirst) {
332635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        Name name = new Name();
333635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.fullNameStyle = nameStyle;
334635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.prefix = prefix;
335635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.givenNames = givenNames;
336635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.middleName = middleName;
337635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.familyName = familyName;
338635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.suffix = suffix;
33955e5cbf566edd89fc55f4a7f0ef2847084da9b16Dmitri Plotnikov        String actual = mNameSplitter.join(name, givenNameFirst, true);
340635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertEquals(expected, actual);
341635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
342635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
343635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void assertFullNameStyle(int expectedFullNameStyle, String fullName) {
344635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        Name name = new Name();
345635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter.split(name, fullName);
346635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter.guessNameStyle(name);
347635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
348635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertEquals(expectedFullNameStyle, name.fullNameStyle);
349635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
350635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
351635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void assertFullNameStyle(int expectedFullNameStyle, String fullName,
352635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov            String phoneticFamilyName, String phoneticMiddleName, String phoneticGivenName) {
353635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        Name name = new Name();
354635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter.split(name, fullName);
355635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticFamilyName = phoneticFamilyName;
356635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticMiddleName = phoneticMiddleName;
357635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticGivenName = phoneticGivenName;
358635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
359635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter.guessNameStyle(name);
360635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
361635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertEquals(expectedFullNameStyle, name.fullNameStyle);
362635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    }
363635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
364635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov    private void assertPhoneticNameStyle(int expectedPhoneticNameStyle, String phoneticFamilyName,
365635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov            String phoneticMiddleName, String phoneticGivenName) {
366635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        Name name = new Name();
367635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticFamilyName = phoneticFamilyName;
368635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticMiddleName = phoneticMiddleName;
369635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        name.phoneticGivenName = phoneticGivenName;
370635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
371635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        mNameSplitter.guessNameStyle(name);
372635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov
373635a11c53a532d9b5aba5fd7c51a8d47dcb0aaf2Dmitri Plotnikov        assertEquals(expectedPhoneticNameStyle, name.phoneticNameStyle);
3744097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
37556f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee
37656f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee    public void testSplitKoreanName() {
37756f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee        createNameSplitter(Locale.KOREA);
37856f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee
37956f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee        // Lee - Sang Il
38056f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee        assertSplitName("\uC774\uC0C1\uC77C", null, "\uC0C1\uC77C", null, "\uC774", null);
38156f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee        // Dok Go - Young Jae
38256f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee        assertSplitName("\uB3C5\uACE0\uC601\uC7AC",
38356f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee                null, "\uC601\uC7AC", null, "\uB3C5\uACE0", null);
38456f2638b49e6bca97f6aa7b0768a8f1fe6e7b72eSang-il, Lee    }
3854097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov}
386