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 sample
6 
7 import kotlinx.serialization.json.Json
8 import kotlinx.serialization.modules.SerializersModule
9 import kotlinx.serialization.modules.polymorphic
10 import kotlinx.serialization.modules.subclass
11 import kotlin.test.Test
12 import kotlin.test.assertEquals
13 
14 class AbstractBaseTest {
15     @Test
concreteClassTestnull16     fun concreteClassTest() {
17         val concrete = EmptyClassA()
18         val serialized: String = Json.encodeToString(EmptyClassA.serializer(), concrete)
19         // to ensure that parsed without exceptions
20         val parsed: EmptyClassA = Json.decodeFromString(EmptyClassA.serializer(), serialized)
21     }
22 
23     @Test
stubConcreteClassTestnull24     fun stubConcreteClassTest() {
25         val concrete = EmptyClassB()
26         val serialized: String = Json.encodeToString(EmptyClassB.serializer(), concrete)
27         // to ensure that parsed without exceptions
28         val parsed: EmptyClassB = Json.decodeFromString(EmptyClassB.serializer(), serialized)
29     }
30 
31     @Test
testCrossModuleInheritancenull32     fun testCrossModuleInheritance() {
33         val json = Json { allowStructuredMapKeys = true; encodeDefaults = true }
34 
35         val car = Car()
36         car.maxSpeed = 100
37         car.name = "ford"
38         val s = json.encodeToString(Car.serializer(), car)
39         assertEquals("""{"name":"ford","color":null,"maxSpeed":100}""", s)
40         val restoredCar = json.decodeFromString(Car.serializer(), s)
41         assertEquals(car, restoredCar)
42     }
43 
44     @Test
testCrossModuleAbstractInheritancenull45     fun testCrossModuleAbstractInheritance() {
46         val snippetModule = SerializersModule {
47             polymorphic(Snippet::class) {
48                 subclass(ScreenSnippet.serializer())
49                 subclass(TestSnippet.serializer())
50             }
51         }
52 
53         val json = Json {
54             serializersModule = snippetModule
55             encodeDefaults = true
56         }
57 
58         val testSnippet = TestSnippet(emptyList())
59         val screenSnippet = ScreenSnippet("one", "two", "three")
60         val s = json.encodeToString(TestSnippet.serializer(), testSnippet)
61         assertEquals(testSnippet, json.decodeFromString(TestSnippet.serializer(), s))
62         assertEquals("""{"objectFieldName":"test","aaa":"aaa","experiments":[]}""",
63             json.encodeToString(TestSnippet.serializer(), testSnippet)
64         )
65         assertStringFormAndRestored("""{"objectFieldName":"screen","aaa":"aaa","name":"one","uuid":"two","source":"three"}""",
66             screenSnippet,
67             ScreenSnippet.serializer(),
68             json
69         )
70     }
71 
72     @Test
testPropertiesNotInConstructornull73     fun testPropertiesNotInConstructor() {
74         assertStringFormAndRestored("""{"b":"val b","a":"val a","c":"val c"}""", NotInConstructorTest(), NotInConstructorTest.serializer())
75     }
76 }
77