summaryrefslogtreecommitdiff
path: root/formats/json-tests
diff options
context:
space:
mode:
authorLeonid Startsev <sandwwraith@gmail.com>2022-09-27 20:44:30 +0200
committerLeonid Startsev <sandwwraith@users.noreply.github.com>2022-10-04 16:09:04 +0300
commit182c53e3c9f0132203441f8f496083660076e8bf (patch)
treea7b963108017ea00de641195a67e2b77ccb8403c /formats/json-tests
parent98529cd8e2ce83c83aacdcfa7b054d577618ef39 (diff)
downloadkotlinx.serialization-182c53e3c9f0132203441f8f496083660076e8bf.tar.gz
Add documentation on using typealias for means of global configuration
Also add tests on various `@Serializable` applications Apply suggestions from code review Co-authored-by: Vsevolod Tolstopyatov <qwwdfsad@gmail.com>
Diffstat (limited to 'formats/json-tests')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/SerializableOnPropertyTypeAndTypealiasTest.kt94
1 files changed, 94 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/SerializableOnPropertyTypeAndTypealiasTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/SerializableOnPropertyTypeAndTypealiasTest.kt
new file mode 100644
index 00000000..d6f14bd9
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/SerializableOnPropertyTypeAndTypealiasTest.kt
@@ -0,0 +1,94 @@
+package kotlinx.serialization
+
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.*
+import kotlinx.serialization.json.*
+import kotlin.test.*
+
+@Serializable
+data class WithDefault(val s: String)
+
+@Serializable(SerializerA::class)
+data class WithoutDefault(val s: String)
+
+object SerializerA : KSerializer<WithoutDefault> {
+ override val descriptor: SerialDescriptor
+ get() = PrimitiveSerialDescriptor("Bruh", PrimitiveKind.STRING)
+
+ override fun serialize(encoder: Encoder, value: WithoutDefault) {
+ encoder.encodeString(value.s)
+ }
+
+ override fun deserialize(decoder: Decoder): WithoutDefault {
+ return WithoutDefault(decoder.decodeString())
+ }
+}
+
+object SerializerB : KSerializer<WithoutDefault> {
+ override val descriptor: SerialDescriptor
+ get() = PrimitiveSerialDescriptor("Bruh", PrimitiveKind.STRING)
+
+ override fun serialize(encoder: Encoder, value: WithoutDefault) {
+ encoder.encodeString(value.s + "#")
+ }
+
+ override fun deserialize(decoder: Decoder): WithoutDefault {
+ return WithoutDefault(decoder.decodeString().removeSuffix("#"))
+ }
+}
+
+object SerializerC : KSerializer<WithDefault> {
+ override val descriptor: SerialDescriptor
+ get() = PrimitiveSerialDescriptor("Bruh", PrimitiveKind.STRING)
+
+ override fun serialize(encoder: Encoder, value: WithDefault) {
+ encoder.encodeString(value.s + "#")
+ }
+
+ override fun deserialize(decoder: Decoder): WithDefault {
+ return WithDefault(decoder.decodeString().removeSuffix("#"))
+ }
+}
+
+typealias WithoutDefaultAlias = @Serializable(SerializerB::class) WithoutDefault
+typealias WithDefaultAlias = @Serializable(SerializerC::class) WithDefault
+
+@Serializable
+data class TesterWithoutDefault(
+ val b1: WithoutDefault,
+ @Serializable(SerializerB::class) val b2: WithoutDefault,
+ val b3: @Serializable(SerializerB::class) WithoutDefault,
+ val b4: WithoutDefaultAlias
+)
+
+@Serializable
+data class TesterWithDefault(
+ val b1: WithDefault,
+ @Serializable(SerializerC::class) val b2: WithDefault,
+ val b3: @Serializable(SerializerC::class) WithDefault,
+ val b4: WithDefaultAlias
+)
+
+class SerializableOnPropertyTypeAndTypealiasTest : JsonTestBase() {
+
+ @Test
+ fun testWithDefault() {
+ val t = TesterWithDefault(WithDefault("a"), WithDefault("b"), WithDefault("c"), WithDefault("d"))
+ assertJsonFormAndRestored(
+ TesterWithDefault.serializer(),
+ t,
+ """{"b1":{"s":"a"},"b2":"b#","b3":"c#","b4":"d#"}"""
+ )
+ }
+
+ @Test
+ @Ignore // TODO: Unignore in 1.8.20 (#1895)
+ fun testWithoutDefault() {
+ val t = TesterWithoutDefault(WithoutDefault("a"), WithoutDefault("b"), WithoutDefault("c"), WithoutDefault("d"))
+ assertJsonFormAndRestored(
+ TesterWithoutDefault.serializer(),
+ t,
+ """{"b1":"a","b2":"b#","b3":"c#","b4":"d#"}"""
+ )
+ }
+}