1 package com.xtremelabs.robolectric.shadows; 2 3 import com.xtremelabs.robolectric.internal.Implementation; 4 import com.xtremelabs.robolectric.internal.Implements; 5 6 import android.database.CursorIndexOutOfBoundsException; 7 import android.database.MatrixCursor; 8 9 import java.util.ArrayList; 10 import java.util.List; 11 12 @Implements(MatrixCursor.class) 13 public class ShadowMatrixCursor extends ShadowAbstractCursor { 14 private List<Object[]> data = new ArrayList<Object[]>(); 15 __constructor__(String[] columns)16 public void __constructor__(String[] columns) { 17 __constructor__(columns, 0); 18 } 19 __constructor__(String[] columns, int initialCapacity)20 public void __constructor__(String[] columns, int initialCapacity) { 21 columnNameArray = columns; 22 } 23 24 @Implementation addRow(Object[] data)25 public void addRow(Object[] data) { 26 rowCount++; 27 this.data.add(data); 28 } 29 30 @Implementation getString(int column)31 public String getString(int column) { 32 Object columnValue = get(column); 33 return columnValue == null ? null : columnValue.toString(); 34 } 35 36 @Implementation getLong(int column)37 public long getLong(int column) { 38 Number numberValue = (Number) get(column); 39 return numberValue == null ? 0 : numberValue.longValue(); 40 } 41 42 @Implementation getShort(int column)43 public short getShort(int column) { 44 Number numberValue = (Number) get(column); 45 return numberValue == null ? 0 : numberValue.shortValue(); 46 } 47 48 @Implementation getInt(int column)49 public int getInt(int column) { 50 Number numberValue = (Number) get(column); 51 return numberValue == null ? 0 : numberValue.intValue(); 52 } 53 54 @Implementation getFloat(int column)55 public float getFloat(int column) { 56 Number numberValue = (Number) get(column); 57 return numberValue == null ? 0.0f : numberValue.floatValue(); 58 } 59 60 @Implementation getDouble(int column)61 public double getDouble(int column) { 62 Number numberValue = (Number) get(column); 63 return numberValue == null ? 0.0 : numberValue.doubleValue(); 64 } 65 66 @Implementation getBlob(int column)67 public byte[] getBlob(int column) { 68 return (byte[]) get(column); 69 } 70 71 @Implementation isNull(int column)72 public boolean isNull(int column) { 73 return get(column) == null; 74 } 75 get(int column)76 private Object get(int column) { 77 if (column < 0 || column >= columnNameArray.length) { 78 throw new CursorIndexOutOfBoundsException(null); 79 } 80 if (currentRowNumber < 0) { 81 throw new CursorIndexOutOfBoundsException("Before first row."); 82 } 83 if (currentRowNumber >= rowCount) { 84 throw new CursorIndexOutOfBoundsException("After last row."); 85 } 86 return data.get(currentRowNumber)[column]; 87 } 88 } 89