Implement readStringList and writeStringList
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
index f8eac10..57d35d2 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
@@ -181,16 +181,47 @@
}
@Implementation
- public void readStringArray(String[] val) {
+ public void readStringArray(String[] dest) {
int n = readInt();
- if (val.length != n) throw new RuntimeException("bad array lengths");
- for (int i = 0; i < val.length; i++) {
- val[i] = readString();
+ if (dest.length != n) throw new RuntimeException("bad array lengths");
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = readString();
}
}
@Implementation
- public final ArrayList<String> createStringArrayList() {
+ public void writeStringList(List<String> strings) {
+ if (strings == null) {
+ writeInt(-1);
+ return;
+ }
+ int count = strings.size();
+ int i=0;
+ writeInt(count);
+ while (i < count) {
+ writeString(strings.get(i));
+ i++;
+ }
+ }
+
+ @Implementation
+ public void readStringList(List<String> list) {
+ int listSizeBeforeChange = list.size();
+ int addCount = readInt();
+ int i = 0;
+ for (; i < listSizeBeforeChange && i < addCount; i++) {
+ list.set(i, readString());
+ }
+ for (; i<addCount; i++) {
+ list.add(readString());
+ }
+ for (; i<listSizeBeforeChange; i++) {
+ list.remove(addCount);
+ }
+ }
+
+ @Implementation
+ public ArrayList<String> createStringArrayList() {
int n = readInt();
if (n < 0) {
return null;
@@ -225,7 +256,7 @@
}
@Implementation
- public final void writeTypedList(List val) {
+ public void writeTypedList(List val) {
if (val == null) {
writeInt(-1);
return;
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
index 08e9969..f05db61 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
@@ -297,4 +297,17 @@
assertEquals(1, rehydrated.size());
assertEquals(23, rehydrated.get(0).contents);
}
+
+ @Test
+ public void testReadAndWriteStringList() throws Exception {
+ ArrayList<String> original = new ArrayList<String>();
+ ArrayList<String> rehydrated = new ArrayList<String>();
+ original.add("str1");
+ original.add("str2");
+ parcel.writeStringList(original);
+ parcel.readStringList(rehydrated);
+ assertEquals(2, rehydrated.size());
+ assertEquals("str1", rehydrated.get(0));
+ assertEquals("str2", rehydrated.get(1));
+ }
}