package org.wikipedia.test; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public final class TestParcelUtil { /** @param parcelable Must implement hashCode and equals */ public static void test(Parcelable parcelable) throws Throwable { Parcel parcel = parcel(parcelable); parcel.setDataPosition(0); Parcelable unparceled = unparcel(parcel, parcelable.getClass()); assertThat(parcelable, is(unparceled)); } @NonNull private static Parcelable unparcel(@NonNull Parcel parcel, Class<? extends Parcelable> clazz) throws Throwable { Parcelable.Creator<?> creator = (Parcelable.Creator<?>) clazz.getField("CREATOR").get(null); return (Parcelable) creator.createFromParcel(parcel); } @NonNull private static Parcel parcel(@NonNull Parcelable parcelable) { Parcel parcel = Parcel.obtain(); parcelable.writeToParcel(parcel, 0); return parcel; } private TestParcelUtil() { } }