am 5f78786c: Merge change 25190 into eclair

Merge commit '5f78786cf9802b988a4de3c08555eb43f1e02e04' into eclair-plus-aosp

* commit '5f78786cf9802b988a4de3c08555eb43f1e02e04':
  add the ability to do a newAssert with no values
This commit is contained in:
Fred Quintana
2009-09-17 08:41:34 -07:00
committed by Android Git Automerger
2 changed files with 85 additions and 22 deletions

View File

@@ -221,26 +221,30 @@ public class ContentProviderOperation implements Parcelable {
} else if (mType == TYPE_UPDATE) { } else if (mType == TYPE_UPDATE) {
numRows = provider.update(mUri, values, mSelection, selectionArgs); numRows = provider.update(mUri, values, mSelection, selectionArgs);
} else if (mType == TYPE_ASSERT) { } 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 // 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); final Cursor cursor = provider.query(mUri, projection, mSelection, selectionArgs, null);
numRows = cursor.getCount();
try { try {
while (cursor.moveToNext()) { numRows = cursor.getCount();
for (int i = 0; i < projection.length; i++) { if (projection != null) {
final String cursorValue = cursor.getString(i); while (cursor.moveToNext()) {
final String expectedValue = values.getAsString(projection[i]); for (int i = 0; i < projection.length; i++) {
if (!TextUtils.equals(cursorValue, expectedValue)) { final String cursorValue = cursor.getString(i);
// Throw exception when expected values don't match final String expectedValue = values.getAsString(projection[i]);
throw new OperationApplicationException("Found value " + cursorValue if (!TextUtils.equals(cursorValue, expectedValue)) {
+ " when expected " + expectedValue + " for column " // Throw exception when expected values don't match
+ projection[i]); 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}. */ /** Create a ContentProviderOperation from this {@link Builder}. */
public ContentProviderOperation build() { public ContentProviderOperation build() {
if (mType == TYPE_UPDATE || mType == TYPE_ASSERT) { if (mType == TYPE_UPDATE) {
if ((mValues == null || mValues.size() == 0) if ((mValues == null || mValues.size() == 0)
&& (mValuesBackReferences == null || mValuesBackReferences.size() == 0)) { && (mValuesBackReferences == null || mValuesBackReferences.size() == 0)) {
throw new IllegalArgumentException("Empty values"); 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); return new ContentProviderOperation(this);
} }

View File

@@ -29,7 +29,6 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Hashtable;
import java.util.Set; import java.util.Set;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@@ -145,7 +144,7 @@ public class ContentProviderOperationTest extends TestCase {
public Cursor query(Uri uri, String[] projection, String selection, public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) { String[] selectionArgs, String sortOrder) {
// Return cursor over specific set of values // Return cursor over specific set of values
return getCursor(sTestValues1); return getCursor(sTestValues1, 1);
} }
}, null, 0); }, null, 0);
} catch (OperationApplicationException e) { } 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 * Build a {@link Cursor} with a single row that contains all values
* provided through the given {@link ContentValues}. * 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 Set<Entry<String, Object>> valueSet = contentValues.valueSet();
final String[] keys = new String[valueSet.size()]; final String[] keys = new String[valueSet.size()];
final Object[] values = new Object[valueSet.size()]; final Object[] values = new Object[valueSet.size()];
@@ -170,7 +220,9 @@ public class ContentProviderOperationTest extends TestCase {
} }
final MatrixCursor cursor = new MatrixCursor(keys); final MatrixCursor cursor = new MatrixCursor(keys);
cursor.addRow(values); for (i = 0; i < numRows; i++) {
cursor.addRow(values);
}
return cursor; return cursor;
} }