diff options
Diffstat (limited to 'tests')
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"; + } } |