package com.example.contentprovidersample.test;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.ProviderTestCase2;
import com.example.contentprovidersample.MyContentProvider;
public class MyContentProviderTest extends ProviderTestCase2<MyContentProvider> {
private static final String TEST_VALUE_COMMENT = "Testing";
private static final String CONTENT_EQ_TESTING = "content = '" + TEST_VALUE_COMMENT + "'";
private static final String[] contentColumns = {"content"};
final static ContentValues values = new ContentValues();
public MyContentProviderTest() {
super(MyContentProvider.class, MyContentProvider.AUTHORITY);
}
public void testGetTypeSingle() {
Uri uriItemSingle = Uri.withAppendedPath(MyContentProvider.CONTENT_URI, "items/5");
ContentProvider cp = getProvider();
assertEquals("cp getType single",
ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + MyContentProvider.MIME_VND_TYPE,
cp.getType(uriItemSingle));
}
public void testGetTypeMulti() {
Uri uriItems = MyContentProvider.ITEMS_URI;
ContentProvider cp = getProvider();
assertEquals("cp getType multi",
ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + MyContentProvider.MIME_VND_TYPE,
cp.getType(uriItems));
}
public void testGetTypeInvalid() {
Uri einval = Uri.parse("geo:49.0000,49.000");
ContentProvider cp = getProvider();
try {
cp.getType(einval);
fail("Did not get expected RuntimeException");
} catch (RuntimeException expected) {
// empty
}
}
public void testInsertAndQuery() {
values.clear();
values.put("content", "Testing");
ContentProvider cp = getProvider();
long id = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("created OK", id > -1);
long id2 = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("id's increment", id2 > id);
final Cursor queryResults = cp.query(MyContentProvider.ITEMS_URI, contentColumns, CONTENT_EQ_TESTING, null, null);
assertEquals(2, queryResults.getCount());
}
public void testUpdateSingleViaUri() {
values.clear();
values.put("content", "Testing");
ContentProvider cp = getProvider();
long id = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("row for update test created OK", id > -1);
values.put("content", "Not testing!");
Uri updateUri = ContentUris.withAppendedId(MyContentProvider.ITEMS_URI, id);
int rc = cp.update(updateUri, values, null, null);
assertEquals("update count", 1, rc);
}
public void testUpdateMultipleWithWhere() {
values.clear();
values.put("content", "Testing");
ContentProvider cp = getProvider();
long id = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("row for update test created OK", id > -1);
values.put("content", "Not testing!");
Uri updateUri = MyContentProvider.ITEMS_URI;
int rc = cp.update(updateUri, values, CONTENT_EQ_TESTING, null);
assertEquals("update count", 1, rc);
}
/** This test has a dependency on the Sample Content Provider's createDB logic,
* "knowing" that it pre-creates three rows.
*/
public void testUpdateMultipleWithoutWhere() {
values.clear();
ContentProvider cp = getProvider();
values.put("content", "Not testing!");
Uri updateUri = MyContentProvider.ITEMS_URI;
int rc = cp.update(updateUri, values, null, null);
assertEquals("update count", 3, rc);
Cursor c = cp.query(MyContentProvider.ITEMS_URI, contentColumns, "content = 'Not testing!'", null, null);
assertEquals("Query the updated rows", 3, c.getCount());
}
public void testDeleteById() {
values.clear();
values.put("content", "Testing");
ContentProvider cp = getProvider();
long id = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("created OK", id > -1);
final int deleted = cp.delete(ContentUris.withAppendedId(MyContentProvider.ITEMS_URI, id), null, null);
assertEquals("deleted rows", 1, deleted);
}
public void testDeleteByWhere() {
values.clear();
values.put("content", "Testing");
ContentProvider cp = getProvider();
long id = ContentUris.parseId(cp.insert(MyContentProvider.ITEMS_URI, values));
assertTrue("created OK", id > -1);
final int deleted = cp.delete(MyContentProvider.ITEMS_URI, CONTENT_EQ_TESTING, null);
assertEquals("deleted rows", 1, deleted);
}
}