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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user