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);
+    }
 }