diff options
author | Leonid Startsev <sandwwraith@gmail.com> | 2022-09-27 20:44:30 +0200 |
---|---|---|
committer | Leonid Startsev <sandwwraith@users.noreply.github.com> | 2022-10-04 16:09:04 +0300 |
commit | 182c53e3c9f0132203441f8f496083660076e8bf (patch) | |
tree | a7b963108017ea00de641195a67e2b77ccb8403c /formats/json-tests | |
parent | 98529cd8e2ce83c83aacdcfa7b054d577618ef39 (diff) | |
download | kotlinx.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.kt | 94 |
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#"}""" + ) + } +} |