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");
|
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
|
@Test
|
||||||
@TestMetadata("multipleProperties.kt")
|
@TestMetadata("multipleProperties.kt")
|
||||||
public void testMultipleProperties() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("multipleProperties.kt")
|
@TestMetadata("multipleProperties.kt")
|
||||||
public void testMultipleProperties() throws Exception {
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("metaSerializable.kt")
|
@TestMetadata("metaSerializable.kt")
|
||||||
public void testMetaSerializable() throws Exception {
|
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