Chiao Cheng | 88331e3 | 2013-04-16 16:45:48 -0700 | [diff] [blame] | 1 | package com.android.contacts.common; |
| 2 | |
| 3 | import android.provider.ContactsContract.CommonDataKinds.Phone; |
| 4 | import android.test.suitebuilder.annotation.SmallTest; |
| 5 | |
| 6 | import junit.framework.TestCase; |
| 7 | |
| 8 | /** |
| 9 | * Tests for MoreContactsUtils. |
| 10 | */ |
| 11 | @SmallTest |
| 12 | public 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 | } |