summaryrefslogtreecommitdiff
path: root/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt')
-rw-r--r--formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt93
1 files changed, 93 insertions, 0 deletions
diff --git a/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt b/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt
new file mode 100644
index 00000000..cbef36f3
--- /dev/null
+++ b/formats/json-tests/jvmTest/src/kotlinx/serialization/SerializationCasesTest.kt
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2018 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package kotlinx.serialization
+
+import kotlinx.serialization.json.*
+import org.junit.*
+import org.junit.Assert.*
+
+class SerializationCasesTest : JsonTestBase() {
+
+ @Serializable
+ data class Data1(val a: Int, val b: Int)
+
+ @Serializer(forClass = Data1::class)
+ object ExtDataSerializer1
+
+ @Test
+ fun testConstructorValProperties() {
+ val data = Data1(1, 2)
+
+ // Serialize with internal serializer for Data class
+ assertEquals("""{"a":1,"b":2}""", default.encodeToString(data))
+ assertEquals(data, Json.decodeFromString<Data1>("""{"a":1,"b":2}"""))
+
+ // Serialize with external serializer for Data class
+ assertEquals("""{"a":1,"b":2}""", default.encodeToString(ExtDataSerializer1, data))
+ assertEquals(data, Json.decodeFromString(ExtDataSerializer1, """{"a":1,"b":2}"""))
+ }
+
+ @Serializable
+ class Data2 {
+ var a = 0
+ var b = 0
+ override fun equals(other: Any?) = other is Data2 && other.a == a && other.b == b
+ }
+
+ @Serializer(forClass=Data2::class)
+ object ExtDataSerializer2
+
+ @Test
+ fun testBodyVarProperties() {
+ val data = Data2().apply {
+ a = 1
+ b = 2
+ }
+
+ // Serialize with internal serializer for Data class
+ assertEquals("""{"a":1,"b":2}""", default.encodeToString(data))
+ assertEquals(data, Json.decodeFromString<Data2>("""{"a":1,"b":2}"""))
+
+ // Serialize with external serializer for Data class
+ assertEquals("""{"a":1,"b":2}""", default.encodeToString(ExtDataSerializer2, data))
+ assertEquals(data, Json.decodeFromString(ExtDataSerializer2, """{"a":1,"b":2}"""))
+ }
+
+ enum class TintEnum { LIGHT, DARK }
+
+ @Serializable
+ data class Data3(
+ val a: String,
+ val b: List<Int>,
+ val c: Map<String, TintEnum>
+ )
+
+ // Serialize with external serializer for Data class
+ @Serializer(forClass = Data3::class)
+ object ExtDataSerializer3
+
+ @Test
+ fun testNestedValues() {
+ val data = Data3("Str", listOf(1, 2), mapOf("lt" to TintEnum.LIGHT, "dk" to TintEnum.DARK))
+ // Serialize with internal serializer for Data class
+ val expected = """{"a":"Str","b":[1,2],"c":{"lt":"LIGHT","dk":"DARK"}}"""
+ assertEquals(expected, default.encodeToString(data))
+ assertEquals(data, Json.decodeFromString<Data3>(expected))
+ assertEquals(expected, default.encodeToString(ExtDataSerializer3, data))
+ assertEquals(data, Json.decodeFromString(ExtDataSerializer3, expected))
+ }
+}