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