Skip to content

Commit

Permalink
Added integration test for joelittlejohn#602 : parcelable superclass
Browse files Browse the repository at this point in the history
  • Loading branch information
yomik committed Jun 5, 2017
1 parent 86c3fab commit 7046831
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,16 @@ public void parcelableTreeIsParcelable() throws ClassNotFoundException, IOExcept
assertThat(instance, is(equalTo(unparceledInstance)));
}

@Test
public void parcelableSuperclassIsUnparceled() throws ClassNotFoundException, IOException {
Class<?> parcelableType = schemaRule.generateAndCompile("/schema/parcelable/parcelable-superclass-schema.json", "com.example",
config("parcelable", true))
.loadClass("com.example.ParcelableSuperclassSchema");

Parcelable instance = (Parcelable) new ObjectMapper().readValue(ParcelableIT.class.getResourceAsStream("/schema/parcelable/parcelable-superclass-data.json"), parcelableType);
Parcel parcel = parcelableWriteToParcel(instance);
Parcelable unparceledInstance = parcelableReadFromParcel(parcel, parcelableType, instance);

assertThat(instance, is(equalTo(unparceledInstance)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public static Parcel writeToParcel(Parcelable instance, String key) {
parcel.writeBundle(bundle);
return parcel;
}

public static Parcel parcelableWriteToParcel(Parcelable instance) {
Parcel parcel = Parcel.obtain();
instance.writeToParcel(parcel, 0);
return parcel;
}

public static Parcelable readFromParcel(Parcel parcel, Class<?> parcelableType, String key) {
parcel.setDataPosition(0);
Expand All @@ -44,4 +50,25 @@ public static Parcelable readFromParcel(Parcel parcel, Class<?> parcelableType,
return unparceledInstance;
}

public static Parcelable parcelableReadFromParcel(Parcel parcel, Class<?> parcelableType, Parcelable parcelable) {
parcel.setDataPosition(0);
return createFromParcelFromParcelable(parcel, parcelable);
}


private static Parcelable createFromParcelFromParcelable(Parcel in, Parcelable parcelable) {
try {
Class<?> parcelableClass = parcelable.getClass().getClassLoader().loadClass(parcelable.getClass().getName());
java.lang.reflect.Field creatorField = parcelableClass.getDeclaredField("CREATOR");
Object creatorInstance = creatorField.get(parcelable);
java.lang.reflect.Method createFromParcel = creatorInstance.getClass().getDeclaredMethod("createFromParcel", new Class[] { Parcel.class });
createFromParcel.setAccessible(true);
return (Parcelable) createFromParcel.invoke(creatorInstance, in);
}
catch (Throwable ignored) {
ignored.getCause().printStackTrace();
// Ignore
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"baseBooleanProperty": true,
"baseStringProperty": "basestring",
"baseIntegerProperty": 1234,
"booleanProperty" : true,
"stringProperty" : "aaa",
"integerProperty" : 10
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"type": "object",
"properties": {
"baseBooleanProperty" : {
"type" : "boolean",
"default": false
},
"baseStringProperty" : {
"type" : "string"
},
"baseIntegerProperty" : {
"type" : "integer"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"type" : "object",
"extends": {
"$ref": "parcelable-schema-base.json"
},
"properties" : {
"booleanProperty" : {
"type" : "boolean"
},
"stringProperty" : {
"type" : "string"
},
"integerProperty" : {
"type" : "integer"
},
"baseIntegerProperty": {
"title": "Tests overriding of property",
"type": "integer"
}
}
}

0 comments on commit 7046831

Please sign in to comment.