From 0bbb36e7658cf5a443944f0763749099428df8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Wed, 25 Aug 2021 14:07:44 +0200 Subject: [PATCH] Parcelize: Add tests for obsolete issues --- .../testData/box/genericParcelable.kt | 27 +++++++++++++ .../testData/box/nestedSparseArrays2.kt | 37 +++++++++++++++++ .../testData/box/objectWriteParcelable.kt | 23 +++++++++++ .../testData/box/privateConstructor.kt | 27 +++++++++++++ .../testData/box/recursiveGenerics.kt | 35 ++++++++++++++++ .../testData/box/typeParameters.kt | 40 +++++++++++++++++++ .../test/ParcelizeBoxTestGenerated.java | 30 ++++++++++++++ .../test/ParcelizeIrBoxTestGenerated.java | 30 ++++++++++++++ 8 files changed, 249 insertions(+) create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt create mode 100644 plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt diff --git a/plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt b/plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt new file mode 100644 index 00000000000..92801be1fc5 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt @@ -0,0 +1,27 @@ +// See https://issuetracker.google.com/174827004 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Bundle +import android.os.Parcel +import android.os.Parcelable + +@Parcelize +class Section(val title: String, val faTitle: T) : Parcelable + +fun box() = parcelTest { parcel -> + val test = Section("title", Bundle()) + test.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + val test2 = readFromParcel>(parcel) + + assert(test.title == test2.title) + assert(test2.faTitle.size() == 0) +} diff --git a/plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt b/plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt new file mode 100644 index 00000000000..2a4741cfa69 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt @@ -0,0 +1,37 @@ +// IGNORE_BACKEND: JVM +// See https://issuetracker.google.com/177856512 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Bundle +import android.os.Parcel +import android.os.Parcelable +import android.util.SparseArray + +@Parcelize +class Data(val values: SparseArray>) : Parcelable + +fun box() = parcelTest { parcel -> + val innerArray = SparseArray() + innerArray.append(20, Bundle()) + var array = SparseArray>() + array.append(10, innerArray) + val first = Data(array) + + first.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + val second = readFromParcel(parcel) + assert(second.values.size() == 1) + val secondInnerArray = second.values.get(10) + assert(secondInnerArray.size() == 1) + val innerBundle = secondInnerArray.get(20) + assert(innerBundle is Bundle) + assert((innerBundle as Bundle).size() == 0) +} diff --git a/plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt b/plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt new file mode 100644 index 00000000000..6d993b6e9d6 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt @@ -0,0 +1,23 @@ +// IGNORE_BACKEND: JVM +// See https://issuetracker.google.com/178394826 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Parcel +import android.os.Parcelable + +fun box() = parcelTest { parcel -> + parcel.writeParcelable(MyObject, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + parcel.readParcelable(null) +} + +@Parcelize +private object MyObject : Parcelable diff --git a/plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt b/plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt new file mode 100644 index 00000000000..847ba4fbbcf --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt @@ -0,0 +1,27 @@ +// IGNORE_BACKEND: JVM +// See KT-24842, https://issuetracker.google.com/189858212 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Bundle +import android.os.Parcel +import android.os.Parcelable + +@Parcelize +class Data private constructor(val value: String) : Parcelable { + constructor() : this("OK") +} + +fun box() = parcelTest { parcel -> + Data().writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + val data = readFromParcel(parcel) + assert(data.value == "OK") +} diff --git a/plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt b/plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt new file mode 100644 index 00000000000..2aeca09da14 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt @@ -0,0 +1,35 @@ +// IGNORE_BACKEND: JVM +// See https://issuetracker.google.com/178321044 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Parcel +import android.os.Parcelable + +@Parcelize +data class Test(val sealedClass1 : SealedClass1<*, *>) : Parcelable + +sealed class SealedClass1, out SC2 : SealedClass2>(val sealedClass2Type: Class) : Parcelable { + @Parcelize + object SealedClass1Impl1 : SealedClass1(SealedClass2.SealedClass2Impl1::class.java) +} + +sealed class SealedClass2, out SC2 : SealedClass2> : Parcelable { + @Parcelize + object SealedClass2Impl1 : SealedClass2() +} + +fun box() = parcelTest { parcel -> + val test = Test(SealedClass1.SealedClass1Impl1) + test.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + val test2 = readFromParcel(parcel) + assert(test == test2) +} diff --git a/plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt b/plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt new file mode 100644 index 00000000000..2e037ed1791 --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt @@ -0,0 +1,40 @@ +// See KT-44891, https://issuetracker.google.com/180193969 +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.parcelize.* +import android.os.Parcel +import android.os.Parcelable + +@Parcelize +class Covariant(val block: () -> T) : Parcelable + +@Parcelize +class Contravariant(val block: (T) -> Boolean) : Parcelable + +@Parcelize +class Invariant(val s: CharSequence) : Parcelable + +fun box() = parcelTest { parcel -> + val covariant1 = Covariant { "OK" } + val contravariant1 = Contravariant { it == "OK" } + val invariant1 = Invariant("OK") + covariant1.writeToParcel(parcel, 0) + contravariant1.writeToParcel(parcel, 0) + invariant1.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + parcel.setDataPosition(0) + + val covariant2 = readFromParcel>(parcel) + assert(covariant2.block() == "OK") + + val contravariant2 = readFromParcel>(parcel) + assert(contravariant2.block("OK")) + + val invariant2 = readFromParcel>(parcel) + assert(invariant2.s.toString() == "OK") +} diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeBoxTestGenerated.java b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeBoxTestGenerated.java index 4b807963ae9..f622e610414 100644 --- a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeBoxTestGenerated.java +++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeBoxTestGenerated.java @@ -120,6 +120,11 @@ public class ParcelizeBoxTestGenerated extends AbstractParcelizeBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/functions.kt"); } + @TestMetadata("genericParcelable.kt") + public void testGenericParcelable() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt"); + } + @TestMetadata("generics.kt") public void testGenerics() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/generics.kt"); @@ -260,6 +265,11 @@ public class ParcelizeBoxTestGenerated extends AbstractParcelizeBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays.kt"); } + @TestMetadata("nestedSparseArrays2.kt") + public void testNestedSparseArrays2() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt"); + } + @TestMetadata("newArray.kt") public void testNewArray() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/newArray.kt"); @@ -280,6 +290,11 @@ public class ParcelizeBoxTestGenerated extends AbstractParcelizeBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/nullableTypesSimple.kt"); } + @TestMetadata("objectWriteParcelable.kt") + public void testObjectWriteParcelable() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt"); + } + @TestMetadata("objects.kt") public void testObjects() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/objects.kt"); @@ -300,6 +315,16 @@ public class ParcelizeBoxTestGenerated extends AbstractParcelizeBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/primitiveTypes.kt"); } + @TestMetadata("privateConstructor.kt") + public void testPrivateConstructor() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt"); + } + + @TestMetadata("recursiveGenerics.kt") + public void testRecursiveGenerics() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt"); + } + @TestMetadata("sealedClass.kt") public void testSealedClass() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/sealedClass.kt"); @@ -324,4 +349,9 @@ public class ParcelizeBoxTestGenerated extends AbstractParcelizeBoxTest { public void testSparseBooleanArray() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/sparseBooleanArray.kt"); } + + @TestMetadata("typeParameters.kt") + public void testTypeParameters() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt"); + } } diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeIrBoxTestGenerated.java b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeIrBoxTestGenerated.java index c9c5ab69848..06c4793d5b9 100644 --- a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeIrBoxTestGenerated.java +++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/ParcelizeIrBoxTestGenerated.java @@ -120,6 +120,11 @@ public class ParcelizeIrBoxTestGenerated extends AbstractParcelizeIrBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/functions.kt"); } + @TestMetadata("genericParcelable.kt") + public void testGenericParcelable() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/genericParcelable.kt"); + } + @TestMetadata("generics.kt") public void testGenerics() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/generics.kt"); @@ -260,6 +265,11 @@ public class ParcelizeIrBoxTestGenerated extends AbstractParcelizeIrBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays.kt"); } + @TestMetadata("nestedSparseArrays2.kt") + public void testNestedSparseArrays2() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/nestedSparseArrays2.kt"); + } + @TestMetadata("newArray.kt") public void testNewArray() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/newArray.kt"); @@ -280,6 +290,11 @@ public class ParcelizeIrBoxTestGenerated extends AbstractParcelizeIrBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/nullableTypesSimple.kt"); } + @TestMetadata("objectWriteParcelable.kt") + public void testObjectWriteParcelable() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/objectWriteParcelable.kt"); + } + @TestMetadata("objects.kt") public void testObjects() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/objects.kt"); @@ -300,6 +315,16 @@ public class ParcelizeIrBoxTestGenerated extends AbstractParcelizeIrBoxTest { runTest("plugins/parcelize/parcelize-compiler/testData/box/primitiveTypes.kt"); } + @TestMetadata("privateConstructor.kt") + public void testPrivateConstructor() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/privateConstructor.kt"); + } + + @TestMetadata("recursiveGenerics.kt") + public void testRecursiveGenerics() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/recursiveGenerics.kt"); + } + @TestMetadata("sealedClass.kt") public void testSealedClass() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/sealedClass.kt"); @@ -324,4 +349,9 @@ public class ParcelizeIrBoxTestGenerated extends AbstractParcelizeIrBoxTest { public void testSparseBooleanArray() throws Exception { runTest("plugins/parcelize/parcelize-compiler/testData/box/sparseBooleanArray.kt"); } + + @TestMetadata("typeParameters.kt") + public void testTypeParameters() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/box/typeParameters.kt"); + } }