summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDmitri Plotnikov <dplotnikov@google.com>2010-08-13 12:25:44 -0700
committerDmitri Plotnikov <dplotnikov@google.com>2010-08-13 12:25:44 -0700
commit892a3d9ded5c64a63ae3d5d5c52c59528b466c93 (patch)
tree119d87d97aea90b49fb5e66af264f9435af174dd /tests
parent8727a729d5c0e875538025f0a85b3ac64c3a7745 (diff)
downloadpackages_providers_ContactsProvider-892a3d9ded5c64a63ae3d5d5c52c59528b466c93.zip
packages_providers_ContactsProvider-892a3d9ded5c64a63ae3d5d5c52c59528b466c93.tar.gz
packages_providers_ContactsProvider-892a3d9ded5c64a63ae3d5d5c52c59528b466c93.tar.bz2
Improved the phone lookup and the phone filter
a. Altered the phone_lookup table to allow the rows with the same data_id. b. Added E164 and normalized number for a phone number if it is applicable. c. Improve the phone lookup by using the build in SQLite function. d. Improve the phone filter by using 'Like filterparam%' Change-Id: I1b23d0a10e46ef26467fb72528a7999d23e36c5e
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java56
-rw-r--r--tests/src/com/android/providers/contacts/ContactsProvider2Test.java79
-rw-r--r--tests/src/com/android/providers/contacts/LegacyContactsProviderTest.java33
-rw-r--r--tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java12
4 files changed, 158 insertions, 22 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
index 3f672e4..944e853 100644
--- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
@@ -732,6 +732,10 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
assertStoredValues(rowUri, null, null, expectedValues);
}
+ protected void assertStoredValues(Uri rowUri, ContentValues[] expectedValues) {
+ assertStoredValues(rowUri, null, null, expectedValues);
+ }
+
protected void assertStoredValues(Uri rowUri, String selection, String[] selectionArgs,
ContentValues expectedValues) {
Cursor c = mResolver.query(rowUri, null, selection, selectionArgs, null);
@@ -755,6 +759,17 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
}
}
+ protected void assertStoredValues(
+ Uri rowUri, String selection, String[] selectionArgs, ContentValues[] expectedValues) {
+ Cursor c = mResolver.query(rowUri, null, selection, selectionArgs, null);
+ try {
+ assertEquals("Record count", expectedValues.length, c.getCount());
+ assertCursorValues(c, expectedValues);
+ } finally {
+ c.close();
+ }
+ }
+
/**
* Constructs a selection (where clause) out of all supplied values, uses it
* to query the provider and verifies that a single row is returned and it
@@ -804,11 +819,36 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
}
protected void assertCursorValues(Cursor cursor, ContentValues expectedValues) {
+ StringBuilder message = new StringBuilder();
+ boolean result = equalsWithExpectedValues(cursor, expectedValues, message);
+ assertTrue(message.toString(), result);
+ }
+
+ protected void assertCursorValues(Cursor cursor, ContentValues[] expectedValues) {
+ StringBuilder message = new StringBuilder();
+ for (ContentValues v : expectedValues) {
+ boolean found = false;
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ found = equalsWithExpectedValues(cursor, v, message);
+ if (found) {
+ break;
+ }
+ }
+ assertTrue("Expected values can not be found " + v + message.toString(), found);
+ }
+ }
+
+ private boolean equalsWithExpectedValues(Cursor cursor, ContentValues expectedValues,
+ StringBuilder msgBuffer) {
Set<Map.Entry<String, Object>> entries = expectedValues.valueSet();
for (Map.Entry<String, Object> entry : entries) {
String column = entry.getKey();
int index = cursor.getColumnIndex(column);
- assertTrue("No such column: " + column, index != -1);
+ if (index == -1) {
+ msgBuffer.append("No such column: ").append(column);
+ return false;
+ }
Object expectedValue = expectedValues.get(column);
String value;
if (expectedValue instanceof byte[]) {
@@ -818,8 +858,20 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
expectedValue = expectedValues.getAsString(column);
value = cursor.getString(index);
}
- assertEquals("Column value " + column, expectedValue, value);
+ if (expectedValue != null && !expectedValue.equals(value) || value != null
+ && !value.equals(expectedValue)) {
+ msgBuffer
+ .append("Column value ")
+ .append(column)
+ .append(" expected <")
+ .append(expectedValue)
+ .append(">, but was <")
+ .append(value)
+ .append('>');
+ return false;
+ }
}
+ return true;
}
private String[] buildProjection(ContentValues values) {
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index db1edf0..8882869 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -891,16 +891,77 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test {
values.put(PhoneLookup.SEND_TO_VOICEMAIL, 1);
assertStoredValues(lookupUri1, values);
- // The strict comparation, adopted in Donut, does not allow the behavior like
- // "8004664411 == 4664411", while the loose comparation, which had been used in Cupcake
- // and reverted back into the default in Eclair, allows it. Hmm...
- final boolean useStrictComparation =
- mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_use_strict_phone_number_comparation);
- final int expectedResult = (useStrictComparation ? 0 : 1);
-
+ // In the context that 8004664411 is a valid number, "4664411" as a
+ // call id should not match to "8004664411"
Uri lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "4664411");
- assertEquals(expectedResult, getCount(lookupUri2, null, null));
+ assertEquals(0, getCount(lookupUri2, null, null));
+ }
+
+ public void testPhoneLookupUseCases() {
+ ContentValues values = new ContentValues();
+ Uri rawContactUri;
+ long rawContactId;
+ Uri lookupUri2;
+
+ values.put(RawContacts.CUSTOM_RINGTONE, "d");
+ values.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+ // International format in contacts
+ rawContactUri = mResolver.insert(RawContacts.CONTENT_URI, values);
+ rawContactId = ContentUris.parseId(rawContactUri);
+
+ insertStructuredName(rawContactId, "Hot", "Tamale");
+ insertPhoneNumber(rawContactId, "+1-650-861-0000");
+
+ values.clear();
+
+ // match with international format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "+1 650 861 0000");
+ assertEquals(1, getCount(lookupUri2, null, null));
+
+ // match with national format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "650 861 0000");
+ assertEquals(1, getCount(lookupUri2, null, null));
+
+ // National format in contacts
+ values.clear();
+ values.put(RawContacts.CUSTOM_RINGTONE, "d");
+ values.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+ rawContactUri = mResolver.insert(RawContacts.CONTENT_URI, values);
+ rawContactId = ContentUris.parseId(rawContactUri);
+
+ insertStructuredName(rawContactId, "Hot1", "Tamale");
+ insertPhoneNumber(rawContactId, "650-861-0001");
+
+ values.clear();
+
+ // match with international format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "+1 650 861 0001");
+ assertEquals(2, getCount(lookupUri2, null, null));
+
+ // match with national format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "650 861 0001");
+ assertEquals(2, getCount(lookupUri2, null, null));
+
+ // Local format in contacts
+ values.clear();
+ values.put(RawContacts.CUSTOM_RINGTONE, "d");
+ values.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+ rawContactUri = mResolver.insert(RawContacts.CONTENT_URI, values);
+ rawContactId = ContentUris.parseId(rawContactUri);
+
+ insertStructuredName(rawContactId, "Hot2", "Tamale");
+ insertPhoneNumber(rawContactId, "861-0002");
+
+ values.clear();
+
+ // match with international format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "+1 650 861 0002");
+ assertEquals(1, getCount(lookupUri2, null, null));
+
+ // match with national format
+ lookupUri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "650 861 0002");
+ assertEquals(1, getCount(lookupUri2, null, null));
}
public void testPhoneUpdate() {
diff --git a/tests/src/com/android/providers/contacts/LegacyContactsProviderTest.java b/tests/src/com/android/providers/contacts/LegacyContactsProviderTest.java
index 85ed6a7..d2e4365 100644
--- a/tests/src/com/android/providers/contacts/LegacyContactsProviderTest.java
+++ b/tests/src/com/android/providers/contacts/LegacyContactsProviderTest.java
@@ -392,19 +392,22 @@ public class LegacyContactsProviderTest extends BaseContactsProvider2Test {
values.put(Phones.ISPRIMARY, 1);
Uri uri = mResolver.insert(Phones.CONTENT_URI, values);
-
+ ContentValues expectedResults[] = new ContentValues[2];
// Adding another value to assert
- values.put(Phones.NUMBER_KEY, "11446640081");
-
+ expectedResults[0] = new ContentValues(values);
+ expectedResults[0].put(Phones.NUMBER_KEY, "+18004664411");
+ expectedResults[1] = values;
+ expectedResults[1].put(Phones.NUMBER_KEY, "18004664411");
// The result is joined with People
- putContactValues(values);
- assertStoredValues(uri, values);
+ putContactValues(expectedResults[0]);
+ putContactValues(expectedResults[1]);
+ assertStoredValues(uri, expectedResults);
assertSelection(Phones.CONTENT_URI, values, "phones",
Phones._ID, ContentUris.parseId(uri));
// Access the phone through People
Uri twigUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY);
- assertStoredValues(twigUri, values);
+ assertStoredValues(twigUri, expectedResults);
// Now the person should be joined with Phone
values.clear();
@@ -443,7 +446,12 @@ public class LegacyContactsProviderTest extends BaseContactsProvider2Test {
mResolver.update(uri, values, null, null);
- assertStoredValues(uri, values);
+ ContentValues[] expectedValues = new ContentValues[2];
+ expectedValues[0] = values;
+ expectedValues[0].put(Phones.NUMBER_KEY, "18005554663");
+ expectedValues[1] = new ContentValues(values);
+ expectedValues[1].put(Phones.NUMBER_KEY, "+18005554663");
+ assertStoredValues(uri, expectedValues);
}
public void testPhonesFilterQuery() {
@@ -456,13 +464,18 @@ public class LegacyContactsProviderTest extends BaseContactsProvider2Test {
values.put(Phones.PERSON_ID, personId);
values.put(Phones.TYPE, Phones.TYPE_CUSTOM);
values.put(Phones.LABEL, "Directory");
- values.put(Phones.NUMBER, "1-800-4664-411");
+ values.put(Phones.NUMBER, "800-4664-411");
values.put(Phones.ISPRIMARY, 1);
Uri uri = mResolver.insert(Phones.CONTENT_URI, values);
- Uri filterUri1 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, "8004664411");
- assertStoredValues(filterUri1, values);
+ Uri filterUri1 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, "18004664411");
+ ContentValues[] expectedValues = new ContentValues[2];
+ expectedValues[0] = values;
+ expectedValues[0].put(Phones.NUMBER_KEY, "8004664411");
+ expectedValues[1] = new ContentValues(values);
+ expectedValues[1].put(Phones.NUMBER_KEY, "+18004664411");
+ assertStoredValues(filterUri1, expectedValues);
Uri filterUri2 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, "7773334444");
assertEquals(0, getCount(filterUri2, null, null));
diff --git a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
index ba8b7f8..a280bb2 100644
--- a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
+++ b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
@@ -38,7 +38,12 @@ public class SynchronousContactsProvider2 extends ContactsProvider2 {
@Override
protected ContactsDatabaseHelper getDatabaseHelper(final Context context) {
if (mDbHelper == null) {
- mDbHelper = new ContactsDatabaseHelper(context);
+ mDbHelper = new ContactsDatabaseHelper(context) {
+ @Override
+ protected String getCountryIso() {
+ return "US";
+ }
+ };
}
return mDbHelper;
}
@@ -166,4 +171,9 @@ public class SynchronousContactsProvider2 extends ContactsProvider2 {
// We have an explicit test for data conversion - no need to do it every time
return false;
}
+
+ @Override
+ protected String getCurrentCountryIso() {
+ return "us";
+ }
}