aboutsummaryrefslogtreecommitdiff
path: root/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java
diff options
context:
space:
mode:
Diffstat (limited to 'v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java')
-rw-r--r--v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java177
1 files changed, 177 insertions, 0 deletions
diff --git a/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java b/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java
new file mode 100644
index 000000000..11e859715
--- /dev/null
+++ b/v1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbstractCursor.java
@@ -0,0 +1,177 @@
+package com.xtremelabs.robolectric.shadows;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import android.content.ContentResolver;
+import android.database.AbstractCursor;
+import android.database.CursorWindow;
+import android.net.Uri;
+
+import com.xtremelabs.robolectric.internal.Implementation;
+import com.xtremelabs.robolectric.internal.Implements;
+import com.xtremelabs.robolectric.internal.RealObject;
+
+
+@Implements(AbstractCursor.class)
+public class ShadowAbstractCursor {
+ @RealObject
+ private AbstractCursor realAbstractCursor;
+
+ protected Map<String, Object> currentRow;
+ protected int currentRowNumber = -1;
+ protected Map<String, Integer> columnNames = new HashMap<String, Integer>();
+ protected String[] columnNameArray;
+ protected Map<Integer, Map<String, Object>> rows = new HashMap<Integer, Map<String, Object>>();
+ protected int rowCount;
+ protected Uri notificationUri;
+ protected boolean mClosed;
+
+ @Implementation
+ public int getCount() {
+ return rowCount;
+ }
+
+ @Implementation
+ public boolean moveToFirst() {
+ setPosition(0);
+ return realAbstractCursor.getCount() > 0;
+ }
+
+ @Implementation
+ public boolean moveToLast() {
+ if( realAbstractCursor.getCount() == 0 ) {
+ return false;
+ }
+ setPosition( realAbstractCursor.getCount() - 1 );
+ return true;
+ }
+
+ @Implementation
+ public int getPosition() {
+ return currentRowNumber;
+ }
+
+
+ @Implementation
+ public boolean moveToPosition(int pos) {
+ if (pos >= realAbstractCursor.getCount()) {
+ return false;
+ }
+
+ setPosition(pos);
+ return true;
+ }
+
+ /**
+ * Set currentRowNumber(Int) and currentRow (Map)
+ *
+ * @param pos = the position to set
+ */
+ private void setPosition(int pos) {
+ currentRowNumber = pos;
+ if ((-1 == currentRowNumber) || (rowCount == currentRowNumber)) {
+ currentRow = null;
+ } else {
+ currentRow = rows.get(currentRowNumber);
+ }
+ }
+
+ @Implementation
+ public boolean moveToNext() {
+ if (currentRowNumber + 1 >= realAbstractCursor.getCount()) {
+ currentRowNumber = realAbstractCursor.getCount();
+ return false;
+ }
+ setPosition(++currentRowNumber);
+ return true;
+ }
+
+ @Implementation
+ public boolean moveToPrevious() {
+ if (currentRowNumber < 0 || realAbstractCursor.getCount() == 0) {
+ return false;
+ }
+ setPosition(--currentRowNumber);
+ return true;
+ }
+
+ @Implementation
+ public CursorWindow getWindow() {
+ return null;
+ }
+
+ @Implementation
+ public String[] getColumnNames() {
+ return columnNameArray;
+ }
+
+ @Implementation
+ public String getColumnName(int column) {
+ return columnNameArray[column];
+ }
+
+ @Implementation
+ public int getColumnIndex(String columnName) {
+ for (int i=0; i<columnNameArray.length; i++) {
+ if (columnName.equals(columnNameArray[i])) return i;
+ }
+ return -1;
+ }
+
+ @Implementation
+ public int getColumnIndexOrThrow(String columnName) {
+ int idx = getColumnIndex(columnName);
+ if (idx >= 0) return idx; else throw new IllegalArgumentException("column does not exist");
+ }
+
+ @Implementation
+ public int getColumnCount() {
+ return getColumnNames().length;
+ }
+
+ @Implementation
+ public boolean isFirst() {
+ return currentRowNumber == 0;
+ }
+
+ @Implementation
+ public boolean isLast() {
+ return currentRowNumber == realAbstractCursor.getCount() - 1;
+ }
+
+ @Implementation
+ public boolean isBeforeFirst() {
+ return currentRowNumber < 0;
+ }
+
+ @Implementation
+ public boolean isAfterLast() {
+ return currentRowNumber >= realAbstractCursor.getCount();
+ }
+
+ @Implementation
+ public void setNotificationUri(ContentResolver cr, Uri notifyUri) {
+ notificationUri = notifyUri;
+ }
+
+ @Implementation
+ public boolean isClosed() {
+ return mClosed;
+ }
+
+ @Implementation
+ public void close() {
+ mClosed = true;
+ }
+
+ /**
+ * Returns the Uri set by {@code setNotificationUri()}. Method included for testing
+ * pre-API 11 projects.
+ */
+ public Uri getNotificationUri_Compatibility() {
+ return notificationUri;
+ }
+
+
+} \ No newline at end of file