Added some missing methods to ShadowParcel
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
index 36bdb2b..7278284 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
@@ -40,6 +40,16 @@
}
@Implementation
+ public void writeFloat(float f) {
+ parcelData.add(f);
+ }
+
+ @Implementation
+ public void writeDouble(double f) {
+ parcelData.add(f);
+ }
+
+ @Implementation
@SuppressWarnings("unchecked")
public void writeByte( byte b ) {
parcelData.add( b );
@@ -56,6 +66,16 @@
}
@Implementation
+ public float readFloat() {
+ return index < parcelData.size() ? (Float) parcelData.get(index++) : 0;
+ }
+
+ @Implementation
+ public double readDouble() {
+ return index < parcelData.size() ? (Double) parcelData.get(index++) : 0;
+ }
+
+ @Implementation
public byte readByte() {
return index < parcelData.size() ? (Byte) parcelData.get(index++) : 0;
}
@@ -90,6 +110,85 @@
return index < parcelData.size() ? (Parcelable) parcelData.get(index++) : null;
}
+ @Implementation
+ public void readFloatArray(float[] val) {
+ int n = readInt();
+ if (val.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i< val.length; i++) {
+ val[i] = readFloat();
+ }
+ }
+
+ @Implementation
+ public void writeFloatArray(float[] val) {
+ writeInt(val.length);
+ for (float f : val) writeFloat(f);
+ }
+
+ @Implementation
+ public void writeDoubleArray(double[] val) {
+ writeInt(val.length);
+ for (double f : val) writeDouble(f);
+ }
+
+ @Implementation
+ public void readDoubleArray(double[] val) {
+ int n = readInt();
+ if (val.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i< val.length; i++) {
+ val[i] = readDouble();
+ }
+ }
+
+ @Implementation
+ public void writeIntArray(int[] val) {
+ writeInt(val.length);
+ for (int f : val) writeInt(f);
+ }
+
+ @Implementation
+ public void readIntArray(int[] val) {
+ int n = readInt();
+ if (val.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i< val.length; i++) {
+ val[i] = readInt();
+ }
+ }
+
+ @Implementation
+ public void writeLongArray(long[] val) {
+ writeInt(val.length);
+ for (long f : val) writeLong(f);
+ }
+
+ @Implementation
+ public void readLongArray(long[] val) {
+ int n = readInt();
+ if (val.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i< val.length; i++) {
+ val[i] = readLong();
+ }
+ }
+
+ @Implementation
+ public void writeStringArray(String[] val) {
+ writeInt(val.length);
+ for (String f : val) writeString(f);
+ }
+
+ @Implementation
+ public void readStringArray(String[] val) {
+ int n = readInt();
+ if (val.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i< val.length; i++) {
+ val[i] = readString();
+ }
+ }
+
+
+
+
+
public int getIndex() {
return index;
}
@@ -97,4 +196,5 @@
public List getParcelData() {
return parcelData;
}
+
}
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
index 98a6682..6001eb0 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
@@ -14,6 +14,9 @@
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
@RunWith(WithTestDefaultsRunner.class)
public class ParcelTest {
@@ -83,7 +86,59 @@
assertThat( parcel.readInt(), equalTo( val ) );
}
- @Test
+ @Test
+ public void testReadWriteIntArray() throws Exception {
+ final int[] ints = {1, 2 };
+ parcel.writeIntArray(ints);
+ final int[] ints2 = new int[ints.length];
+ parcel.readIntArray(ints2);
+ assertTrue(Arrays.equals(ints, ints2));
+ }
+
+ @Test
+ public void testReadWriteLongArray() throws Exception {
+ final long[] longs = {1, 2 };
+ parcel.writeLongArray(longs);
+ final long[] longs2 = new long[longs.length];
+ parcel.readLongArray(longs2);
+ assertTrue(Arrays.equals(longs, longs2));
+ }
+
+ @Test
+ public void testReadWriteSingleFloat() {
+ float val = 5.2f;
+ parcel.writeFloat(val);
+ assertThat(parcel.readFloat(), equalTo(val));
+ }
+
+ @Test
+ public void testReadWriteFloatArray() throws Exception {
+ final float[] floats = {1.1f, 2.0f};
+ parcel.writeFloatArray(floats);
+ final float[] floats2 = new float[floats.length];
+ parcel.readFloatArray(floats2);
+ assertTrue(Arrays.equals(floats, floats2));
+ }
+
+ @Test
+ public void testReadWriteDoubleArray() throws Exception {
+ final double[] doubles = {1.1f, 2.0f};
+ parcel.writeDoubleArray(doubles);
+ final double[] doubles2 = new double[doubles.length];
+ parcel.readDoubleArray(doubles2);
+ assertTrue(Arrays.equals(doubles, doubles2));
+ }
+
+ @Test
+ public void testReadWriteStringArray() throws Exception {
+ final String[] strings = { "foo", "bar" };
+ parcel.writeStringArray(strings);
+ final String[] strings2 = new String[strings.length];
+ parcel.readStringArray(strings2);
+ assertTrue(Arrays.equals(strings, strings2));
+ }
+
+ @Test
public void testReadWriteMultipleInts() {
for( int i = 0; i < 10; ++i ) {
parcel.writeInt( i );