Skip to content

Commit 48cf9e8

Browse files
authored
Added tests on calculated default value of properties depending on other properties
Tests for internal and external serializable classes. The default values for constructor properties, transient properties, body properties are checked
1 parent 98ead98 commit 48cf9e8

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

formats/json/build.gradle

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

0 commit comments

Comments
 (0)