Adding convenience methods to MockContentProvider

Change-Id: Ifbf5387c0472dfc1a9ce32bf9f4c0104457a9bcb
diff --git a/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java b/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
index 3095d69..0f893fe 100644
--- a/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
+++ b/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
@@ -17,7 +17,6 @@
 
 import android.content.ComponentName;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.test.mock.MockPackageManager;
diff --git a/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java b/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
index 14d563c..3acb52d 100644
--- a/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
+++ b/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
@@ -44,6 +44,9 @@
         private String[] mSelectionArgs;
         private String mSortOrder;
         private ArrayList<Object[]> mRows = new ArrayList<Object[]>();
+        private boolean mAnyProjection;
+        private boolean mAnySelection;
+        private boolean mAnySortOrder;
 
         public Query(Uri uri) {
             mUri = uri;
@@ -64,41 +67,61 @@
             return this;
         }
 
+        public Query withAnyProjection() {
+            mAnyProjection = true;
+            return this;
+        }
+
         public Query withSelection(String selection, String... selectionArgs) {
             mSelection = selection;
             mSelectionArgs = selectionArgs;
             return this;
         }
 
+        public Query withAnySelection() {
+            mAnySelection = true;
+            return this;
+        }
+
         public Query withSortOrder(String sortOrder) {
             mSortOrder = sortOrder;
             return this;
         }
 
+        public Query withAnySortOrder() {
+            mAnySortOrder = true;
+            return this;
+        }
+
         public Query returnRow(Object... row) {
             mRows.add(row);
             return this;
         }
 
+        public Query returnEmptyCursor() {
+            mRows.clear();
+            return this;
+        }
+
         public boolean equals(Uri uri, String[] projection, String selection,
                 String[] selectionArgs, String sortOrder) {
             if (!uri.equals(mUri)) {
                 return false;
             }
 
-            if (!equals(projection, mProjection)) {
+            if (!mAnyProjection && !equals(projection, mProjection)) {
                 return false;
             }
 
-            if (!TextUtils.equals(selection, mSelection)) {
+            if (!mAnySelection && !TextUtils.equals(selection, mSelection)) {
                 return false;
             }
 
-            if (!equals(selectionArgs, mSelectionArgs)) {
+            if (!mAnySelection && !equals(selectionArgs, mSelectionArgs)) {
                 return false;
             }
 
-            if (!TextUtils.equals(sortOrder, mSortOrder)) {
+            if (!mAnySortOrder && !TextUtils.equals(sortOrder, mSortOrder)) {
                 return false;
             }
 
@@ -126,7 +149,21 @@
         }
 
         public Cursor getResult() {
-            String[] columnNames = mProjection != null ? mProjection : mDefaultProjection;
+            String[] columnNames;
+            if (mAnyProjection) {
+                if (mRows.size() > 0) {
+                    int columnCount = mRows.get(0).length;
+                    columnNames = new String[columnCount];
+                    for (int i = 0; i < columnNames.length; i++) {
+                        columnNames[i] = "column" + (i+1);
+                    }
+                } else {
+                    columnNames = new String[]{"unspecified"};
+                }
+            } else {
+                columnNames = mProjection != null ? mProjection : mDefaultProjection;
+            }
+
             MatrixCursor cursor = new MatrixCursor(columnNames);
             for (Object[] row : mRows) {
                 cursor.addRow(row);