ShadowParcel: Add createStringArray, writeStringList(List), createStringArrayList, readStringList(List)
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
index 7278284..3c82e3a 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
@@ -13,7 +13,7 @@
@Implements(Parcel.class)
@SuppressWarnings("unchecked")
public class ShadowParcel {
- private ArrayList parcelData = new ArrayList();
+ private final ArrayList parcelData = new ArrayList();
private int index = 0;
@Implementation
@@ -177,6 +177,20 @@
}
@Implementation
+ public String[] createStringArray() {
+ String[] array = null;
+
+ int length = readInt();
+ if (length >= 0) {
+ array = new String[length];
+ for (int i = 0; i < length; i++) {
+ array[i] = readString();
+ }
+ }
+ return array;
+ }
+
+ @Implementation
public void readStringArray(String[] val) {
int n = readInt();
if (val.length != n) throw new RuntimeException("bad array lengths");
@@ -185,9 +199,44 @@
}
}
+ @Implementation
+ public void writeStringList(List<String> val) {
+ int N = val.size();
+ writeInt(N);
+ for (int i = 0; i < N; i++) {
+ writeString(val.get(i));
+ }
+ }
+ @Implementation
+ public ArrayList<String> createStringArrayList() {
+ int N = readInt();
+ if (N < 0) {
+ return null;
+ }
+ ArrayList<String> l = new ArrayList<String>(N);
+ while (N > 0) {
+ l.add(readString());
+ N--;
+ }
+ return l;
+ }
-
+ @Implementation
+ public void readStringList(List<String> list) {
+ int M = list.size();
+ int N = readInt();
+ int i = 0;
+ for (; i < M && i < N; i++) {
+ list.set(i, readString());
+ }
+ for (; i < N; i++) {
+ list.add(readString());
+ }
+ for (; i < M; i++) {
+ list.remove(N);
+ }
+ }
public int getIndex() {
return index;
@@ -196,5 +245,4 @@
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 6001eb0..c8a7fd5 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
@@ -16,7 +16,9 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
@RunWith(WithTestDefaultsRunner.class)
public class ParcelTest {
@@ -271,4 +273,29 @@
assertEquals(b1, b2);
assertEquals("world", b2.getString("hello"));
}
+
+ @Test
+ public void testWriteCreateStringArray() {
+ final String[] strings = { "foo", "bar" };
+ parcel.writeStringArray(strings);
+ final String[] strings2 = parcel.createStringArray();
+ assertTrue(Arrays.equals(strings, strings2));
+ }
+
+ @Test
+ public void testReadWriteStringList() {
+ final List<String> strings = Arrays.asList( "foo", "bar" );
+ parcel.writeStringList(strings);
+ List<String> extractedStrings = new ArrayList<String>();
+ parcel.readStringList(extractedStrings);
+ assertEquals(strings, extractedStrings);
+ }
+
+ @Test
+ public void testWriteCreateStringArrayList() {
+ final List<String> strings = Arrays.asList( "foo", "bar" );
+ parcel.writeStringList(strings);
+ List<String> extractedStrings = parcel.createStringArrayList();
+ assertEquals(strings, extractedStrings);
+ }
}