1package com.xtremelabs.robolectric.shadows; 2 3import static org.hamcrest.CoreMatchers.equalTo; 4import static org.hamcrest.CoreMatchers.notNullValue; 5import static org.hamcrest.CoreMatchers.nullValue; 6import static org.hamcrest.CoreMatchers.sameInstance; 7import static org.junit.Assert.assertThat; 8 9import java.sql.Connection; 10import java.sql.ResultSet; 11import java.sql.Statement; 12import java.util.ArrayList; 13import java.util.List; 14 15import org.junit.Before; 16import org.junit.Test; 17import org.junit.runner.RunWith; 18 19import android.content.Context; 20import android.database.Cursor; 21import android.database.sqlite.SQLiteCursor; 22import android.view.View; 23import android.view.ViewGroup; 24import android.widget.CursorAdapter; 25 26import com.xtremelabs.robolectric.Robolectric; 27import com.xtremelabs.robolectric.WithTestDefaultsRunner; 28import com.xtremelabs.robolectric.util.DatabaseConfig; 29 30@RunWith(WithTestDefaultsRunner.class) 31public class CursorAdapterTest { 32 33 private Cursor curs; 34 private CursorAdapter adapter; 35 36 @Before 37 public void setUp() throws Exception { 38 Connection connection = DatabaseConfig.getMemoryConnection(); 39 40 Statement statement = connection.createStatement(); 41 statement.execute("CREATE TABLE table_name(_id INT PRIMARY KEY, name VARCHAR(255));" ); 42 String[] inserts = { 43 "INSERT INTO table_name (_id, name) VALUES(1234, 'Chuck');", 44 "INSERT INTO table_name (_id, name) VALUES(1235, 'Julie');", 45 "INSERT INTO table_name (_id, name) VALUES(1236, 'Chris');", 46 "INSERT INTO table_name (_id, name) VALUES(1237, 'Brenda');", 47 "INSERT INTO table_name (_id, name) VALUES(1238, 'Jane');" 48 }; 49 50 for (String insert : inserts) { 51 connection.createStatement().executeUpdate(insert); 52 } 53 54 statement = connection.createStatement(DatabaseConfig.getResultSetType(), ResultSet.CONCUR_READ_ONLY); 55 String sql = "SELECT * FROM table_name;"; 56 ResultSet resultSet = statement.executeQuery(sql); 57 curs = new SQLiteCursor(null, null, null, null); 58 Robolectric.shadowOf((SQLiteCursor)curs).setResultSet(resultSet,sql); 59 60 adapter = new TestAdapter(curs); 61 } 62 63 @Test 64 public void testChangeCursor() { 65 assertThat(adapter.getCursor(), notNullValue()); 66 assertThat(adapter.getCursor(), sameInstance(curs)); 67 68 adapter.changeCursor( null ); 69 70 assertThat(curs.isClosed(), equalTo( true ) ); 71 assertThat(adapter.getCursor(), nullValue() ); 72 } 73 74 @Test 75 public void testCount() { 76 assertThat(adapter.getCount(), equalTo(curs.getCount())); 77 adapter.changeCursor( null ); 78 assertThat(adapter.getCount(), equalTo(0) ); 79 } 80 81 @Test 82 public void testGetItemId() { 83 for ( int i = 0; i < 5; i++ ) { 84 assertThat(adapter.getItemId(i), equalTo((long) 1234 + i)); 85 } 86 } 87 88 @Test 89 public void testGetView() { 90 List<View> views = new ArrayList<View>(); 91 for (int i = 0; i < 5; i++) { 92 views.add(new View(Robolectric.application)); 93 } 94 95 Robolectric.shadowOf(adapter).setViews( views ); 96 97 for (int i = 0; i < 5; i++) { 98 assertThat(adapter.getView(i, null, null), sameInstance(views.get(i))); 99 } 100 } 101 102 private class TestAdapter extends CursorAdapter { 103 104 public TestAdapter( Cursor curs ) { 105 super( Robolectric.application, curs, false ); 106 } 107 108 @Override 109 public void bindView(View view, Context context, Cursor cursor) { } 110 111 @Override 112 public View newView(Context context, Cursor cursor, ViewGroup parent) { 113 return null; 114 } 115 } 116} 117