summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt96
1 files changed, 96 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt
new file mode 100644
index 00000000..d24c7d7c
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/json/LenientTest.kt
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.json
+
+import kotlinx.serialization.*
+import kotlinx.serialization.builtins.*
+import kotlinx.serialization.json.internal.*
+import kotlinx.serialization.test.assertFailsWithSerial
+import kotlin.test.*
+
+class LenientTest : JsonTestBase() {
+
+ @Serializable
+ data class Holder(val i: Int, val l: Long, val b: Boolean, val s: String)
+ val value = Holder(1, 2, true, "string")
+
+ @Serializable
+ data class ListHolder(val l: List<String>)
+ private val listValue = ListHolder(listOf("1", "2", "ss"))
+
+ @Test
+ fun testQuotedInt() = parametrizedTest {
+ val json = """{"i":"1", "l":2, "b":true, "s":"string"}"""
+ assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
+ assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
+ }
+
+ @Test
+ fun testQuotedLong() = parametrizedTest {
+ val json = """{"i":1, "l":"2", "b":true, "s":"string"}"""
+ assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
+ assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
+ }
+
+ @Test
+ fun testQuotedBoolean() = parametrizedTest {
+ val json = """{"i":1, "l":2, "b":"true", "s":"string"}"""
+ assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
+ assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
+ }
+
+ @Test
+ fun testUnquotedStringValue() = parametrizedTest {
+ val json = """{"i":1, "l":2, "b":true, "s":string}"""
+ assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(Holder.serializer(), json, it) }
+ assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
+ }
+
+ @Test
+ fun testUnquotedKey() = parametrizedTest {
+ val json = """{"i":1, "l":2, b:true, "s":"string"}"""
+ assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(Holder.serializer(), json, it) }
+ assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
+ }
+
+ @Test
+ fun testUnquotedStringInArray() = parametrizedTest {
+ val json = """{"l":[1, 2, ss]}"""
+ assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(ListHolder.serializer(), json, it) }
+ assertEquals(listValue, lenient.decodeFromString(ListHolder.serializer(), json, it))
+ }
+
+ @Serializable
+ data class StringWrapper(val s: String)
+
+ @Test
+ fun testNullsProhibited() = parametrizedTest {
+ assertEquals(StringWrapper("nul"), lenient.decodeFromString("""{"s":nul}""", it))
+ assertEquals(StringWrapper("null1"), lenient.decodeFromString("""{"s":null1}""", it))
+ assertFailsWithSerial("JsonDecodingException") { lenient.decodeFromString<StringWrapper>("""{"s":null}""", it) }
+ }
+
+ @Serializable
+ data class NullableString(val s: String?)
+
+ @Test
+ fun testNullsAllowed() = parametrizedTest {
+ assertEquals(NullableString("nul"), lenient.decodeFromString("""{"s":nul}""", it))
+ assertEquals(NullableString("null1"), lenient.decodeFromString("""{"s":null1}""", it))
+ assertEquals(NullableString(null), lenient.decodeFromString("""{"s":null}""", it))
+ assertEquals(NullableString("null"), lenient.decodeFromString("""{"s":"null"}""", it))
+ assertEquals(NullableString("null"), lenient.decodeFromString("""{"s":"null" }""", it))
+ assertEquals(NullableString("null "), lenient.decodeFromString("""{"s":"null " }""", it))
+ }
+
+ @Test
+ fun testTopLevelNulls() = parametrizedTest {
+ assertEquals("nul", lenient.decodeFromString("""nul""", it))
+ assertEquals("null1", lenient.decodeFromString("""null1""", it))
+ assertEquals(null, lenient.decodeFromString(String.serializer().nullable, """null""", it))
+ assertEquals("null", lenient.decodeFromString(""""null"""", it))
+ assertEquals("null ", lenient.decodeFromString(""""null """", it))
+ }
+}