@@ -3,15 +3,13 @@ package tools.jackson.module.kotlin.test
3
3
import com.fasterxml.jackson.annotation.JsonCreator
4
4
import com.fasterxml.jackson.annotation.JsonFormat
5
5
import com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING
6
- import com.fasterxml.jackson.databind.ObjectMapper
7
- import com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
8
- import com.fasterxml.jackson.databind.SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS
9
- import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
10
- import com.fasterxml.jackson.module.kotlin.KotlinFeature.UseJavaDurationConversion
11
- import com.fasterxml.jackson.module.kotlin.KotlinModule
12
- import com.fasterxml.jackson.module.kotlin.kotlinModule
13
- import com.fasterxml.jackson.module.kotlin.readValue
14
6
import org.junit.Test
7
+ import tools.jackson.databind.SerializationFeature
8
+ import tools.jackson.databind.json.JsonMapper
9
+ import tools.jackson.datatype.jsr310.JavaTimeModule
10
+ import tools.jackson.module.kotlin.KotlinFeature
11
+ import tools.jackson.module.kotlin.kotlinModule
12
+ import tools.jackson.module.kotlin.readValue
15
13
import java.time.Instant
16
14
import kotlin.test.assertContentEquals
17
15
import kotlin.test.assertEquals
@@ -21,11 +19,14 @@ import java.time.Duration as JavaDuration
21
19
import kotlin.time.Duration as KotlinDuration
22
20
23
21
class DurationTests {
24
- private val objectMapper = jacksonObjectMapper { enable(UseJavaDurationConversion ) }
22
+ private val mapperBuilder = JsonMapper .builder()
23
+ .addModule(kotlinModule { enable(KotlinFeature .UseJavaDurationConversion ) })
25
24
26
25
@Test
27
26
fun `should serialize Kotlin duration using Java time module` () {
28
- val mapper = objectMapper.registerModule(JavaTimeModule ()).disable(WRITE_DURATIONS_AS_TIMESTAMPS )
27
+ val mapper = mapperBuilder.addModule(JavaTimeModule ())
28
+ .disable(SerializationFeature .WRITE_DURATIONS_AS_TIMESTAMPS )
29
+ .build()
29
30
30
31
val result = mapper.writeValueAsString(1 .hours)
31
32
@@ -34,7 +35,7 @@ class DurationTests {
34
35
35
36
@Test
36
37
fun `should deserialize Kotlin duration` () {
37
- val mapper = objectMapper.registerModule (JavaTimeModule ())
38
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
38
39
39
40
val result = mapper.readValue<KotlinDuration >(" \" PT1H\" " )
40
41
@@ -43,9 +44,9 @@ class DurationTests {
43
44
44
45
@Test
45
46
fun `should serialize Kotlin duration inside list using Java time module` () {
46
- val mapper = objectMapper
47
- .registerModule( JavaTimeModule () )
48
- .disable( WRITE_DURATIONS_AS_TIMESTAMPS )
47
+ val mapper = mapperBuilder.addModule( JavaTimeModule ())
48
+ .disable( SerializationFeature . WRITE_DURATIONS_AS_TIMESTAMPS )
49
+ .build( )
49
50
50
51
val result = mapper.writeValueAsString(listOf (1 .hours, 2 .hours, 3 .hours))
51
52
@@ -54,7 +55,7 @@ class DurationTests {
54
55
55
56
@Test
56
57
fun `should deserialize Kotlin duration inside list` () {
57
- val mapper = objectMapper.registerModule (JavaTimeModule ())
58
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
58
59
59
60
val result = mapper.readValue<List <KotlinDuration >>(""" ["PT1H","PT2H","PT3H"]""" )
60
61
@@ -63,22 +64,24 @@ class DurationTests {
63
64
64
65
@Test
65
66
fun `should serialize Kotlin duration inside map using Java time module` () {
66
- val mapper = objectMapper
67
- .registerModule(JavaTimeModule ())
68
- .disable(WRITE_DURATIONS_AS_TIMESTAMPS )
69
-
70
- val result = mapper.writeValueAsString(mapOf (
71
- " a" to 1 .hours,
72
- " b" to 2 .hours,
73
- " c" to 3 .hours
74
- ))
67
+ val mapper = mapperBuilder.addModule(JavaTimeModule ())
68
+ .disable(SerializationFeature .WRITE_DURATIONS_AS_TIMESTAMPS )
69
+ .build()
70
+
71
+ val result = mapper.writeValueAsString(
72
+ mapOf (
73
+ " a" to 1 .hours,
74
+ " b" to 2 .hours,
75
+ " c" to 3 .hours
76
+ )
77
+ )
75
78
76
79
assertEquals(""" {"a":"PT1H","b":"PT2H","c":"PT3H"}""" , result)
77
80
}
78
81
79
82
@Test
80
83
fun `should deserialize Kotlin duration inside map` () {
81
- val mapper = objectMapper.registerModule (JavaTimeModule ())
84
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
82
85
83
86
val result = mapper.readValue<Map <String , KotlinDuration >>(""" {"a":"PT1H","b":"PT2H","c":"PT3H"}""" )
84
87
@@ -106,10 +109,10 @@ class DurationTests {
106
109
107
110
@Test
108
111
fun `should serialize Kotlin duration inside data class using Java time module` () {
109
- val mapper = objectMapper
110
- .registerModule( JavaTimeModule () )
111
- .disable(WRITE_DATES_AS_TIMESTAMPS )
112
- .disable( WRITE_DURATIONS_AS_TIMESTAMPS )
112
+ val mapper = mapperBuilder.addModule( JavaTimeModule ())
113
+ .disable( SerializationFeature . WRITE_DATES_AS_TIMESTAMPS )
114
+ .disable(SerializationFeature . WRITE_DURATIONS_AS_TIMESTAMPS )
115
+ .build( )
113
116
114
117
val result = mapper.writeValueAsString(Meeting (Instant .parse(" 2023-06-20T14:00:00Z" ), 1.5 .hours))
115
118
@@ -118,7 +121,7 @@ class DurationTests {
118
121
119
122
@Test
120
123
fun `should deserialize Kotlin duration inside data class` () {
121
- val mapper = objectMapper.registerModule (JavaTimeModule ())
124
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
122
125
123
126
val result = mapper.readValue<Meeting >(""" {"start":"2023-06-20T14:00:00Z","duration":"PT1H30M"}""" )
124
127
@@ -128,9 +131,9 @@ class DurationTests {
128
131
129
132
@Test
130
133
fun `should deserialize Kotlin duration inside data class using mixin` () {
131
- val mapper = objectMapper
132
- .registerModule(JavaTimeModule ())
134
+ val mapper = mapperBuilder.addModule(JavaTimeModule ())
133
135
.addMixIn(Meeting ::class .java, MeetingMixin ::class .java)
136
+ .build()
134
137
135
138
val meeting = mapper.readValue<Meeting >(""" {"start":"2023-06-20T14:00:00Z","duration":"PT1H30M"}""" )
136
139
@@ -140,10 +143,10 @@ class DurationTests {
140
143
141
144
@Test
142
145
fun `should serialize Kotlin duration inside data class using Java time module and mixin` () {
143
- val mapper = objectMapper
144
- .registerModule(JavaTimeModule ())
145
- .disable(WRITE_DATES_AS_TIMESTAMPS )
146
+ val mapper = mapperBuilder.addModule(JavaTimeModule ())
147
+ .disable(SerializationFeature .WRITE_DATES_AS_TIMESTAMPS )
146
148
.addMixIn(Meeting ::class .java, MeetingMixin ::class .java)
149
+ .build()
147
150
148
151
val result = mapper.writeValueAsString(Meeting (Instant .parse(" 2023-06-20T14:00:00Z" ), 1.5 .hours))
149
152
@@ -170,7 +173,7 @@ class DurationTests {
170
173
171
174
@Test
172
175
fun `should serialize Kotlin duration exactly as Java duration` () {
173
- val mapper = objectMapper.registerModule (JavaTimeModule ())
176
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
174
177
175
178
val jdto = JDTO ()
176
179
val kdto = KDTO ()
@@ -195,15 +198,11 @@ class DurationTests {
195
198
196
199
@Test
197
200
fun `should deserialize using custom units specified by format annotation` () {
198
- val mapper = objectMapper.registerModule (JavaTimeModule ())
201
+ val mapper = mapperBuilder.addModule (JavaTimeModule ()).build( )
199
202
200
203
val actual = mapper.readValue<DurationWithFormattedUnits >(""" {"formatted":1,"default":1}""" )
201
204
202
205
assertEquals(1 .hours, actual.formatted)
203
206
assertEquals(1 .seconds, actual.default)
204
207
}
205
-
206
- private fun jacksonObjectMapper (
207
- configuration : KotlinModule .Builder .() -> Unit ,
208
- ) = ObjectMapper ().registerModule(kotlinModule(configuration))
209
208
}
0 commit comments