package droidkit.sqlite; import android.content.ContentValues; import android.test.ProviderTestCase2; import junit.framework.Assert; import droidkit.sqlite.mock.User; import droidkit.test.BuildConfig; /** * @author Daniel Serdyukov */ public class SQLiteQueryTest extends ProviderTestCase2<SQLiteProvider> { private SQLite mSQLite; public SQLiteQueryTest() { super(SQLiteProvider.class, BuildConfig.APPLICATION_ID); SQLite.attach(BuildConfig.APPLICATION_ID); } @Override public void setUp() throws Exception { super.setUp(); mSQLite = SQLite.with(getMockContext()); final ContentValues values = new ContentValues(); for (int i = 1; i <= 10; ++i) { values.put(User.Columns.NAME, i % 2 == 0 ? "Jane" : "John"); values.put(User.Columns.AGE, 20 + i); values.put(User.Columns.BALANCE, 9.99 + i); values.put(User.Columns.BLOCKED, i % 2 == 0); getMockContentResolver().insert(User.URI, values); values.clear(); } } public void testQueryAll() throws Exception { Assert.assertEquals(10, mSQLite.all(User.class).size()); } public void testOrderBy() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class).orderBy(User.Columns.AGE, false).all(); for (int i = 0; i < 10; ++i) { Assert.assertEquals(30 - i, users.get(i).getAge()); } } public void testLimit() throws Exception { Assert.assertEquals(5, mSQLite.where(User.class).limit(5).all().size()); } public void testEqualTo() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .equalTo(User.Columns.NAME, "John") .all(); for (final User user : users) { Assert.assertEquals("John", user.getName()); } } public void testNotEqualTo() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .notEqualTo(User.Columns.NAME, "John") .all(); Assert.assertFalse(users.isEmpty()); for (final User user : users) { Assert.assertEquals("Jane", user.getName()); } } public void testWhereAnd() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .equalTo(User.Columns.NAME, "Jane") .and() .equalTo(User.Columns.AGE, 22) .all(); Assert.assertFalse(users.isEmpty()); for (final User user : users) { Assert.assertEquals("Jane", user.getName()); Assert.assertEquals(22, user.getAge()); } } public void testWhereOr() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .equalTo(User.Columns.NAME, "Jane") .or() .equalTo(User.Columns.AGE, 23) .all(); Assert.assertEquals(6, users.size()); } public void testLessThan() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .lessThan(User.Columns.AGE, 25) .all(); Assert.assertEquals(4, users.size()); } public void testLessThanOrEqualTo() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .lessThanOrEqualTo(User.Columns.AGE, 25) .all(); Assert.assertEquals(5, users.size()); } public void testGreaterThan() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .greaterThan(User.Columns.AGE, 25) .all(); Assert.assertEquals(5, users.size()); } public void testGreaterThanOrEqualTo() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .greaterThanOrEqualTo(User.Columns.AGE, 25) .all(); Assert.assertEquals(6, users.size()); } @Override public void tearDown() throws Exception { getMockContentResolver().delete(User.URI, null, null); super.tearDown(); } public void testMaxInt() throws Exception { Assert.assertEquals(24, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .maxInt(User.Columns.AGE)); } public void testMaxLong() throws Exception { Assert.assertEquals(24L, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .maxLong(User.Columns.AGE)); } public void testMaxDouble() throws Exception { Assert.assertEquals(13.99, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .maxDouble(User.Columns.BALANCE)); } public void testMinInt() throws Exception { Assert.assertEquals(26, mSQLite.where(User.class).greaterThan(User.Columns.AGE, 25) .minInt(User.Columns.AGE)); } public void testMinLong() throws Exception { Assert.assertEquals(26L, mSQLite.where(User.class).greaterThan(User.Columns.AGE, 25) .minLong(User.Columns.AGE)); } public void testMinDouble() throws Exception { Assert.assertEquals(15.99, mSQLite.where(User.class).greaterThan(User.Columns.AGE, 25) .minDouble(User.Columns.BALANCE)); } public void testSumInt() throws Exception { Assert.assertEquals(21 + 22 + 23 + 24, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .sumInt(User.Columns.AGE)); } public void testSumLong() throws Exception { Assert.assertEquals(21L + 22L + 23L + 24L, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .sumLong(User.Columns.AGE)); } public void testSumDouble() throws Exception { Assert.assertEquals(10.99 + 11.99 + 12.99 + 13.99, mSQLite.where(User.class).lessThan(User.Columns.AGE, 25) .sumDouble(User.Columns.BALANCE)); } public void testBetween() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class).between(User.Columns.AGE, 24, 26).all(); final int age[] = new int[]{24, 25, 26}; Assert.assertEquals(age.length, users.size()); for (int i = 0; i < age.length; ++i) { Assert.assertEquals(age[i], users.get(i).getAge()); } } public void testLike() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .like(User.Columns.NAME, "Jo%") .all(); Assert.assertEquals(5, users.size()); for (final User user : users) { Assert.assertEquals("John", user.getName()); } } public void testInSelect() throws Exception { final SQLiteResult<User> users = mSQLite.where(User.class) .inSelect(User.Columns._ID, "SELECT _id FROM users WHERE name = 'John'") .all(); Assert.assertEquals(5, users.size()); final long[] rowIds = {1, 3, 5, 7, 9}; for (int i = 0; i < rowIds.length; ++i) { Assert.assertEquals(rowIds[i], users.get(i).getId()); } } public void testCount() throws Exception { final long count = mSQLite.where(User.class) .equalTo(User.Columns.NAME, "John") .count(User.Columns.NAME); Assert.assertEquals(5, count); } public void testCountDistinct() throws Exception { final long count = mSQLite.where(User.class).countDistinct(User.Columns.NAME); Assert.assertEquals(2, count); } public void testRemove() throws Exception { final int removed = mSQLite.where(User.class) .equalTo(User.Columns.NAME, "Jane") .remove(); Assert.assertEquals(5, removed); final SQLiteResult<User> users = mSQLite.all(User.class); for (final User user : users) { Assert.assertEquals("John", user.getName()); } } }