-
Notifications
You must be signed in to change notification settings - Fork 613
/
PropertyInitializerTest.kt
105 lines (92 loc) · 3.36 KB
/
PropertyInitializerTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@file:Suppress("MayBeConstant")
package kotlinx.serialization.features
import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import kotlin.test.Test
import kotlin.test.assertEquals
internal val globalVar: Int = 4
internal fun globalFun(): Int {
return 7
}
internal const val PROPERTY_INITIALIZER_JSON = """{
"valProperty": 1,
"varProperty": 2,
"literalConst": 3,
"globalVarRef": 4,
"computed": 5,
"doubleRef": 6,
"globalFun": 7,
"globalFunExpr": 8,
"itExpr": 9,
"transientRefFromProp": 10,
"bodyProp": 11,
"dependBodyProp": 12,
"getterDepend": 13
}"""
@Suppress("MemberVisibilityCanBePrivate", "unused", "ComplexRedundantLet")
class PropertyInitializerTest {
@Serializable
data class InternalClass(
val valProperty: Int,
var varProperty: Int,
val literalConst: Int = 3,
val globalVarRef: Int = globalVar,
val computed: Int = valProperty + varProperty + 2,
val doubleRef: Int = literalConst + literalConst,
var globalFun: Int = globalFun(),
var globalFunExpr: Int = globalFun() + 1,
val itExpr: Int = literalConst.let { it + 6 },
@Transient val constTransient: Int = 6,
@Transient val serializedRefTransient: Int = varProperty + 1,
@Transient val refTransient: Int = serializedRefTransient,
val transientRefFromProp: Int = constTransient + 4,
) {
val valGetter: Int get() { return 5 }
var bodyProp: Int = 11
var dependBodyProp: Int = bodyProp + 1
var getterDepend: Int = valGetter + 8
}
private val format = Json { encodeDefaults = true; prettyPrint = true }
data class ExternalClass(
val valProperty: Int,
var varProperty: Int,
val literalConst: Int = 3,
val globalVarRef: Int = globalVar,
val computed: Int = valProperty + varProperty + 2,
val doubleRef: Int = literalConst + literalConst,
var globalFun: Int = globalFun(),
var globalFunExpr: Int = globalFun() + 1,
val itExpr: Int = literalConst.let { it + 6 },
@Transient val constTransient: Int = 6,
@Transient val serializedRefTransient: Int = varProperty + 1,
@Transient val refTransient: Int = serializedRefTransient,
val transientRefFromProp: Int = constTransient + 4,
) {
val valGetter: Int get() { return 5 }
var bodyProp: Int = 11
var dependBodyProp: Int = bodyProp + 1
var getterDepend: Int = valGetter + 8
}
@Serializer(ExternalClass::class)
object ExternalSerializer
@Test
fun testInternalSerializeDefault() {
val encoded = format.encodeToString(InternalClass(1, 2))
assertEquals(PROPERTY_INITIALIZER_JSON, encoded)
}
@Test
fun testInternalDeserializeDefault() {
val decoded = format.decodeFromString<InternalClass>("""{"valProperty": 5, "varProperty": 6}""")
assertEquals(InternalClass(5, 6), decoded)
}
@Test
fun testExternalSerializeDefault() {
val encoded = format.encodeToString(ExternalSerializer, ExternalClass(1, 2))
assertEquals(PROPERTY_INITIALIZER_JSON, encoded)
}
@Test
fun testExternalDeserializeDefault() {
val decoded = format.decodeFromString(ExternalSerializer,"""{"valProperty": 5, "varProperty": 6}""")
assertEquals(ExternalClass(5, 6), decoded)
}
}