1 package com.xtremelabs.robolectric.shadows; 2 3 import static org.hamcrest.CoreMatchers.equalTo; 4 import static org.hamcrest.CoreMatchers.is; 5 import static org.hamcrest.CoreMatchers.nullValue; 6 import static org.junit.Assert.assertThat; 7 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import org.junit.Before; 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 15 import android.database.AbstractCursor; 16 import android.net.Uri; 17 18 import com.xtremelabs.robolectric.Robolectric; 19 import com.xtremelabs.robolectric.WithTestDefaultsRunner; 20 21 @RunWith(WithTestDefaultsRunner.class) 22 public class AbstractCursorTest { 23 24 private TestCursor cursor; 25 26 @Before setUp()27 public void setUp() throws Exception { 28 cursor = new TestCursor(); 29 } 30 31 @Test testMoveToFirst()32 public void testMoveToFirst() { 33 cursor.theTable.add("Foobar"); 34 assertThat(cursor.moveToFirst(), equalTo(true)); 35 assertThat(cursor.getCount(), equalTo(1)); 36 } 37 38 @Test testMoveToFirstEmptyList()39 public void testMoveToFirstEmptyList() { 40 assertThat(cursor.moveToFirst(), equalTo(false)); 41 assertThat(cursor.getCount(), equalTo(0)); 42 } 43 44 @Test testMoveToLast()45 public void testMoveToLast() { 46 cursor.theTable.add("Foobar"); 47 cursor.theTable.add("Bletch"); 48 49 assertThat(cursor.moveToLast(), equalTo(true)); 50 assertThat(cursor.getCount(), equalTo(2)); 51 } 52 53 @Test testMoveToLastEmptyList()54 public void testMoveToLastEmptyList() { 55 assertThat(cursor.moveToLast(), equalTo(false)); 56 assertThat(cursor.getCount(), equalTo(0)); 57 } 58 59 @Test testGetPosition()60 public void testGetPosition() { 61 cursor.theTable.add("Foobar"); 62 cursor.theTable.add("Bletch"); 63 64 assertThat(cursor.moveToFirst(), equalTo(true)); 65 assertThat(cursor.getCount(), equalTo(2)); 66 assertThat(cursor.getPosition(), equalTo(0)); 67 } 68 69 @Test testGetPositionSingleEntry()70 public void testGetPositionSingleEntry() { 71 cursor.theTable.add("Foobar"); 72 73 assertThat(cursor.moveToFirst(), equalTo(true)); 74 assertThat(cursor.getCount(), equalTo(1)); 75 assertThat(cursor.getPosition(), equalTo(0)); 76 } 77 78 @Test testGetPositionEmptyList()79 public void testGetPositionEmptyList() { 80 assertThat(cursor.moveToFirst(), equalTo(false)); 81 assertThat(cursor.getCount(), equalTo(0)); 82 assertThat(cursor.getPosition(), equalTo(0)); 83 } 84 85 @Test testMoveToNext()86 public void testMoveToNext() { 87 cursor.theTable.add("Foobar"); 88 cursor.theTable.add("Bletch"); 89 90 assertThat(cursor.moveToFirst(), equalTo(true)); 91 assertThat(cursor.getCount(), equalTo(2)); 92 assertThat(cursor.moveToNext(), equalTo(true)); 93 assertThat(cursor.getPosition(), equalTo(1)); 94 } 95 96 @Test testAttemptToMovePastEnd()97 public void testAttemptToMovePastEnd() { 98 cursor.theTable.add("Foobar"); 99 cursor.theTable.add("Bletch"); 100 101 assertThat(cursor.moveToFirst(), equalTo(true)); 102 assertThat(cursor.getCount(), equalTo(2)); 103 assertThat(cursor.moveToNext(), equalTo(true)); 104 assertThat(cursor.getPosition(), equalTo(1)); 105 assertThat(cursor.isLast(), equalTo(true)); 106 assertThat(cursor.moveToNext(), equalTo(false)); 107 assertThat(cursor.isAfterLast(), equalTo(true)); 108 assertThat(cursor.getPosition(), equalTo(2)); 109 } 110 111 @Test testAttemptToMovePastSingleEntry()112 public void testAttemptToMovePastSingleEntry() { 113 cursor.theTable.add("Foobar"); 114 115 assertThat(cursor.moveToFirst(), equalTo(true)); 116 assertThat(cursor.getCount(), equalTo(1)); 117 assertThat(cursor.moveToNext(), equalTo(false)); 118 assertThat(cursor.getPosition(), equalTo(1)); 119 } 120 121 @Test testAttemptToMovePastEmptyList()122 public void testAttemptToMovePastEmptyList() { 123 assertThat(cursor.moveToFirst(), equalTo(false)); 124 assertThat(cursor.getCount(), equalTo(0)); 125 assertThat(cursor.moveToNext(), equalTo(false)); 126 assertThat(cursor.getPosition(), equalTo(0)); 127 } 128 129 @Test testMoveToPrevious()130 public void testMoveToPrevious() { 131 cursor.theTable.add("Foobar"); 132 cursor.theTable.add("Bletch"); 133 assertThat(cursor.moveToFirst(), equalTo(true)); 134 assertThat(cursor.moveToNext(), equalTo(true)); 135 assertThat(cursor.getPosition(), equalTo(1)); 136 assertThat(cursor.moveToPrevious(), equalTo(true)); 137 assertThat(cursor.getPosition(), equalTo(0)); 138 } 139 140 @Test testAttemptToMovePastStart()141 public void testAttemptToMovePastStart() { 142 cursor.theTable.add("Foobar"); 143 cursor.theTable.add("Bletch"); 144 assertThat(cursor.moveToFirst(), equalTo(true)); 145 assertThat(cursor.moveToPrevious(), equalTo(true)); 146 assertThat(cursor.getPosition(), equalTo(-1)); 147 assertThat(cursor.moveToPrevious(), equalTo(false)); 148 assertThat(cursor.getPosition(), equalTo(-1)); 149 } 150 151 @Test testIsFirst()152 public void testIsFirst() { 153 cursor.theTable.add("Foobar"); 154 cursor.theTable.add("Bletch"); 155 assertThat(cursor.moveToFirst(), equalTo(true)); 156 assertThat(cursor.isFirst(), equalTo(true)); 157 cursor.moveToNext(); 158 assertThat(cursor.isFirst(), equalTo(false)); 159 cursor.moveToFirst(); 160 cursor.moveToPrevious(); 161 assertThat(cursor.isFirst(), equalTo(false)); 162 } 163 164 @Test testIsLast()165 public void testIsLast() { 166 cursor.theTable.add("Foobar"); 167 cursor.theTable.add("Bletch"); 168 assertThat(cursor.moveToFirst(), equalTo(true)); 169 cursor.moveToNext(); 170 assertThat(cursor.isLast(), equalTo(true)); 171 cursor.moveToPrevious(); 172 assertThat(cursor.isLast(), equalTo(false)); 173 cursor.moveToFirst(); 174 cursor.moveToNext(); 175 assertThat(cursor.isLast(), equalTo(true)); 176 } 177 178 @Test testIsBeforeFirst()179 public void testIsBeforeFirst() { 180 cursor.theTable.add("Foobar"); 181 cursor.theTable.add("Bletch"); 182 assertThat(cursor.moveToFirst(), equalTo(true)); 183 cursor.moveToNext(); 184 assertThat(cursor.isLast(), equalTo(true)); 185 cursor.moveToPrevious(); 186 assertThat(cursor.isLast(), equalTo(false)); 187 cursor.moveToPrevious(); 188 assertThat(cursor.isFirst(), equalTo(false)); 189 cursor.moveToPrevious(); 190 assertThat(cursor.isBeforeFirst(), equalTo(true)); 191 } 192 193 @Test testIsAfterLast()194 public void testIsAfterLast() { 195 cursor.theTable.add("Foobar"); 196 cursor.theTable.add("Bletch"); 197 assertThat(cursor.moveToFirst(), equalTo(true)); 198 cursor.moveToNext(); 199 assertThat(cursor.isLast(), equalTo(true)); 200 cursor.moveToNext(); 201 assertThat(cursor.isAfterLast(), equalTo(true)); 202 cursor.moveToPrevious(); 203 assertThat(cursor.isLast(), equalTo(true)); 204 cursor.moveToPrevious(); 205 assertThat(cursor.isLast(), equalTo(false)); 206 cursor.moveToFirst(); 207 cursor.moveToNext(); 208 assertThat(cursor.isAfterLast(), equalTo(false)); 209 cursor.moveToNext(); 210 assertThat(cursor.isAfterLast(), equalTo(true)); 211 } 212 213 @Test testGetNotificationUri()214 public void testGetNotificationUri() { 215 Uri uri = Uri.parse("content://foo.com"); 216 ShadowAbstractCursor shadow = Robolectric.shadowOf_(cursor); 217 assertThat(shadow.getNotificationUri_Compatibility(), is(nullValue())); 218 cursor.setNotificationUri(null, uri); 219 assertThat(shadow.getNotificationUri_Compatibility(), is(uri)); 220 } 221 222 @Test testIsClosedWhenAfterCallingClose()223 public void testIsClosedWhenAfterCallingClose() { 224 assertThat(cursor.isClosed(), equalTo(false)); 225 cursor.close(); 226 assertThat(cursor.isClosed(), equalTo(true)); 227 } 228 229 private class TestCursor extends AbstractCursor { 230 231 public List<Object> theTable = new ArrayList<Object>(); 232 233 @Override getCount()234 public int getCount() { 235 return theTable.size(); 236 } 237 238 @Override getColumnNames()239 public String[] getColumnNames() { 240 throw new UnsupportedOperationException(); 241 } 242 243 @Override getDouble(int columnIndex)244 public double getDouble(int columnIndex) { 245 throw new UnsupportedOperationException(); 246 } 247 248 @Override getFloat(int columnIndex)249 public float getFloat(int columnIndex) { 250 throw new UnsupportedOperationException(); 251 } 252 253 @Override getInt(int columnIndex)254 public int getInt(int columnIndex) { 255 throw new UnsupportedOperationException(); 256 } 257 258 @Override getLong(int columnIndex)259 public long getLong(int columnIndex) { 260 throw new UnsupportedOperationException(); 261 } 262 263 @Override getShort(int columnIndex)264 public short getShort(int columnIndex) { 265 throw new UnsupportedOperationException(); 266 } 267 268 @Override getString(int columnIndex)269 public String getString(int columnIndex) { 270 throw new UnsupportedOperationException(); 271 } 272 273 @Override isNull(int columnIndex)274 public boolean isNull(int columnIndex) { 275 throw new UnsupportedOperationException(); 276 } 277 } 278 }