blob: 2f6e76adeee6afe490524237159288568046b3a9 [file]
// WITH_STDLIB
// IGNORE K1
@file:JvmName("TestKt")
package test
import kotlinx.parcelize.*
import android.os.Parcel
import android.os.Parcelable
@Parcelize
data class A(var i1: Int, var i2: Int): Parcelable
@Parcelize
open class Base(var s1: String, var a: A): Parcelable
@Parcelize
open class Derived(var s2: String, s1: String, a: A): Base(s1, a)
@Parcelize
class DerivedEvenMore(
var a2: A,
): Derived("a", "b", A(1, 1))
fun box() = parcelTest { parcel ->
val expected = Derived("hello", "whoisit", A(1, 2))
val expected2 = DerivedEvenMore(A(2, 2))
expected.s1 = "world"
expected.a.i2 = 123
expected.writeToParcel(parcel, 0)
expected2.s1 = "world"
expected2.a.i2 = 123
expected2.writeToParcel(parcel, 0)
val bytes = parcel.marshall()
parcel.unmarshall(bytes, 0, bytes.size)
parcel.setDataPosition(0)
val got = parcelableCreator<Derived>().createFromParcel(parcel)
val got2 = parcelableCreator<DerivedEvenMore>().createFromParcel(parcel)
assert(expected.a == got.a) { "expected.a != got.a => ${expected.a} != ${got.a}" }
assert(expected.s2 == got.s2) { "expected.a != got.a => ${expected.s2} != ${got.s2}" }
assert(expected.s1 == got.s1) { "expected.s1 != got.s1 => ${expected.s1} != ${got.s1}" }
assert(expected2.a == got2.a) { "expected2.a != got2.a => ${expected2.a} != ${got2.a}" }
assert(expected2.s2 == got2.s2) { "expected2.a != got2.a => ${expected2.s2} != ${got2.s2}" }
assert(expected2.s1 == got2.s1) { "expected2.s1 != got2.s1 => ${expected2.s1} != ${got2.s1}" }
assert(expected2.a2 == got2.a2) { "expected2.a2 != got2.a2 => ${expected2.a2} != ${got2.a2}" }
}