summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt105
1 files changed, 105 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt
new file mode 100644
index 00000000..f33069b8
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/features/PropertyInitializerTest.kt
@@ -0,0 +1,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)
+ }
+}