blob: 563dc477a130a00e536676f04329cb9561200b49 [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
@RunWith(WithTestDefaultsRunner.class)
public class SQLiteOpenHelperTest {
private TestOpenHelper helper;
@Before
public void setUp() throws Exception {
helper = new TestOpenHelper(null, "path", null, 1);
}
@Test
public void testInitialGetReadableDatabase() throws Exception {
SQLiteDatabase database = helper.getReadableDatabase();
assertInitialDB(database);
}
@Test
public void testSubsequentGetReadableDatabase() throws Exception {
SQLiteDatabase database = helper.getReadableDatabase();
helper.reset();
database = helper.getReadableDatabase();
assertSubsequentDB(database);
}
@Test
public void testSameDBInstanceSubsequentGetReadableDatabase() throws Exception {
SQLiteDatabase db1 = helper.getReadableDatabase();
SQLiteDatabase db2 = helper.getReadableDatabase();
assertThat(db1, sameInstance(db2));
}
@Test
public void testInitialGetWritableDatabase() throws Exception {
SQLiteDatabase database = helper.getWritableDatabase();
assertInitialDB(database);
}
@Test
public void testSubsequentGetWritableDatabase() throws Exception {
helper.getWritableDatabase();
helper.reset();
assertSubsequentDB(helper.getWritableDatabase());
}
@Test
public void testSameDBInstanceSubsequentGetWritableDatabase() throws Exception {
SQLiteDatabase db1 = helper.getWritableDatabase();
SQLiteDatabase db2 = helper.getWritableDatabase();
assertThat(db1, sameInstance(db2));
}
@Test
public void testClose() throws Exception {
SQLiteDatabase database = helper.getWritableDatabase();
assertThat(database.isOpen(), equalTo(true));
helper.close();
assertThat(database.isOpen(), equalTo(false));
}
private void assertInitialDB(SQLiteDatabase database) {
assertDatabaseOpened(database);
assertThat(helper.onCreateCalled, equalTo(true));
}
private void assertSubsequentDB(SQLiteDatabase database) {
assertDatabaseOpened(database);
assertThat(helper.onCreateCalled, equalTo(false));
}
private void assertDatabaseOpened(SQLiteDatabase database) {
assertThat(database, notNullValue());
assertThat(database.isOpen(), equalTo(true));
assertThat(helper.onOpenCalled, equalTo(true));
assertThat(helper.onUpgradeCalled, equalTo(false));
}
private class TestOpenHelper extends SQLiteOpenHelper {
public boolean onCreateCalled;
public boolean onUpgradeCalled;
public boolean onOpenCalled;
public TestOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
reset();
}
@Override
public void onCreate(SQLiteDatabase database) {
onCreateCalled = true;
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
onUpgradeCalled = true;
}
@Override
public void onOpen(SQLiteDatabase database) {
onOpenCalled = true;
}
public void reset() {
onCreateCalled = false;
onUpgradeCalled = false;
onOpenCalled = false;
}
}
}