From b35e8e208a09a53d7ae288656e05a6fb8a4efa48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Mon, 6 Apr 2020 12:49:53 +0200 Subject: [PATCH] Parcelize: Add a test for Parcelize with persistable bundles --- .../parcel/ParcelBoxTestGenerated.java | 5 +++ .../parcel/ParcelIrBoxTestGenerated.java | 5 +++ .../testData/parcel/box/persistableBundle.kt | 40 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt diff --git a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelBoxTestGenerated.java b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelBoxTestGenerated.java index 259df8d59da..0e5c9d3e2ff 100644 --- a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelBoxTestGenerated.java +++ b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelBoxTestGenerated.java @@ -209,6 +209,11 @@ public class ParcelBoxTestGenerated extends AbstractParcelBoxTest { runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/openParcelize.kt"); } + @TestMetadata("persistableBundle.kt") + public void testPersistableBundle() throws Exception { + runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt"); + } + @TestMetadata("primitiveTypes.kt") public void testPrimitiveTypes() throws Exception { runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/primitiveTypes.kt"); diff --git a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelIrBoxTestGenerated.java b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelIrBoxTestGenerated.java index eaa8a30d7b9..b0505645166 100644 --- a/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelIrBoxTestGenerated.java +++ b/plugins/android-extensions/android-extensions-compiler/test/org/jetbrains/kotlin/android/parcel/ParcelIrBoxTestGenerated.java @@ -209,6 +209,11 @@ public class ParcelIrBoxTestGenerated extends AbstractParcelIrBoxTest { runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/openParcelize.kt"); } + @TestMetadata("persistableBundle.kt") + public void testPersistableBundle() throws Exception { + runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt"); + } + @TestMetadata("primitiveTypes.kt") public void testPrimitiveTypes() throws Exception { runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/primitiveTypes.kt"); diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt new file mode 100644 index 00000000000..ef05266c19b --- /dev/null +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/persistableBundle.kt @@ -0,0 +1,40 @@ +// IGNORE_BACKEND: JVM +// See KT-38104 +// The support for PersistableBundles is broken on JVM. +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.android.parcel.* +import android.os.Parcel +import android.os.Parcelable +import android.os.BaseBundle +import android.os.PersistableBundle + +@Parcelize +data class User(val a: PersistableBundle) : Parcelable + +fun box() = parcelTest { parcel -> + val test = User( + PersistableBundle().apply { putLong("A", 1L) } + ) + test.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + + val test2 = readFromParcel(parcel) + + assert(compareBundles(test.a, test2.a)) +} + +private fun compareBundles(first: BaseBundle, second: BaseBundle): Boolean { + if (first.size() != second.size()) return false + + for (key in first.keySet()) { + if (first.get(key) != second.get(key)) return false + } + + return true +}