Skip to content

Commit fe34484

Browse files
committed
Add a (failing) test for contextual serializers usage
1 parent 9ff7e03 commit fe34484

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2019-2021 JetBrains s.r.o.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
package kotlinx.datetime.serialization.test
7+
8+
import kotlinx.datetime.*
9+
import kotlinx.datetime.serializers.*
10+
import kotlinx.serialization.Contextual
11+
import kotlinx.serialization.Serializable
12+
import kotlinx.serialization.decodeFromString
13+
import kotlinx.serialization.encodeToString
14+
import kotlinx.serialization.json.Json
15+
import kotlinx.serialization.modules.SerializersModule
16+
import kotlinx.serialization.modules.contextual
17+
import kotlin.test.Test
18+
import kotlin.test.assertEquals
19+
20+
class ContextualSerializationTest {
21+
22+
@Serializable
23+
data class Dummy(
24+
@Contextual val instant: Instant,
25+
@Contextual val date: LocalDate,
26+
@Contextual val dateTime: LocalDateTime,
27+
@Contextual val datePeriod: DatePeriod,
28+
@Contextual val dateTimePeriod: DateTimePeriod,
29+
)
30+
31+
private val module = SerializersModule {
32+
contextual(InstantComponentSerializer)
33+
contextual(LocalDateComponentSerializer)
34+
contextual(LocalDateTimeComponentSerializer)
35+
contextual(DatePeriodComponentSerializer)
36+
contextual(DateTimePeriodComponentSerializer)
37+
}
38+
39+
private val format = Json { serializersModule = module }
40+
41+
@Test
42+
fun testContextualSerialization() {
43+
val dummyValue = Dummy(
44+
Instant.parse("2021-03-24T01:29:30.123456789Z"),
45+
LocalDate.parse("2020-01-02"),
46+
LocalDateTime.parse("2020-01-03T12:59:58.010203045"),
47+
DatePeriod.parse("P20Y-2M-3D"),
48+
DateTimePeriod.parse("-P50Y-1M-2DT3H4M5.0123S"),
49+
)
50+
val json = """{"instant":{"epochSeconds":1616549370,"nanosecondsOfSecond":123456789},""" +
51+
""""date":{"year":2020,"month":1,"day":2},""" +
52+
""""dateTime":{"year":2020,"month":1,"day":3,"hour":12,"minute":59,"second":58,"nanosecond":10203045},""" +
53+
""""datePeriod":{"years":19,"months":10,"days":-3},"dateTimePeriod":"P-49Y-11M2DT-3H-4M-5.012300000S"}"""
54+
assertEquals(json, format.encodeToString(dummyValue))
55+
assertEquals(dummyValue, format.decodeFromString(json))
56+
}
57+
}

0 commit comments

Comments
 (0)