• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3  */
4 
5 package kotlinx.serialization.features
6 
7 import kotlinx.serialization.*
8 import kotlinx.serialization.json.*
9 import kotlinx.serialization.modules.*
10 import kotlinx.serialization.test.*
11 import kotlin.test.*
12 
13 class ObjectSerializationTest : JsonTestBase() {
14 
15     sealed class ApiResponse {
16         @Serializable
17         @SerialName("ApiError")
18         object Error : ApiResponse()
19 
20         @Serializable
21         @SerialName("ApiResponse")
22         data class Response(val message: String) : ApiResponse()
23     }
24 
25     @Serializable
26     data class ApiCarrier(@Polymorphic val response: ApiResponse)
27 
<lambda>null28     val module = SerializersModule {
29         polymorphic(ApiResponse::class) {
30             subclass(ApiResponse.Error.serializer())
31             subclass(ApiResponse.Response.serializer())
32         }
33     }
34 
<lambda>null35     val json = Json { serializersModule = module }
36 
37     @Test
testSealedClassSerializationnull38     fun testSealedClassSerialization() {
39         val carrier1 = ApiCarrier(ApiResponse.Error)
40         val carrier2 = ApiCarrier(ApiResponse.Response("OK"))
41         assertJsonFormAndRestored(ApiCarrier.serializer(), carrier1, """{"response":{"type":"ApiError"}}""", json)
42         assertJsonFormAndRestored(
43             ApiCarrier.serializer(),
44             carrier2,
45             """{"response":{"type":"ApiResponse","message":"OK"}}""",
46             json
47         )
48     }
49 
50     @Test
testUnknownKeysnull51     fun testUnknownKeys() {
52         val string = """{"metadata":"foo"}"""
53         assertFailsWithMessage<SerializationException>("ignoreUnknownKeys") {
54             Json.decodeFromString(
55                 ApiResponse.Error.serializer(),
56                 string
57             )
58         }
59         val json = Json { ignoreUnknownKeys = true }
60         assertEquals(ApiResponse.Error, json.decodeFromString(ApiResponse.Error.serializer(), string))
61     }
62 }
63