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() { }
}