blob: 8d74455d67ae252c36311b64b76aa9a33e670f1f [file] [log] [blame]
Chiao Cheng88331e32013-04-16 16:45:48 -07001package com.android.contacts.common;
2
3import android.provider.ContactsContract.CommonDataKinds.Phone;
4import android.test.suitebuilder.annotation.SmallTest;
5
6import junit.framework.TestCase;
7
8/**
9 * Tests for MoreContactsUtils.
10 */
11@SmallTest
12public class MoreContactUtilsTest extends TestCase {
13
14 public void testShouldCollapse() throws Exception {
15 assertCollapses("1", true, null, null, null, null);
16 assertCollapses("2", true, "a", "b", "a", "b");
17
18 assertCollapses("11", false, "a", null, null, null);
19 assertCollapses("12", false, null, "a", null, null);
20 assertCollapses("13", false, null, null, "a", null);
21 assertCollapses("14", false, null, null, null, "a");
22
23 assertCollapses("21", false, "a", "b", null, null);
24 assertCollapses("22", false, "a", "b", "a", null);
25 assertCollapses("23", false, "a", "b", null, "b");
26 assertCollapses("24", false, "a", "b", "a", "x");
27 assertCollapses("25", false, "a", "b", "x", "b");
28
29 assertCollapses("31", false, null, null, "a", "b");
30 assertCollapses("32", false, "a", null, "a", "b");
31 assertCollapses("33", false, null, "b", "a", "b");
32 assertCollapses("34", false, "a", "x", "a", "b");
33 assertCollapses("35", false, "x", "b", "a", "b");
34
35 assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, null);
36 assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
37
38 assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "2");
39 assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, null);
40 assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, "2");
41
42 // Test phone numbers
43 assertCollapses("60", true, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
44 "1234567");
45 assertCollapses("61", false, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
46 "1234568");
47 assertCollapses("62", true, Phone.CONTENT_ITEM_TYPE, "1234567;0", Phone.CONTENT_ITEM_TYPE,
48 "1234567;0");
49 assertCollapses("63", false, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
50 Phone.CONTENT_ITEM_TYPE, "1234567;89322");
51 assertCollapses("64", true, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
52 Phone.CONTENT_ITEM_TYPE, "1234567;89321");
53 assertCollapses("65", false, Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
54 Phone.CONTENT_ITEM_TYPE, "1234567;");
55 assertCollapses("66", false, Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
56 Phone.CONTENT_ITEM_TYPE, "12345675426");
57 assertCollapses("67", false, Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
58 Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
59 assertCollapses("68", true, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
60 Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
61 assertCollapses("69", false, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
62 Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
63
64 // test some numbers with country and area code
65 assertCollapses("70", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
66 Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
67 assertCollapses("71", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
68 Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
69 assertCollapses("72", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
70 Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
71 assertCollapses("73", false, Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
72 Phone.CONTENT_ITEM_TYPE, "+49/80921234");
73 assertCollapses("74", false, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
74 Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
75
76 // test special handling of collapsing country code for NANP region only
77 // This is non symmetrical, because we prefer the number with the +1.
78 assertEquals("100", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
79 "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
80 assertEquals("101", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
81 "+14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
82 assertEquals("102", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
83 "(415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
84 assertEquals("103", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
85 "4155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
86 // Require explicit +1 country code declaration to collapse
87 assertEquals("104", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
88 "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "415-555-1212"));
89 assertEquals("105", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
90 "14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
91 assertEquals("106", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
92 "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, " 1 (415) 555-1212"));
93 assertEquals("107", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
94 "+14155551212", Phone.CONTENT_ITEM_TYPE, " 14155551212"));
95 assertEquals("108", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
96 "1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
97 assertEquals("109", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
98 "14155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
99
100 // test some numbers with wait symbol and area code
101 assertCollapses("200", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
102 Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
103 assertCollapses("201", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
104 Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
105 assertCollapses("202", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
106 Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
107 assertCollapses("203", true, Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
108 Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
109
110 assertCollapses("300", true, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "");
111
112 assertCollapses("301", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "");
113
114 assertCollapses("302", false, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "1");
115
116 assertCollapses("303", true, Phone.CONTENT_ITEM_TYPE, "---", Phone.CONTENT_ITEM_TYPE, "---");
117
118 assertCollapses("304", false, Phone.CONTENT_ITEM_TYPE, "1-/().", Phone.CONTENT_ITEM_TYPE,
119 "--$%1");
120
121 // Test numbers using keypad letters. This is non-symmetrical, because we prefer
122 // the version with letters.
123 assertEquals("400", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
124 "abcdefghijklmnopqrstuvwxyz", Phone.CONTENT_ITEM_TYPE,
125 "22233344455566677778889999"));
126 assertEquals("401", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
127 "22233344455566677778889999", Phone.CONTENT_ITEM_TYPE,
128 "abcdefghijklmnopqrstuvwxyz"));
129
130 assertCollapses("402", false, Phone.CONTENT_ITEM_TYPE, "1;2", Phone.CONTENT_ITEM_TYPE,
131 "12");
132
133 assertCollapses("403", false, Phone.CONTENT_ITEM_TYPE, "1,2", Phone.CONTENT_ITEM_TYPE,
134 "12");
135 }
136
137 public void testShouldCollapse_collapsesSameNumberWithDifferentFormats() {
138 assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
139 "555-1212", Phone.CONTENT_ITEM_TYPE, "5551212"));
140 assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
141 "415-555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
142 assertEquals("2", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
143 "4155551212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
144 assertEquals("3", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
145 "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
146 assertEquals("4", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
147 "14155551212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
148 }
149
150 private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
151 CharSequence data1, CharSequence mimetype2, CharSequence data2) {
152 assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1, mimetype2,
153 data2));
154 assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2, mimetype1,
155 data1));
156
157 // If data1 and data2 are the same instance, make sure the same test passes with different
158 // instances.
159 if (data1 == data2 && data1 != null) {
160 // Create a different instance
161 final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
162
163 if (data1 == data2_newref) {
164 // In some cases no matter what we do the runtime reuses the same instance, so
165 // we can't do the "different instance" test.
166 return;
167 }
168
169 // we have two different instances, now make sure we get the same result as before
170 assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1,
171 mimetype2, data2_newref));
172 assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2_newref,
173 mimetype1, data1));
174 }
175 }
176}