blob: 4f31e67946758bed185d4d7ebe4479beb6e6ada1 [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import com.xtremelabs.robolectric.util.DatabaseConfig;
@RunWith(WithTestDefaultsRunner.class)
public class CursorAdapterTest {
private Cursor curs;
private CursorAdapter adapter;
@Before
public void setUp() throws Exception {
Connection connection = DatabaseConfig.getMemoryConnection();
Statement statement = connection.createStatement();
statement.execute("CREATE TABLE table_name(_id INT PRIMARY KEY, name VARCHAR(255));" );
String[] inserts = {
"INSERT INTO table_name (_id, name) VALUES(1234, 'Chuck');",
"INSERT INTO table_name (_id, name) VALUES(1235, 'Julie');",
"INSERT INTO table_name (_id, name) VALUES(1236, 'Chris');",
"INSERT INTO table_name (_id, name) VALUES(1237, 'Brenda');",
"INSERT INTO table_name (_id, name) VALUES(1238, 'Jane');"
};
for (String insert : inserts) {
connection.createStatement().executeUpdate(insert);
}
statement = connection.createStatement(DatabaseConfig.getResultSetType(), ResultSet.CONCUR_READ_ONLY);
String sql = "SELECT * FROM table_name;";
ResultSet resultSet = statement.executeQuery(sql);
curs = new SQLiteCursor(null, null, null, null);
Robolectric.shadowOf((SQLiteCursor)curs).setResultSet(resultSet,sql);
adapter = new TestAdapter(curs);
}
@Test
public void testChangeCursor() {
assertThat(adapter.getCursor(), notNullValue());
assertThat(adapter.getCursor(), sameInstance(curs));
adapter.changeCursor( null );
assertThat(curs.isClosed(), equalTo( true ) );
assertThat(adapter.getCursor(), nullValue() );
}
@Test
public void testCount() {
assertThat(adapter.getCount(), equalTo(curs.getCount()));
adapter.changeCursor( null );
assertThat(adapter.getCount(), equalTo(0) );
}
@Test
public void testGetItemId() {
for ( int i = 0; i < 5; i++ ) {
assertThat(adapter.getItemId(i), equalTo((long) 1234 + i));
}
}
@Test
public void testGetView() {
List<View> views = new ArrayList<View>();
for (int i = 0; i < 5; i++) {
views.add(new View(Robolectric.application));
}
Robolectric.shadowOf(adapter).setViews( views );
for (int i = 0; i < 5; i++) {
assertThat(adapter.getView(i, null, null), sameInstance(views.get(i)));
}
}
private class TestAdapter extends CursorAdapter {
public TestAdapter( Cursor curs ) {
super( Robolectric.application, curs, false );
}
@Override
public void bindView(View view, Context context, Cursor cursor) { }
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return null;
}
}
}