summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt135
1 files changed, 135 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt
new file mode 100644
index 00000000..96972f92
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/features/inline/InlineClassesCompleteTest.kt
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+@file:Suppress("INLINE_CLASSES_NOT_SUPPORTED", "SERIALIZER_NOT_FOUND")
+
+package kotlinx.serialization.features.inline
+
+import kotlinx.serialization.*
+import kotlinx.serialization.Box
+import kotlinx.serialization.test.*
+import kotlin.jvm.*
+import kotlin.test.*
+
+@Serializable
+@JvmInline
+value class MyInt(val i: Int)
+
+@Serializable
+@JvmInline value class NullableMyInt(val i: Int?)
+
+@Serializable
+@JvmInline value class OverSerializable(val s: IntData)
+
+@Serializable
+@JvmInline value class OverSerializableNullable(val s: IntData?)
+
+@Serializable
+@JvmInline value class WithT<T>(val t: Box<T>)
+
+@Serializable
+@JvmInline value class WithTNullable<T>(val t: Box<T>?)
+
+@Serializable
+data class WithAll(
+ val myInt: MyInt, // I
+ val myIntNullable: MyInt?, // LMyInt;
+ val nullableMyInt: NullableMyInt, //Ljava/lang/Integer;
+ val nullableMyIntNullable: NullableMyInt?, // LNullableMyInt
+ val overSerializable: OverSerializable, // LIntData;
+ val overSerializableNullable: OverSerializable?, // LIntData;
+ val nullableOverSerializable: OverSerializableNullable, // LIntData;
+ val nullableOverSerializableNullable: OverSerializableNullable?, // LOverSerializableNullable;
+ val withT: WithT<Int>, // LBox;
+ val withTNullable: WithT<Int>?, // LBox
+ val withNullableTNullable: WithT<Int?>?, // LBox;
+ val withTNullableTNullable: WithTNullable<Int?>? // LWithTNullable;
+)
+
+@Serializable
+data class WithGenerics(
+ val myInt: Box<MyInt>,
+ val myIntNullable: Box<MyInt?>,
+ val nullableMyInt: Box<NullableMyInt>,
+ val nullableMyIntNullable: Box<NullableMyInt?>,
+ val overSerializable: Box<OverSerializable>,
+ val overSerializableNullable: Box<OverSerializable?>,
+ val nullableOverSerializable: Box<OverSerializableNullable>,
+ val nullableOverSerializableNullable: Box<OverSerializableNullable?>,
+ val boxInBox: Box<WithT<Int>>
+)
+
+class InlineClassesCompleteTest {
+ @Test
+ fun testAllVariantsWithoutNull() {
+ val withAll = WithAll(
+ MyInt(1),
+ MyInt(2),
+ NullableMyInt(3),
+ NullableMyInt(4),
+ OverSerializable(IntData(5)),
+ OverSerializable(IntData(6)),
+ OverSerializableNullable(IntData(7)),
+ OverSerializableNullable(IntData(8)),
+ WithT(Box(9)),
+ WithT(Box(10)),
+ WithT(Box(11)),
+ WithTNullable(Box(12))
+ )
+ assertSerializedAndRestored(withAll, WithAll.serializer())
+ }
+
+ @Test
+ fun testAllVariantsWithNull() {
+ assertSerializedAndRestored(
+ WithAll(
+ MyInt(1),
+ null,
+ NullableMyInt(null),
+ null,
+ OverSerializable(IntData(5)),
+ null,
+ OverSerializableNullable(null),
+ null,
+ WithT(Box(9)),
+ null,
+ WithT(Box(null)),
+ WithTNullable(Box(null))
+ ), WithAll.serializer()
+ )
+ }
+
+ @Test
+ fun testAllGenericVariantsWithoutNull() {
+ assertSerializedAndRestored(
+ WithGenerics(
+ Box(MyInt(1)),
+ Box(MyInt(2)),
+ Box(NullableMyInt(3)),
+ Box(NullableMyInt(4)),
+ Box(OverSerializable(IntData(5))),
+ Box(OverSerializable(IntData(6))),
+ Box(OverSerializableNullable(IntData(7))),
+ Box(OverSerializableNullable(IntData(8))),
+ Box(WithT(Box(9)))
+ ), WithGenerics.serializer()
+ )
+ }
+
+ @Test
+ fun testAllGenericVariantsWithNull() {
+ assertSerializedAndRestored(
+ WithGenerics(
+ Box(MyInt(1)),
+ Box(null),
+ Box(NullableMyInt(null)),
+ Box(null),
+ Box(OverSerializable(IntData(5))),
+ Box(null),
+ Box(OverSerializableNullable(null)),
+ Box(null),
+ Box(WithT(Box(9)))
+ ), WithGenerics.serializer()
+ )
+ }
+}