diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-09-16 18:36:00 -0400 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-09-16 18:36:00 -0400 |
commit | 5f78786cf9802b988a4de3c08555eb43f1e02e04 (patch) | |
tree | 557804d0f2fedceaaebd0dfc7cd99cf5df7614db | |
parent | 44ca7090aca79b8c8e71d34982ae54b69968ad56 (diff) | |
parent | 5ab78057a35dc71b2847920031cd707a7e2c6c64 (diff) | |
download | frameworks_base-5f78786cf9802b988a4de3c08555eb43f1e02e04.zip frameworks_base-5f78786cf9802b988a4de3c08555eb43f1e02e04.tar.gz frameworks_base-5f78786cf9802b988a4de3c08555eb43f1e02e04.tar.bz2 |
Merge change 25190 into eclair
* changes:
add the ability to do a newAssert with no values
-rw-r--r-- | core/java/android/content/ContentProviderOperation.java | 47 | ||||
-rw-r--r-- | tests/FrameworkTest/tests/src/android/content/ContentProviderOperationTest.java | 60 |
2 files changed, 85 insertions, 22 deletions
diff --git a/core/java/android/content/ContentProviderOperation.java b/core/java/android/content/ContentProviderOperation.java index 238792b..60b406d 100644 --- a/core/java/android/content/ContentProviderOperation.java +++ b/core/java/android/content/ContentProviderOperation.java @@ -221,26 +221,30 @@ public class ContentProviderOperation implements Parcelable { } else if (mType == TYPE_UPDATE) { numRows = provider.update(mUri, values, mSelection, selectionArgs); } else if (mType == TYPE_ASSERT) { - // Build projection map from expected values - final ArrayList<String> projectionList = new ArrayList<String>(); - for (Map.Entry<String, Object> entry : values.valueSet()) { - projectionList.add(entry.getKey()); - } - // Assert that all rows match expected values - final String[] projection = projectionList.toArray(new String[projectionList.size()]); + String[] projection = null; + if (values != null) { + // Build projection map from expected values + final ArrayList<String> projectionList = new ArrayList<String>(); + for (Map.Entry<String, Object> entry : values.valueSet()) { + projectionList.add(entry.getKey()); + } + projection = projectionList.toArray(new String[projectionList.size()]); + } final Cursor cursor = provider.query(mUri, projection, mSelection, selectionArgs, null); - numRows = cursor.getCount(); try { - while (cursor.moveToNext()) { - for (int i = 0; i < projection.length; i++) { - final String cursorValue = cursor.getString(i); - final String expectedValue = values.getAsString(projection[i]); - if (!TextUtils.equals(cursorValue, expectedValue)) { - // Throw exception when expected values don't match - throw new OperationApplicationException("Found value " + cursorValue - + " when expected " + expectedValue + " for column " - + projection[i]); + numRows = cursor.getCount(); + if (projection != null) { + while (cursor.moveToNext()) { + for (int i = 0; i < projection.length; i++) { + final String cursorValue = cursor.getString(i); + final String expectedValue = values.getAsString(projection[i]); + if (!TextUtils.equals(cursorValue, expectedValue)) { + // Throw exception when expected values don't match + throw new OperationApplicationException("Found value " + cursorValue + + " when expected " + expectedValue + " for column " + + projection[i]); + } } } } @@ -395,12 +399,19 @@ public class ContentProviderOperation implements Parcelable { /** Create a ContentProviderOperation from this {@link Builder}. */ public ContentProviderOperation build() { - if (mType == TYPE_UPDATE || mType == TYPE_ASSERT) { + if (mType == TYPE_UPDATE) { if ((mValues == null || mValues.size() == 0) && (mValuesBackReferences == null || mValuesBackReferences.size() == 0)) { throw new IllegalArgumentException("Empty values"); } } + if (mType == TYPE_ASSERT) { + if ((mValues == null || mValues.size() == 0) + && (mValuesBackReferences == null || mValuesBackReferences.size() == 0) + && (mExpectedCount == null)) { + throw new IllegalArgumentException("Empty values"); + } + } return new ContentProviderOperation(this); } diff --git a/tests/FrameworkTest/tests/src/android/content/ContentProviderOperationTest.java b/tests/FrameworkTest/tests/src/android/content/ContentProviderOperationTest.java index dc959f5..aea124b 100644 --- a/tests/FrameworkTest/tests/src/android/content/ContentProviderOperationTest.java +++ b/tests/FrameworkTest/tests/src/android/content/ContentProviderOperationTest.java @@ -29,7 +29,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; -import java.util.Hashtable; import java.util.Set; import java.util.Map; import java.util.Map.Entry; @@ -145,7 +144,7 @@ public class ContentProviderOperationTest extends TestCase { public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // Return cursor over specific set of values - return getCursor(sTestValues1); + return getCursor(sTestValues1, 1); } }, null, 0); } catch (OperationApplicationException e) { @@ -153,11 +152,62 @@ public class ContentProviderOperationTest extends TestCase { } } + public void testAssertNoValues() { + // Build an operation to assert values match provider + ContentProviderOperation op1 = ContentProviderOperation.newAssertQuery(sTestUri1) + .withExpectedCount(1).build(); + + try { + // Assert that values match from cursor + ContentProviderResult result = op1.apply(new TestContentProvider() { + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + // Return cursor over specific set of values + return getCursor(sTestValues1, 1); + } + }, null, 0); + } catch (OperationApplicationException e) { + fail("newAssert() failed"); + } + + ContentProviderOperation op2 = ContentProviderOperation.newAssertQuery(sTestUri1) + .withExpectedCount(0).build(); + + try { + // Assert that values match from cursor + ContentProviderResult result = op2.apply(new TestContentProvider() { + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + // Return cursor over specific set of values + return getCursor(sTestValues1, 0); + } + }, null, 0); + } catch (OperationApplicationException e) { + fail("newAssert() failed"); + } + + ContentProviderOperation op3 = ContentProviderOperation.newAssertQuery(sTestUri1) + .withExpectedCount(2).build(); + + try { + // Assert that values match from cursor + ContentProviderResult result = op3.apply(new TestContentProvider() { + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + // Return cursor over specific set of values + return getCursor(sTestValues1, 5); + } + }, null, 0); + fail("we expect the exception to be thrown"); + } catch (OperationApplicationException e) { + } + } + /** * Build a {@link Cursor} with a single row that contains all values * provided through the given {@link ContentValues}. */ - private Cursor getCursor(ContentValues contentValues) { + private Cursor getCursor(ContentValues contentValues, int numRows) { final Set<Entry<String, Object>> valueSet = contentValues.valueSet(); final String[] keys = new String[valueSet.size()]; final Object[] values = new Object[valueSet.size()]; @@ -170,7 +220,9 @@ public class ContentProviderOperationTest extends TestCase { } final MatrixCursor cursor = new MatrixCursor(keys); - cursor.addRow(values); + for (i = 0; i < numRows; i++) { + cursor.addRow(values); + } return cursor; } |