Add tests for value classes serialization
apparently they're already working in FIR
This commit is contained in:
+6
@@ -55,6 +55,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/enums.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClasses.kt")
|
||||
public void testInlineClasses() throws Exception {
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleProperties.kt")
|
||||
public void testMultipleProperties() throws Exception {
|
||||
|
||||
+6
@@ -54,6 +54,12 @@ public class SerializationFirMembersTestGenerated extends AbstractSerializationF
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/enums.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClasses.kt")
|
||||
public void testInlineClasses() throws Exception {
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("multipleProperties.kt")
|
||||
public void testMultipleProperties() throws Exception {
|
||||
|
||||
+6
@@ -49,6 +49,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/generics.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineClasses.kt")
|
||||
public void testInlineClasses() throws Exception {
|
||||
runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/inlineClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("metaSerializable.kt")
|
||||
public void testMetaSerializable() throws Exception {
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.internal.*
|
||||
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class Foo(val i: Int)
|
||||
|
||||
@Serializable
|
||||
class Holder(val f: Foo)
|
||||
|
||||
fun box(): String {
|
||||
if(!Foo.serializer().descriptor.isInline) return "Incorrect descriptor"
|
||||
val s = Json.encodeToString(Holder.serializer(), Holder(Foo(42)))
|
||||
if (s != """{"f":42}""") return s
|
||||
return "OK"
|
||||
}
|
||||
plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.fir.txt
Vendored
+77
@@ -0,0 +1,77 @@
|
||||
FILE: inlineClasses.kt
|
||||
@R|kotlinx/serialization/Serializable|() @R|kotlin/jvm/JvmInline|() public final inline class Foo : R|kotlin/Any| {
|
||||
public constructor(i: R|kotlin/Int|): R|Foo| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val i: R|kotlin/Int| = R|<local>/i|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Foo>|
|
||||
|
||||
private constructor(): R|Foo.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Foo>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Foo|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Foo|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Foo.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Holder : R|kotlin/Any| {
|
||||
public constructor(f: R|Foo|): R|Holder| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val f: R|Foo| = R|<local>/f|
|
||||
public get(): R|Foo|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Holder>|
|
||||
|
||||
private constructor(): R|Holder.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Holder>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Holder|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Holder|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Holder.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
when () {
|
||||
Q|Foo|.R|/Foo.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.isInline|.R|kotlin/Boolean.not|() -> {
|
||||
^box String(Incorrect descriptor)
|
||||
}
|
||||
}
|
||||
|
||||
lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Holder|>(Q|Holder|.R|/Holder.Companion.serializer|(), R|/Holder.Holder|(R|/Foo.Foo|(Int(42))))
|
||||
when () {
|
||||
!=(R|<local>/s|, String({"f":42})) -> {
|
||||
^box R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
^box String(OK)
|
||||
}
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.internal.*
|
||||
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class Foo(val i: Int)
|
||||
|
||||
@Serializable
|
||||
class Holder(val f: Foo)
|
||||
|
||||
fun box(): String {
|
||||
if(!Foo.serializer().descriptor.isInline) return "Incorrect descriptor"
|
||||
val s = Json.encodeToString(Holder.serializer(), Holder(Foo(42)))
|
||||
if (s != """{"f":42}""") return s
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user