aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Boekenoogen <jboekeno@google.com>2013-11-22 10:20:04 -0800
committerJon Boekenoogen <jboekeno@google.com>2013-11-22 10:22:53 -0800
commit3d6057c072c4b828d93cc739116c5f966d52e49b (patch)
tree88b9f9deea38e583b050d75d8f49f863aabd9dfe
parent608b73777f5b1cbe75040e743aedd616a7486fe1 (diff)
downloadrobolectric-3d6057c072c4b828d93cc739116c5f966d52e49b.tar.gz
Fix crash when reading a Parcelable from a Bundle.
Do not need to look at ShadowParcelables for CREATOR objects since for each instead where a shadow has a CREATOR the CREATOR is set on the actual class to allow direct access in tests anyway. Tested against current Wallet/Plus tests successfully. Change-Id: I4dfce77dfbbc93874742f9c5cb268a2eb5a6ed7e
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java10
-rw-r--r--src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java29
2 files changed, 16 insertions, 23 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
index 4b93f2e79..a6e7bbbcb 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowParcel.java
@@ -831,14 +831,6 @@ public class ShadowParcel {
Parcelable.Creator<T> creator;
try {
Class c = loader == null ? Class.forName(name) : Class.forName(name, true, loader);
-
- // Use CREATOR from Shadow for Robolectric mocked classes.
- Class shadowClass = ShadowWrangler.getInstance().findShadowClass(c, loader);
- if (shadowClass != null) {
- c = shadowClass;
- name = shadowClass.getName();
- }
-
Field f = c.getField("CREATOR");
creator = (Parcelable.Creator) f.get(null);
} catch (IllegalAccessException e) {
@@ -926,7 +918,7 @@ public class ShadowParcel {
}
Parcelable[] p = new Parcelable[N];
for (int i = 0; i < N; i++) {
- p[i] = (Parcelable) readParcelable(loader);
+ p[i] = readParcelable(loader);
}
return p;
}
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
index 78f701e99..763be0d77 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java
@@ -1,6 +1,5 @@
package com.xtremelabs.robolectric.shadows;
-import static com.xtremelabs.robolectric.Robolectric.shadowOf;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
@@ -8,6 +7,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
+import android.accounts.Account;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcel;
@@ -16,7 +16,6 @@ import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -248,7 +247,7 @@ public class ParcelTest {
parcel.writeParcelable(i1, 0);
parcel.setDataPosition(0);
-
+
Intent i2 = parcel.readParcelable(Intent.class.getClassLoader());
assertEquals(i1, i2);
}
@@ -271,11 +270,13 @@ public class ParcelTest {
assertEquals(b1, b2);
assertEquals("world", b2.getString("hello"));
}
-
+
@Test
public void testReadWriteNestedBundles() {
+ Account account = new Account("accountName", "accountType");
Bundle innerBundle = new Bundle();
innerBundle.putString("hello", "world");
+ innerBundle.putParcelable("account", account);
Bundle b1 = new Bundle();
b1.putBundle("bundle", innerBundle);
b1.putInt("int", 23);
@@ -297,7 +298,7 @@ public class ParcelTest {
assertEquals(23, b2.getInt("int"));
assertEquals("world", b2.getBundle("bundle").getString("hello"));
}
-
+
@Test
public void testReadWriteBundleWithDifferentValueTypes() {
Bundle b1 = new Bundle();
@@ -310,7 +311,7 @@ public class ParcelTest {
b1.putDouble("double", 1.25);
parcel.writeBundle(b1);
parcel.setDataPosition(0);
-
+
Bundle b2 = parcel.readBundle();
assertEquals(b1, b2);
@@ -456,50 +457,50 @@ public class ParcelTest {
final double[] doubles2 = parcel.createDoubleArray();
assertTrue(Arrays.equals(doubles, doubles2));
}
-
+
@Test
public void testDataPositionAfterStringWrite() {
parcel.writeString("string");
assertEquals(10, parcel.dataPosition());
}
-
+
@Test
public void testDataPositionAfterByteWrite() {
parcel.writeByte((byte) 0);
assertEquals(1, parcel.dataPosition());
}
-
+
@Test
public void testDataPositionAfterIntWrite() {
parcel.writeInt(1);
assertEquals(4, parcel.dataPosition());
}
-
+
@Test
public void testDataPositionAfterLongWrite() {
parcel.writeLong(23);
assertEquals(8, parcel.dataPosition());
}
-
+
@Test
public void testDataPositionAfterFloatWrite() {
parcel.writeFloat(0.5f);
assertEquals(4, parcel.dataPosition());
}
-
+
@Test
public void testDataPositionAfterDoubleWrite() {
parcel.writeDouble(8.8);
assertEquals(8, parcel.dataPosition());
}
-
+
@Test
public void testResetDataPositionAfterWrite() {
parcel.writeInt(4);
parcel.setDataPosition(0);
assertEquals(0, parcel.dataPosition());
}
-
+
@Test
public void testOverwritePreviousValue() {
parcel.writeInt(4);