diff options
author | Leonid Startsev <sandwwraith@users.noreply.github.com> | 2021-12-15 18:55:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-15 18:55:06 +0300 |
commit | a33ef021ae479949a7663cd82cfbc32026a2c9de (patch) | |
tree | 5d90f45164f1211fb2bd2cf9f4d204271d6c05e6 /formats/json/commonTest | |
parent | 1b2344f3254a234324e406f790bb7335c5bd397a (diff) | |
download | kotlinx.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.kt | 56 |
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"}""" ) } |