summaryrefslogtreecommitdiff
path: root/formats/json/commonTest
diff options
context:
space:
mode:
authorLeonid Startsev <sandwwraith@users.noreply.github.com>2021-12-15 18:55:06 +0300
committerGitHub <noreply@github.com>2021-12-15 18:55:06 +0300
commita33ef021ae479949a7663cd82cfbc32026a2c9de (patch)
tree5d90f45164f1211fb2bd2cf9f4d204271d6c05e6 /formats/json/commonTest
parent1b2344f3254a234324e406f790bb7335c5bd397a (diff)
downloadkotlinx.serialization-a33ef021ae479949a7663cd82cfbc32026a2c9de.tar.gz
Properly handle top-level value classes in encodeToJsonElement (#1777)
Fixes #1774
Diffstat (limited to 'formats/json/commonTest')
-rw-r--r--formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt56
1 files changed, 53 insertions, 3 deletions
diff --git a/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt b/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt
index 667094d4..1eedafae 100644
--- a/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt
+++ b/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt
@@ -15,6 +15,7 @@ import kotlinx.serialization.*
import kotlinx.serialization.builtins.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.json.*
+import kotlinx.serialization.modules.*
import kotlinx.serialization.test.*
import kotlin.jvm.*
import kotlin.test.*
@@ -72,12 +73,61 @@ value class ResourceId(val id: String)
value class ResourceType(val type: String)
@Serializable
-data class ResourceIdentifier(val id: ResourceId, val type: ResourceType)
+@JvmInline
+value class ResourceKind(val kind: SampleEnum)
+
+@Serializable
+data class ResourceIdentifier(val id: ResourceId, val type: ResourceType, val type2: ValueWrapper)
+
+@Serializable @JvmInline
+value class ValueWrapper(val wrapped: ResourceType)
class InlineClassesTest : JsonTestBase() {
private val precedent: UInt = Int.MAX_VALUE.toUInt() + 10.toUInt()
@Test
+ fun testTopLevel() = noLegacyJs {
+ assertJsonFormAndRestored(
+ ResourceType.serializer(),
+ ResourceType("foo"),
+ """"foo"""",
+ )
+ }
+
+ @Test
+ fun testTopLevelOverEnum() = noLegacyJs {
+ assertJsonFormAndRestored(
+ ResourceKind.serializer(),
+ ResourceKind(SampleEnum.OptionC),
+ """"OptionC"""",
+ )
+ }
+
+ @Test
+ fun testTopLevelWrapper() = noLegacyJs {
+ assertJsonFormAndRestored(
+ ValueWrapper.serializer(),
+ ValueWrapper(ResourceType("foo")),
+ """"foo"""",
+ )
+ }
+
+ @Test
+ fun testTopLevelContextual() = noLegacyJs {
+ val module = SerializersModule {
+ contextual<ResourceType>(ResourceType.serializer())
+ }
+ val json = Json(default) { serializersModule = module }
+ assertJsonFormAndRestored(
+ ContextualSerializer(ResourceType::class),
+ ResourceType("foo"),
+ """"foo"""",
+ json
+ )
+ }
+
+
+ @Test
fun testSimpleContainer() = noLegacyJs {
assertJsonFormAndRestored(
SimpleContainerForUInt.serializer(),
@@ -106,8 +156,8 @@ class InlineClassesTest : JsonTestBase() {
fun testInlineClassesWithStrings() = noLegacyJs {
assertJsonFormAndRestored(
ResourceIdentifier.serializer(),
- ResourceIdentifier(ResourceId("resId"), ResourceType("resType")),
- """{"id":"resId","type":"resType"}"""
+ ResourceIdentifier(ResourceId("resId"), ResourceType("resType"), ValueWrapper(ResourceType("wrappedType"))),
+ """{"id":"resId","type":"resType","type2":"wrappedType"}"""
)
}