• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3  */
4 
5 package kotlinx.serialization.json
6 
7 import kotlinx.serialization.*
8 import kotlinx.serialization.builtins.*
9 import kotlinx.serialization.json.internal.*
10 import kotlinx.serialization.test.assertFailsWithSerial
11 import kotlin.test.*
12 
13 class LenientTest : JsonTestBase() {
14 
15     @Serializable
16     data class Holder(val i: Int, val l: Long, val b: Boolean, val s: String)
17     val value = Holder(1, 2, true, "string")
18 
19     @Serializable
20     data class ListHolder(val l: List<String>)
21     private val listValue = ListHolder(listOf("1", "2", "ss"))
22 
23     @Test
<lambda>null24     fun testQuotedInt() = parametrizedTest {
25         val json = """{"i":"1", "l":2, "b":true, "s":"string"}"""
26         assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
27         assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
28     }
29 
30     @Test
testQuotedLongnull31     fun testQuotedLong() = parametrizedTest {
32         val json = """{"i":1, "l":"2", "b":true, "s":"string"}"""
33         assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
34         assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
35     }
36 
37     @Test
<lambda>null38     fun testQuotedBoolean() = parametrizedTest {
39         val json = """{"i":1, "l":2, "b":"true", "s":"string"}"""
40         assertEquals(value, default.decodeFromString(Holder.serializer(), json, it))
41         assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
42     }
43 
44     @Test
<lambda>null45     fun testUnquotedStringValue() = parametrizedTest {
46         val json = """{"i":1, "l":2, "b":true, "s":string}"""
47         assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(Holder.serializer(), json, it) }
48         assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
49     }
50 
51     @Test
<lambda>null52     fun testUnquotedKey() = parametrizedTest {
53         val json = """{"i":1, "l":2, b:true, "s":"string"}"""
54         assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(Holder.serializer(), json, it) }
55         assertEquals(value, lenient.decodeFromString(Holder.serializer(), json, it))
56     }
57 
58     @Test
testUnquotedStringInArraynull59     fun testUnquotedStringInArray() = parametrizedTest {
60         val json = """{"l":[1, 2, ss]}"""
61         assertFailsWithSerial("JsonDecodingException") { default.decodeFromString(ListHolder.serializer(), json, it) }
62         assertEquals(listValue, lenient.decodeFromString(ListHolder.serializer(), json, it))
63     }
64 
65     @Serializable
66     data class StringWrapper(val s: String)
67 
68     @Test
<lambda>null69     fun testNullsProhibited() = parametrizedTest {
70         assertEquals(StringWrapper("nul"), lenient.decodeFromString("""{"s":nul}""", it))
71         assertEquals(StringWrapper("null1"), lenient.decodeFromString("""{"s":null1}""", it))
72         assertFailsWithSerial("JsonDecodingException") { lenient.decodeFromString<StringWrapper>("""{"s":null}""", it) }
73     }
74 
75     @Serializable
76     data class NullableString(val s: String?)
77 
78     @Test
<lambda>null79     fun testNullsAllowed() = parametrizedTest {
80         assertEquals(NullableString("nul"), lenient.decodeFromString("""{"s":nul}""", it))
81         assertEquals(NullableString("null1"), lenient.decodeFromString("""{"s":null1}""", it))
82         assertEquals(NullableString(null), lenient.decodeFromString("""{"s":null}""", it))
83         assertEquals(NullableString("null"), lenient.decodeFromString("""{"s":"null"}""", it))
84         assertEquals(NullableString("null"), lenient.decodeFromString("""{"s":"null"     }""", it))
85         assertEquals(NullableString("null  "), lenient.decodeFromString("""{"s":"null  "     }""", it))
86     }
87 
88     @Test
<lambda>null89     fun testTopLevelNulls() = parametrizedTest {
90         assertEquals("nul", lenient.decodeFromString("""nul""", it))
91         assertEquals("null1", lenient.decodeFromString("""null1""", it))
92         assertEquals(null, lenient.decodeFromString(String.serializer().nullable, """null""", it))
93         assertEquals("null", lenient.decodeFromString(""""null"""", it))
94         assertEquals("null   ", lenient.decodeFromString(""""null   """", it))
95     }
96 }
97