@@ -13,8 +13,10 @@ import kotlin.test.*
13
13
14
14
class DateTimePeriodSerializationTest {
15
15
16
- @Test
17
- fun datePeriodISO8601Serialization () {
16
+ private fun datePeriodISO8601Serialization (
17
+ datePeriodSerializer : KSerializer <DatePeriod >,
18
+ dateTimePeriodSerializer : KSerializer <DateTimePeriod >
19
+ ) {
18
20
for ((period, json) in listOf (
19
21
Pair (DatePeriod (1 , 2 , 3 ), " \" P1Y2M3D\" " ),
20
22
Pair (DatePeriod (years = 1 ), " \" P1Y\" " ),
@@ -24,21 +26,23 @@ class DateTimePeriodSerializationTest {
24
26
Pair (DatePeriod (months = 10 , days = 5 ), " \" P10M5D\" " ),
25
27
Pair (DatePeriod (years = 1 , days = 40 ), " \" P1Y40D\" " ),
26
28
)) {
27
- assertEquals(json, Json .encodeToString(DatePeriodISO8601Serializer , period))
28
- assertEquals(period, Json .decodeFromString(DatePeriodISO8601Serializer , json))
29
- assertEquals(json, Json .encodeToString(DateTimePeriodISO8601Serializer , period))
30
- assertEquals(period, Json .decodeFromString(DateTimePeriodISO8601Serializer , json) as DatePeriod )
29
+ assertEquals(json, Json .encodeToString(datePeriodSerializer , period))
30
+ assertEquals(period, Json .decodeFromString(datePeriodSerializer , json))
31
+ assertEquals(json, Json .encodeToString(dateTimePeriodSerializer , period))
32
+ assertEquals(period, Json .decodeFromString(dateTimePeriodSerializer , json) as DatePeriod )
31
33
}
32
34
// time-based keys should not be considered unknown here
33
35
assertFailsWith<IllegalArgumentException > {
34
- Json { ignoreUnknownKeys = true }.decodeFromString(DatePeriodISO8601Serializer , " \" P3DT1H\" " )
36
+ Json { ignoreUnknownKeys = true }.decodeFromString(datePeriodSerializer , " \" P3DT1H\" " )
35
37
}
36
38
// presence of time-based keys should not be a problem if the values are 0
37
- Json .decodeFromString(DatePeriodISO8601Serializer , " \" P3DT0H\" " )
39
+ Json .decodeFromString(datePeriodSerializer , " \" P3DT0H\" " )
38
40
}
39
41
40
- @Test
41
- fun datePeriodComponentSerialization () {
42
+ private fun datePeriodComponentSerialization (
43
+ datePeriodSerializer : KSerializer <DatePeriod >,
44
+ dateTimePeriodSerializer : KSerializer <DateTimePeriod >
45
+ ) {
42
46
for ((period, json) in listOf (
43
47
Pair (DatePeriod (1 , 2 , 3 ), " {\" years\" :1,\" months\" :2,\" days\" :3}" ),
44
48
Pair (DatePeriod (years = 1 ), " {\" years\" :1}" ),
@@ -48,21 +52,20 @@ class DateTimePeriodSerializationTest {
48
52
Pair (DatePeriod (months = 10 , days = 5 ), " {\" months\" :10,\" days\" :5}" ),
49
53
Pair (DatePeriod (years = 1 , days = 40 ), " {\" years\" :1,\" days\" :40}" ),
50
54
)) {
51
- assertEquals(json, Json .encodeToString(DatePeriodComponentSerializer , period))
52
- assertEquals(period, Json .decodeFromString(DatePeriodComponentSerializer , json))
53
- assertEquals(json, Json .encodeToString(DateTimePeriodComponentSerializer , period))
54
- assertEquals(period, Json .decodeFromString(DateTimePeriodComponentSerializer , json) as DatePeriod )
55
+ assertEquals(json, Json .encodeToString(datePeriodSerializer , period))
56
+ assertEquals(period, Json .decodeFromString(datePeriodSerializer , json))
57
+ assertEquals(json, Json .encodeToString(dateTimePeriodSerializer , period))
58
+ assertEquals(period, Json .decodeFromString(dateTimePeriodSerializer , json) as DatePeriod )
55
59
}
56
60
// time-based keys should not be considered unknown here
57
61
assertFailsWith<SerializationException > {
58
- Json { ignoreUnknownKeys = true }.decodeFromString(DatePeriodComponentSerializer , " {\" hours\" :3}" )
62
+ Json { ignoreUnknownKeys = true }.decodeFromString(datePeriodSerializer , " {\" hours\" :3}" )
59
63
}
60
64
// presence of time-based keys should not be a problem if the values are 0
61
- Json .decodeFromString(DatePeriodComponentSerializer , " {\" hours\" :0}" )
65
+ Json .decodeFromString(datePeriodSerializer , " {\" hours\" :0}" )
62
66
}
63
67
64
- @Test
65
- fun dateTimePeriodISO8601Serialization () {
68
+ private fun dateTimePeriodISO8601Serialization (dateTimePeriodSerializer : KSerializer <DateTimePeriod >) {
66
69
for ((period, json) in listOf (
67
70
Pair (DateTimePeriod (), " \" P0D\" " ),
68
71
Pair (DateTimePeriod (hours = 1 ), " \" PT1H\" " ),
@@ -72,13 +75,12 @@ class DateTimePeriodSerializationTest {
72
75
Pair (DateTimePeriod (years = - 1 , months = - 2 , days = - 3 , hours = - 4 , minutes = - 5 , seconds = 0 , nanoseconds = 500_000_000 ),
73
76
" \" -P1Y2M3DT4H4M59.500000000S\" " ),
74
77
)) {
75
- assertEquals(json, Json .encodeToString(DateTimePeriodISO8601Serializer , period))
76
- assertEquals(period, Json .decodeFromString(DateTimePeriodISO8601Serializer , json))
78
+ assertEquals(json, Json .encodeToString(dateTimePeriodSerializer , period))
79
+ assertEquals(period, Json .decodeFromString(dateTimePeriodSerializer , json))
77
80
}
78
81
}
79
82
80
- @Test
81
- fun dateTimePeriodComponentSerialization () {
83
+ private fun dateTimePeriodComponentSerialization (dateTimePeriodSerializer : KSerializer <DateTimePeriod >) {
82
84
for ((period, json) in listOf (
83
85
Pair (DateTimePeriod (), " {}" ),
84
86
Pair (DateTimePeriod (hours = 1 ), " {\" hours\" :1}" ),
@@ -88,9 +90,36 @@ class DateTimePeriodSerializationTest {
88
90
Pair (DateTimePeriod (years = - 1 , months = - 2 , days = - 3 , hours = - 4 , minutes = - 5 , seconds = 0 , nanoseconds = 500_000_000 ),
89
91
" {\" years\" :-1,\" months\" :-2,\" days\" :-3,\" hours\" :-4,\" minutes\" :-4,\" seconds\" :-59,\" nanoseconds\" :-500000000}" ),
90
92
)) {
91
- assertEquals(json, Json .encodeToString(DateTimePeriodComponentSerializer , period))
92
- assertEquals(period, Json .decodeFromString(DateTimePeriodComponentSerializer , json))
93
+ assertEquals(json, Json .encodeToString(dateTimePeriodSerializer , period))
94
+ assertEquals(period, Json .decodeFromString(dateTimePeriodSerializer , json))
93
95
}
94
96
}
95
97
98
+ @Test
99
+ fun testDatePeriodISO8601Serialization () {
100
+ datePeriodISO8601Serialization(DatePeriodISO8601Serializer , DateTimePeriodISO8601Serializer )
101
+ }
102
+
103
+ @Test
104
+ fun testDatePeriodComponentSerialization () {
105
+ datePeriodComponentSerialization(DatePeriodComponentSerializer , DateTimePeriodComponentSerializer )
106
+ }
107
+
108
+ @Test
109
+ fun testDateTimePeriodISO8601Serialization () {
110
+ dateTimePeriodISO8601Serialization(DateTimePeriodISO8601Serializer )
111
+ }
112
+
113
+ @Test
114
+ fun testDateTimePeriodComponentSerialization () {
115
+ dateTimePeriodComponentSerialization(DateTimePeriodComponentSerializer )
116
+ }
117
+
118
+ @Test
119
+ fun testDefaultSerializers () {
120
+ // Check that they behave the same as the ISO-8601 serializers
121
+ dateTimePeriodISO8601Serialization(Json .serializersModule.serializer())
122
+ datePeriodISO8601Serialization(Json .serializersModule.serializer(), Json .serializersModule.serializer())
123
+ }
124
+
96
125
}
0 commit comments