summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaisuke Miyakawa <dmiyakawa@google.com>2011-04-05 09:52:44 -0700
committerDaisuke Miyakawa <dmiyakawa@google.com>2011-04-06 20:19:13 -0700
commit7d82ae92714f2132e3a0971d844ae8cdf10d76e7 (patch)
tree273d54b77efec75ff660d47ad1d041abfcf21ecb /tests
parent108f1be6b0e855f1b335bc591755a9e5f488175a (diff)
downloadpackages_providers_ContactsProvider-7d82ae92714f2132e3a0971d844ae8cdf10d76e7.zip
packages_providers_ContactsProvider-7d82ae92714f2132e3a0971d844ae8cdf10d76e7.tar.gz
packages_providers_ContactsProvider-7d82ae92714f2132e3a0971d844ae8cdf10d76e7.tar.bz2
Add "primary account" support.
Two query params "PRIMARY_ACCOUNT_NAME" and "PRIMARY_ACCOUNT_TYPE" allow users to supply a primary account associated with the query, which enables contacts provider to optimize query results. For example, in an email composition screen, users may want to promote email addresses related to an account selected as a "from" field. This change allows the client to let the contacts provider know the account. Must be with I2a22be56822226e3ea6b6f2ef23bb77816d0345a Bug: 3510087 Change-Id: Ibce363d336cb3e3a1fca10bddbd912ec96e4b059
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java25
-rw-r--r--tests/src/com/android/providers/contacts/ContactsProvider2Test.java41
2 files changed, 65 insertions, 1 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
index a62f9c5..ff94314 100644
--- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java
@@ -829,6 +829,21 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
}
}
+ protected void assertStoredValuesOrderly(Uri rowUri, ContentValues[] expectedValues) {
+ assertStoredValuesOrderly(rowUri, null, null, expectedValues);
+ }
+
+ protected void assertStoredValuesOrderly(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());
+ assertCursorValuesOrderly(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
@@ -904,6 +919,16 @@ public abstract class BaseContactsProvider2Test extends AndroidTestCase {
}
}
+ protected void assertCursorValuesOrderly(Cursor cursor, ContentValues[] expectedValues) {
+ StringBuilder message = new StringBuilder();
+ cursor.moveToPosition(-1);
+ for (ContentValues v : expectedValues) {
+ assertTrue(cursor.moveToNext());
+ assertTrue("ContentValues didn't match " + v + message.toString(),
+ equalsWithExpectedValues(cursor, v, message));
+ }
+ }
+
private boolean equalsWithExpectedValues(Cursor cursor, ContentValues expectedValues,
StringBuilder msgBuffer) {
Set<Map.Entry<String, Object>> entries = expectedValues.valueSet();
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index 16b8a00..ef94e61 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -16,10 +16,11 @@
package com.android.providers.contacts;
+import com.google.android.collect.Lists;
+
import com.android.internal.util.ArrayUtils;
import com.android.providers.contacts.ContactsDatabaseHelper.AggregationExceptionColumns;
import com.android.providers.contacts.ContactsDatabaseHelper.PresenceColumns;
-import com.google.android.collect.Lists;
import android.accounts.Account;
import android.content.ContentProviderOperation;
@@ -1187,6 +1188,44 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test {
insertEmail(rawContactId, "findme" + name + "@acme.com");
}
+ /**
+ * Tests if ContactsProvider2 has email address associated with a primary account before the
+ * other address.
+ */
+ public void testEmailFilterPrimaryAccount() {
+ long rawContactId1 = createRawContact(ACCOUNT_1);
+ insertEmail(rawContactId1, "account1@email.com");
+ long rawContactId2 = createRawContact(ACCOUNT_2);
+ insertEmail(rawContactId2, "account2@email.com");
+ ContentValues v1 = new ContentValues();
+ v1.put(Email.ADDRESS, "account1@email.com");
+ ContentValues v2 = new ContentValues();
+ v2.put(Email.ADDRESS, "account2@email.com");
+
+ Uri filterUri1 = Email.CONTENT_FILTER_URI.buildUpon().appendPath("acc")
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_NAME, ACCOUNT_1.name)
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_TYPE, ACCOUNT_1.type)
+ .build();
+ assertStoredValuesOrderly(filterUri1, new ContentValues[] { v1, v2 });
+
+ Uri filterUri2 = Email.CONTENT_FILTER_URI.buildUpon().appendPath("acc")
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_NAME, ACCOUNT_2.name)
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_TYPE, ACCOUNT_2.type)
+ .build();
+ assertStoredValuesOrderly(filterUri2, new ContentValues[] { v2, v1 });
+
+ // Just with PRIMARY_ACCOUNT_NAME
+ Uri filterUri3 = Email.CONTENT_FILTER_URI.buildUpon().appendPath("acc")
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_NAME, ACCOUNT_1.name)
+ .build();
+ assertStoredValuesOrderly(filterUri3, new ContentValues[] { v1, v2 });
+
+ Uri filterUri4 = Email.CONTENT_FILTER_URI.buildUpon().appendPath("acc")
+ .appendQueryParameter(ContactsContract.PRIMARY_ACCOUNT_NAME, ACCOUNT_2.name)
+ .build();
+ assertStoredValuesOrderly(filterUri4, new ContentValues[] { v2, v1 });
+ }
+
public void testPostalsQuery() {
long rawContactId = createRawContactWithName("Alice", "Nextore");
Uri dataUri = insertPostalAddress(rawContactId, "1600 Amphiteatre Ave, Mountain View");