blob: 6c9d541324e8575b483f3182e6ba4492074b7837 [file] [log] [blame]
package com.android.contacts;
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));
}
}
}