summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt46
1 files changed, 46 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt
new file mode 100644
index 00000000..5722e8df
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/JsonListPolymorphismTest.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.json.polymorphic
+
+import kotlinx.serialization.Polymorphic
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonTestBase
+import kotlin.test.Test
+import kotlin.test.assertFails
+
+class JsonListPolymorphismTest : JsonTestBase() {
+
+ @Serializable
+ internal data class ListWrapper(val list: List<@Polymorphic InnerBase>)
+
+ @Test
+ fun testPolymorphicValues() = assertJsonFormAndRestored(
+ ListWrapper.serializer(),
+ ListWrapper(listOf(InnerImpl(1), InnerImpl2(2))),
+ """{"list":[""" +
+ """{"type":"kotlinx.serialization.json.polymorphic.InnerImpl","field":1,"str":"default","nullable":null},""" +
+ """{"type":"kotlinx.serialization.json.polymorphic.InnerImpl2","field":2}]}""",
+ polymorphicRelaxedJson)
+
+ @Serializable
+ internal data class ListNullableWrapper(val list: List<@Polymorphic InnerBase?>)
+
+ @Test
+ fun testPolymorphicNullableValues() = assertJsonFormAndRestored(
+ ListNullableWrapper.serializer(),
+ ListNullableWrapper(listOf(InnerImpl(1), null)),
+ """{"list":[""" +
+ """{"type":"kotlinx.serialization.json.polymorphic.InnerImpl","field":1,"str":"default","nullable":null},""" +
+ "null]}",
+ polymorphicRelaxedJson)
+
+ @Test
+ fun testPolymorphicNullableValuesWithNonNullSerializerFails() =
+ parametrizedTest { jsonTestingMode ->
+ val wrapper = ListNullableWrapper(listOf(InnerImpl(1), null))
+ val serialized = polymorphicRelaxedJson.encodeToString(ListNullableWrapper.serializer(), wrapper, jsonTestingMode)
+ assertFails { polymorphicRelaxedJson.decodeFromString(ListWrapper.serializer(), serialized, jsonTestingMode) }
+ }
+}