diff options
author | Jon Boekenoogen <jboekeno@google.com> | 2013-11-22 10:20:04 -0800 |
---|---|---|
committer | Jon Boekenoogen <jboekeno@google.com> | 2013-11-22 10:22:53 -0800 |
commit | 3d6057c072c4b828d93cc739116c5f966d52e49b (patch) | |
tree | 88b9f9deea38e583b050d75d8f49f863aabd9dfe | |
parent | 608b73777f5b1cbe75040e743aedd616a7486fe1 (diff) | |
download | robolectric-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.java | 10 | ||||
-rw-r--r-- | src/test/java/com/xtremelabs/robolectric/shadows/ParcelTest.java | 29 |
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); |