summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChiao Cheng <chiaocheng@google.com>2013-04-16 16:45:48 -0700
committerChiao Cheng <chiaocheng@google.com>2013-04-16 18:24:10 -0700
commit939837d76f33abdd3b44ce986329293d808ed41c (patch)
tree643bb3479e766aaa087838499af4c64cde54a188 /tests
parentbc8a5b4d1ca27c5b277e232e057a019003333f38 (diff)
downloadandroid_packages_apps_ContactsCommon-939837d76f33abdd3b44ce986329293d808ed41c.tar.gz
android_packages_apps_ContactsCommon-939837d76f33abdd3b44ce986329293d808ed41c.tar.bz2
android_packages_apps_ContactsCommon-939837d76f33abdd3b44ce986329293d808ed41c.zip
Fixing regression in phone number collapse on detail page.
The case of collapsing phone numbers with different formats was broken due to another bug fix. e.g... (555) 555-5555 555-555-5555 would not collapse when they should. The second problem was that an inconsistency was inadvertently introduced when deciding what numbers are equal. rule 1) +14155551212 == 4155551212 rule 2) 14155551212 != 4155551212 implicitly a third rule was in effect.... rule 3) +14155551212 == 14155551212 By transitive equality, then all version of the number are equal which broke rule 2. This could be seen in the UI when all 3 version of the number exists and they are all collapsed into 1. Bug: 8621998 Bug: 7519057 Change-Id: Iafb36fbdc72f9a76d9313811894b57aafebb4f35
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/contacts/common/MoreContactUtilsTest.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/tests/src/com/android/contacts/common/MoreContactUtilsTest.java b/tests/src/com/android/contacts/common/MoreContactUtilsTest.java
new file mode 100644
index 00000000..8d74455d
--- /dev/null
+++ b/tests/src/com/android/contacts/common/MoreContactUtilsTest.java
@@ -0,0 +1,176 @@
+package com.android.contacts.common;
+
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for MoreContactsUtils.
+ */
+@SmallTest
+public class MoreContactUtilsTest extends TestCase {
+
+ public void testShouldCollapse() throws Exception {
+ assertCollapses("1", true, null, null, null, null);
+ assertCollapses("2", true, "a", "b", "a", "b");
+
+ assertCollapses("11", false, "a", null, null, null);
+ assertCollapses("12", false, null, "a", null, null);
+ assertCollapses("13", false, null, null, "a", null);
+ assertCollapses("14", false, null, null, null, "a");
+
+ assertCollapses("21", false, "a", "b", null, null);
+ assertCollapses("22", false, "a", "b", "a", null);
+ assertCollapses("23", false, "a", "b", null, "b");
+ assertCollapses("24", false, "a", "b", "a", "x");
+ assertCollapses("25", false, "a", "b", "x", "b");
+
+ assertCollapses("31", false, null, null, "a", "b");
+ assertCollapses("32", false, "a", null, "a", "b");
+ assertCollapses("33", false, null, "b", "a", "b");
+ assertCollapses("34", false, "a", "x", "a", "b");
+ assertCollapses("35", false, "x", "b", "a", "b");
+
+ assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, null);
+ assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
+
+ assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "2");
+ assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, null);
+ assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, "2");
+
+ // Test phone numbers
+ assertCollapses("60", true, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+ "1234567");
+ assertCollapses("61", false, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+ "1234568");
+ assertCollapses("62", true, Phone.CONTENT_ITEM_TYPE, "1234567;0", Phone.CONTENT_ITEM_TYPE,
+ "1234567;0");
+ assertCollapses("63", false, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;89322");
+ assertCollapses("64", true, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;89321");
+ assertCollapses("65", false, Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
+ Phone.CONTENT_ITEM_TYPE, "1234567;");
+ assertCollapses("66", false, Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426");
+ assertCollapses("67", false, Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
+ assertCollapses("68", true, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
+ assertCollapses("69", false, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
+
+ // test some numbers with country and area code
+ assertCollapses("70", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
+ assertCollapses("71", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
+ assertCollapses("72", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
+ assertCollapses("73", false, Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234");
+ assertCollapses("74", false, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
+
+ // test special handling of collapsing country code for NANP region only
+ // This is non symmetrical, because we prefer the number with the +1.
+ assertEquals("100", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("101", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+ assertEquals("102", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "(415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+ assertEquals("103", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "4155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+ // Require explicit +1 country code declaration to collapse
+ assertEquals("104", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "415-555-1212"));
+ assertEquals("105", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+ assertEquals("106", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, " 1 (415) 555-1212"));
+ assertEquals("107", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+14155551212", Phone.CONTENT_ITEM_TYPE, " 14155551212"));
+ assertEquals("108", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+ assertEquals("109", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+
+ // test some numbers with wait symbol and area code
+ assertCollapses("200", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+ assertCollapses("201", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
+ assertCollapses("202", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+ assertCollapses("203", true, Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
+
+ assertCollapses("300", true, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "");
+
+ assertCollapses("301", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "");
+
+ assertCollapses("302", false, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "1");
+
+ assertCollapses("303", true, Phone.CONTENT_ITEM_TYPE, "---", Phone.CONTENT_ITEM_TYPE, "---");
+
+ assertCollapses("304", false, Phone.CONTENT_ITEM_TYPE, "1-/().", Phone.CONTENT_ITEM_TYPE,
+ "--$%1");
+
+ // Test numbers using keypad letters. This is non-symmetrical, because we prefer
+ // the version with letters.
+ assertEquals("400", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "abcdefghijklmnopqrstuvwxyz", Phone.CONTENT_ITEM_TYPE,
+ "22233344455566677778889999"));
+ assertEquals("401", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "22233344455566677778889999", Phone.CONTENT_ITEM_TYPE,
+ "abcdefghijklmnopqrstuvwxyz"));
+
+ assertCollapses("402", false, Phone.CONTENT_ITEM_TYPE, "1;2", Phone.CONTENT_ITEM_TYPE,
+ "12");
+
+ assertCollapses("403", false, Phone.CONTENT_ITEM_TYPE, "1,2", Phone.CONTENT_ITEM_TYPE,
+ "12");
+ }
+
+ public void testShouldCollapse_collapsesSameNumberWithDifferentFormats() {
+ assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "555-1212", Phone.CONTENT_ITEM_TYPE, "5551212"));
+ assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "415-555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("2", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "4155551212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("3", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+ assertEquals("4", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+ }
+
+ private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
+ CharSequence data1, CharSequence mimetype2, CharSequence data2) {
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1, mimetype2,
+ data2));
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2, mimetype1,
+ data1));
+
+ // If data1 and data2 are the same instance, make sure the same test passes with different
+ // instances.
+ if (data1 == data2 && data1 != null) {
+ // Create a different instance
+ final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
+
+ if (data1 == data2_newref) {
+ // In some cases no matter what we do the runtime reuses the same instance, so
+ // we can't do the "different instance" test.
+ return;
+ }
+
+ // we have two different instances, now make sure we get the same result as before
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1,
+ mimetype2, data2_newref));
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2_newref,
+ mimetype1, data1));
+ }
+ }
+}