Home | History | Annotate | Download | only in shadows
      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