diff options
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.kt | 105 |
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) + } +} |