1 package com.xtremelabs.robolectric.shadows; 2 3 import static org.hamcrest.CoreMatchers.equalTo; 4 import static org.hamcrest.CoreMatchers.notNullValue; 5 import static org.hamcrest.CoreMatchers.nullValue; 6 import static org.hamcrest.CoreMatchers.sameInstance; 7 import static org.junit.Assert.assertThat; 8 9 import java.sql.Connection; 10 import java.sql.ResultSet; 11 import java.sql.Statement; 12 import java.util.ArrayList; 13 import java.util.List; 14 15 import org.junit.Before; 16 import org.junit.Test; 17 import org.junit.runner.RunWith; 18 19 import android.content.Context; 20 import android.database.Cursor; 21 import android.database.sqlite.SQLiteCursor; 22 import android.view.View; 23 import android.view.ViewGroup; 24 import android.widget.CursorAdapter; 25 26 import com.xtremelabs.robolectric.Robolectric; 27 import com.xtremelabs.robolectric.WithTestDefaultsRunner; 28 import com.xtremelabs.robolectric.util.DatabaseConfig; 29 30 @RunWith(WithTestDefaultsRunner.class) 31 public 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