-
Notifications
You must be signed in to change notification settings - Fork 109
/
Copy pathLocalDateSerializationTest.kt
73 lines (65 loc) · 2.67 KB
/
LocalDateSerializationTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright 2019-2020 JetBrains s.r.o.
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
*/
package kotlinx.datetime.serialization.test
import kotlinx.datetime.*
import kotlinx.datetime.serializers.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlin.test.*
class LocalDateSerializationTest {
private fun iso8601Serialization(serializer: KSerializer<LocalDate>) {
for ((localDate, json) in listOf(
Pair(LocalDate(2020, 12, 9), "\"2020-12-09\""),
Pair(LocalDate(-2020, 1, 1), "\"-2020-01-01\""),
Pair(LocalDate(2019, 10, 1), "\"2019-10-01\""),
)) {
assertEquals(json, Json.encodeToString(serializer, localDate))
assertEquals(localDate, Json.decodeFromString(serializer, json))
}
}
private fun componentSerialization(serializer: KSerializer<LocalDate>) {
for ((localDate, json) in listOf(
Pair(LocalDate(2020, 12, 9), "{\"year\":2020,\"month\":12,\"day\":9}"),
Pair(LocalDate(-2020, 1, 1), "{\"year\":-2020,\"month\":1,\"day\":1}"),
Pair(LocalDate(2019, 10, 1), "{\"year\":2019,\"month\":10,\"day\":1}"),
)) {
assertEquals(json, Json.encodeToString(serializer, localDate))
assertEquals(localDate, Json.decodeFromString(serializer, json))
}
// all components must be present
assertFailsWith<SerializationException> {
Json.decodeFromString(serializer, "{}")
}
assertFailsWith<SerializationException> {
Json.decodeFromString(serializer, "{\"year\":3,\"month\":12}")
}
assertFailsWith<SerializationException> {
Json.decodeFromString(serializer, "{\"year\":3,\"day\":12}")
}
assertFailsWith<SerializationException> {
Json.decodeFromString(serializer, "{\"month\":3,\"day\":12}")
}
// invalid values must fail to construct
assertFailsWith<IllegalArgumentException> {
Json.decodeFromString(serializer, "{\"year\":1000000000000,\"month\":3,\"day\":12}")
}
assertFailsWith<IllegalArgumentException> {
Json.decodeFromString(serializer, "{\"year\":2020,\"month\":30,\"day\":12}")
}
}
@Test
fun testIso8601Serialization() {
iso8601Serialization(LocalDateIso8601Serializer)
}
@Test
fun testComponentSerialization() {
componentSerialization(LocalDateComponentSerializer)
}
@Test
fun testDefaultSerializers() {
// should be the same as the ISO 8601
iso8601Serialization(Json.serializersModule.serializer())
}
}