summaryrefslogtreecommitdiff
path: root/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt')
-rw-r--r--formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt44
1 files changed, 44 insertions, 0 deletions
diff --git a/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt b/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt
new file mode 100644
index 00000000..ebed6f37
--- /dev/null
+++ b/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializerForNullableJavaTypeTest.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization
+
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.*
+import kotlinx.serialization.json.*
+import org.junit.Test
+import java.util.*
+import kotlin.test.*
+
+class SerializerForNullableJavaTypeTest {
+
+ // User-reported generic serialization
+ class DateSerializer : KSerializer<Date?> {
+
+ override val descriptor = PrimitiveSerialDescriptor("LocalTime?", PrimitiveKind.LONG).nullable
+
+ override fun deserialize(decoder: Decoder): Date? = when (val seconds = decoder.decodeLong()) {
+ -1L -> null
+ else -> Date(seconds)
+ }
+
+ override fun serialize(encoder: Encoder, value: Date?) {
+ when (value) {
+ null -> encoder.encodeLong(-1L) //this line is never reached despite that nulls exist in serialized lists
+ else -> encoder.encodeLong(value.toInstant().toEpochMilli())
+ }
+ }
+ }
+
+ @Serializable
+ private data class ListWrapper(val times: List<@Serializable(with = DateSerializer::class) Date?>)
+
+ @Test
+ fun testMixedList() {
+ val data = ListWrapper(listOf(Date(42), null))
+ val str = Json.encodeToString(data)
+ assertEquals("""{"times":[42,-1]}""", str)
+ assertEquals(data, Json.decodeFromString(str))
+ }
+}