diff options
Diffstat (limited to 'tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java')
-rw-r--r-- | tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java b/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java deleted file mode 100644 index c1365f5cf..000000000 --- a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.dialer.dialpad; - -import android.test.suitebuilder.annotation.SmallTest; -import android.test.suitebuilder.annotation.Suppress; -import android.util.Log; -import android.test.AndroidTestCase; - -import com.android.dialer.dialpad.SmartDialNameMatcher; -import com.android.dialer.dialpad.SmartDialPrefix; - -import java.text.Normalizer; -import java.util.ArrayList; - -import junit.framework.TestCase; - -@SmallTest -public class SmartDialNameMatcherTest extends TestCase { - private static final String TAG = "SmartDialNameMatcherTest"; - - public void testMatches() { - // Test to ensure that all alphabetic characters are covered - checkMatches("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - "22233344455566677778889999" + "22233344455566677778889999", true, 0, 26 * 2); - // Should fail because of a mistyped 2 instead of 9 in the second last character - checkMatches("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - "22233344455566677778889999" + "22233344455566677778889929", false, 0, 0); - - // Basic name test - checkMatches("joe", "5", true, 0, 1); - checkMatches("joe", "56", true, 0, 2); - checkMatches("joe", "563", true, 0, 3); - - // Matches only word boundary. - checkMatches("joe", "63", false, 0, 0); - checkMatches("joe oe", "63", true, 4, 6); - - // Test for a match across word boundaries - checkMatches("joe oe", "56363", true, 0, 6); - } - - public void testMatches_repeatedLetters() { - checkMatches("aaaaaaaaaa", "2222222222", true, 0, 10); - // Fails because of one extra 2 - checkMatches("aaaaaaaaaa", "22222222222", false, 0, 0); - checkMatches("zzzzzzzzzz zzzzzzzzzz", "99999999999999999999", true, 0, 21); - } - - public void testMatches_repeatedSpaces() { - checkMatches("William J Smith", "9455426576", true, 0, 17); - checkMatches("William J Smith", "576", true, 12, 17); - // Fails because we start at non-word boundary - checkMatches("William J Smith", "6576", false, 0, 0); - } - - - public void testMatches_Initial() { - // wjs matches (W)illiam (J)ohn (S)mith - checkMatches("William John Smith", "957", true, 0, 1, 8, 9, 13, 14); - // wjsmit matches (W)illiam (J)ohn (Smit)h - checkMatches("William John Smith", "957648", true, 0, 1, 8, 9, 13, 17); - // wjohn matches (W)illiam (John) Smith - checkMatches("William John Smith", "95646", true, 0, 1, 8, 12); - // jsmi matches William (J)ohn (Smi)th - checkMatches("William John Smith", "5764", true, 8, 9, 13, 16); - // make sure multiple spaces don't mess things up - checkMatches("William John Smith", "5764", true, 15, 16, 22, 25); - } - - public void testMatches_InitialWithSeparator() { - // wjs matches (W)illiam (J)ohn (S)mith - checkMatches("William John-Smith", "957", true, 0, 1, 8, 9, 13, 14); - // wjsmit matches (W)illiam (J)ohn-(OShe)a - checkMatches("William John-O'Shea", "956743", true, 0, 1, 8, 9, 13, 18); - // wjohn matches (W)illiam-(John) Smith - checkMatches("William-John Smith", "95646", true, 0, 1, 8, 12); - // jsmi matches William (J)ohn-(Smi)th - checkMatches("William John-Smith", "5764", true, 8, 9, 13, 16); - // wsmi matches (W)illiam John (Smi)th - checkMatches("William John-Smith", "9764", true, 0, 1, 13, 16); - // make sure multiple spaces don't mess things up - checkMatches("William John---Smith", "5764", true, 15, 16, 22, 25); - // match tokens that are located directly after a non-space separator (studio) - checkMatches("Berkeley Hair-Studio", "788346", true, 14, 20); - // match tokens with same initials - checkMatches("H.Harold", "427653", true, 2, 8); - // various matching combinations of tokens with similar initials - checkMatches("Yo-Yoghurt Land", "964487", true, 3, 9); - checkMatches("Yo-Yoghurt Land", "96448785263", true, 3, 15); - checkMatches("Yo-Yoghurt Land", "95263", true, 3, 4, 11, 15); - checkMatches("Yo-Yoghurt Land", "995263", true, 0, 1, 3, 4, 11, 15); - - checkMatches("ab zz ef", "23", true, 0, 1, 6, 7); - } - - public void testMatches_repeatedSeparators() { - // Simple match for single token - checkMatches("John,,,,,Doe", "5646", true, 0, 4); - // Match across tokens - checkMatches("John,,,,,Doe", "56463", true, 0, 10); - // Match token after chain of separators - checkMatches("John,,,,,Doe", "363", true, 9, 12); - } - - public void testMatches_LatinMix() { - // Latin + Chinese characters - checkMatches("Lee王力Wang宏", "59264", true, 0, 1, 5, 9); - // Latin + Japanese characters - checkMatches("千Abcd佳智Efgh佳IJKL", "222333444555", true, 1, 16); - // Latin + Arabic characters - checkMatches("Peterعبد الرحمنJames", "752637", true, 0, 1, 15, 20); - } - - public void testMatches_umlaut() { - checkMatches("ÄÖÜäöü", "268268", true, 0, 6); - } - - public void testMatches_NumberInName() { - // Number used as display name - checkMatches("+1-123-456-6789", "1234566789", true, 3, 15); - // Mix of numbers and letters - checkMatches("3rd Grade Teacher", "373", true, 0, 3); - checkMatches("1800 Win A Prize", "1800", true, 0, 4); - checkMatches("1800 Win A Prize", "1800946277493", true, 0, 16); - checkMatches("1800 Win A Prize", "977493", true, 5, 6, 11, 16); - } - - - // TODO: Great if it was treated as "s" or "ss. Figure out if possible without prefix trie? - @Suppress - public void testMatches_germanSharpS() { - checkMatches("ß", "s", true, 0, 1); - checkMatches("ß", "ss", true, 0, 1); - } - - // TODO: Add this and make it work - @Suppress - public void testMatches_greek() { - // http://en.wikipedia.org/wiki/Greek_alphabet - fail("Greek letters aren't supported yet."); - } - - // TODO: Add this and make it work - @Suppress - public void testMatches_cyrillic() { - // http://en.wikipedia.org/wiki/Cyrillic_script - fail("Cyrillic letters aren't supported yet."); - } - - - public void testMatches_NumberBasic() { - // Simple basic examples that start the match from the start of the number - checkMatchesNumber("5103337596", "510", true, 0, 3); - checkMatchesNumber("5103337596", "511", false, 0, 0); - checkMatchesNumber("5103337596", "5103337596", true, 0, 10); - checkMatchesNumber("123-456-789", "123456789", true, 0, 11); - checkMatchesNumber("123-456-789", "123456788", false, 0, 0); - checkMatchesNumber("09999999999", "099", true, 0, 3); - } - - public void testMatches_NumberWithCountryCode() { - // These matches should ignore the country prefix - // USA (+1) - checkMatchesNumber("+15103337596", "5103337596", true, 2, 12); - checkMatchesNumber("+15103337596", "15103337596", true, 0, 12); - - // Singapore (+65) - checkMatchesNumber("+6591776930", "6591", true, 0, 5); - checkMatchesNumber("+6591776930", "9177", true, 3, 7); - checkMatchesNumber("+6591776930", "5917", false, 3, 7); - - // Hungary (+36) - checkMatchesNumber("+3612345678", "361234", true, 0, 7); - checkMatchesNumber("+3612345678", "1234", true, 3, 7); - - // Hongkong (+852) - checkMatchesNumber("+852 2222 2222", "85222222222", true, 0, 14); - checkMatchesNumber("+852 2222 3333", "2222", true, 5, 9); - - // Invalid (+854) - checkMatchesNumber("+854 1111 2222", "8541111", true, 0, 9); - checkMatchesNumber("+854 1111 2222", "1111", false, 0, 0); - } - - public void testMatches_NumberNANP() { - SmartDialPrefix.setUserInNanpRegion(true); - // An 11 digit number prefixed with 1 should be matched by the 10 digit number, as well as - // the 7 digit number (without area code) - checkMatchesNumber("1-510-333-7596", "5103337596", true, true, 2, 14); - checkMatchesNumber("1-510-333-7596", "3337596", true, true, 6, 14); - - // An 11 digit number prefixed with +1 should be matched by the 10 digit number, as well as - // the 7 digit number (without area code) - checkMatchesNumber("+1-510-333-7596", "5103337596", true, true, 3, 15); - checkMatchesNumber("+1-510-333-7596", "3337596", true, true, 7, 15); - checkMatchesNumber("+1-510-333-7596", "103337596", false, true, 0, 0); - checkMatchesNumber("+1-510-333-7596", "337596", false, true, 0, 0); - checkMatchesNumber("+1510 3337596", "5103337596", true, true, 2, 13); - checkMatchesNumber("+1510 3337596", "3337596", true, true, 6, 13); - checkMatchesNumber("+1510 3337596", "103337596", false, true, 0, 0); - checkMatchesNumber("+1510 3337596", "37596", false, true, 0, 0); - - // Invalid NANP numbers should not be matched - checkMatchesNumber("1-510-333-759", "510333759", false, true, 0, 0); - checkMatchesNumber("510-333-759", "333759", false, true, 0, 0); - - // match should fail if NANP flag is switched off - checkMatchesNumber("1-510-333-7596", "3337596", false, false, 0, 0); - - // A 10 digit number without a 1 prefix should be matched by the 7 digit number - checkMatchesNumber("(650) 292 2323", "2922323", true, true, 6, 14); - checkMatchesNumber("(650) 292 2323", "6502922323", true, true, 0, 14); - // match should fail if NANP flag is switched off - checkMatchesNumber("(650) 292 2323", "2922323", false, false, 0, 0); - // But this should still match (since it is the full number) - checkMatchesNumber("(650) 292 2323", "6502922323", true, false, 0, 14); - } - - - private void checkMatchesNumber(String number, String query, boolean expectedMatches, - int matchStart, int matchEnd) { - checkMatchesNumber(number, query, expectedMatches, false, matchStart, matchEnd); - } - - private void checkMatchesNumber(String number, String query, boolean expectedMatches, - boolean matchNanp, int matchStart, int matchEnd) { - final SmartDialNameMatcher matcher = new SmartDialNameMatcher(query); - final SmartDialMatchPosition pos = matcher.matchesNumber(number, query, matchNanp); - assertEquals(expectedMatches, pos != null); - if (expectedMatches) { - assertEquals("start", matchStart, pos.start); - assertEquals("end", matchEnd, pos.end); - } - } - - private void checkMatches(String displayName, String query, boolean expectedMatches, - int... expectedMatchPositions) { - final SmartDialNameMatcher matcher = new SmartDialNameMatcher(query); - final ArrayList<SmartDialMatchPosition> matchPositions = - new ArrayList<SmartDialMatchPosition>(); - final boolean matches = matcher.matchesCombination( - displayName, query, matchPositions); - Log.d(TAG, "query=" + query + " text=" + displayName - + " nfd=" + Normalizer.normalize(displayName, Normalizer.Form.NFD) - + " nfc=" + Normalizer.normalize(displayName, Normalizer.Form.NFC) - + " nfkd=" + Normalizer.normalize(displayName, Normalizer.Form.NFKD) - + " nfkc=" + Normalizer.normalize(displayName, Normalizer.Form.NFKC) - + " matches=" + matches); - assertEquals("matches", expectedMatches, matches); - final int length = expectedMatchPositions.length; - assertEquals(length % 2, 0); - if (matches) { - for (int i = 0; i < length/2; i++) { - assertEquals("start", expectedMatchPositions[i * 2], matchPositions.get(i).start); - assertEquals("end", expectedMatchPositions[i * 2 + 1], matchPositions.get(i).end); - } - } - } - -} |