Skip to content

Commit 01d7d13

Browse files
committed
fix and add tests
1 parent c37e33a commit 01d7d13

File tree

1 file changed

+48
-77
lines changed
  • src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github

1 file changed

+48
-77
lines changed

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/github/Github464.kt

Lines changed: 48 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fasterxml.jackson.module.kotlin.test.github
22

33
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.JsonSerializer
45
import com.fasterxml.jackson.databind.ObjectMapper
56
import com.fasterxml.jackson.databind.ObjectWriter
67
import com.fasterxml.jackson.databind.SerializerProvider
@@ -10,18 +11,25 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer
1011
import com.fasterxml.jackson.module.kotlin.KotlinModule
1112
import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder
1213
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
13-
import com.fasterxml.jackson.module.kotlin.test.expectFailure
14-
import org.junit.ComparisonFailure
1514
import org.junit.Ignore
1615
import org.junit.Test
1716
import kotlin.test.assertEquals
1817

1918
class Github464 {
2019
class UnboxTest {
21-
private val writer: ObjectWriter = jacksonObjectMapper().writerWithDefaultPrettyPrinter()
20+
object NullValueClassKeySerializer : StdSerializer<ValueClass>(ValueClass::class.java) {
21+
override fun serialize(value: ValueClass?, gen: JsonGenerator, provider: SerializerProvider) {
22+
gen.writeFieldName("null-key")
23+
}
24+
}
25+
26+
@Suppress("UNCHECKED_CAST")
27+
private val writer: ObjectWriter = jacksonObjectMapper()
28+
.apply { serializerProvider.setNullKeySerializer(NullValueClassKeySerializer as JsonSerializer<Any?>) }
29+
.writerWithDefaultPrettyPrinter()
2230

2331
@JvmInline
24-
value class ValueClass(val value: Int)
32+
value class ValueClass(val value: Int?)
2533
data class WrapperClass(val inlineField: ValueClass)
2634

2735
class Poko(
@@ -33,50 +41,14 @@ class Github464 {
3341
val quux: Array<ValueClass?>,
3442
val corge: WrapperClass,
3543
val grault: WrapperClass?,
36-
val garply: Map<ValueClass, ValueClass?>,
37-
val waldo: Map<WrapperClass, WrapperClass?>
44+
val garply: Map<ValueClass, ValueClass?>
3845
)
3946

40-
// TODO: Remove this function after applying unbox to key of Map and cancel Ignore of test.
41-
@Test
42-
fun tempTest() {
43-
val zeroValue = ValueClass(0)
44-
45-
val target = Poko(
46-
foo = zeroValue,
47-
bar = null,
48-
baz = zeroValue,
49-
qux = listOf(zeroValue, null),
50-
quux = arrayOf(zeroValue, null),
51-
corge = WrapperClass(zeroValue),
52-
grault = null,
53-
garply = emptyMap(),
54-
waldo = emptyMap()
55-
)
56-
57-
assertEquals("""
58-
{
59-
"foo" : 0,
60-
"bar" : null,
61-
"baz" : 0,
62-
"qux" : [ 0, null ],
63-
"quux" : [ 0, null ],
64-
"corge" : {
65-
"inlineField" : 0
66-
},
67-
"grault" : null,
68-
"garply" : { },
69-
"waldo" : { }
70-
}
71-
""".trimIndent(),
72-
writer.writeValueAsString(target)
73-
)
74-
}
75-
7647
@Test
7748
fun test() {
7849
val zeroValue = ValueClass(0)
7950
val oneValue = ValueClass(1)
51+
val nullValue = ValueClass(null)
8052

8153
val target = Poko(
8254
foo = zeroValue,
@@ -86,37 +58,30 @@ class Github464 {
8658
quux = arrayOf(zeroValue, null),
8759
corge = WrapperClass(zeroValue),
8860
grault = null,
89-
garply = mapOf(zeroValue to zeroValue, oneValue to null),
90-
waldo = mapOf(WrapperClass(zeroValue) to WrapperClass(zeroValue), WrapperClass(oneValue) to null)
61+
garply = mapOf(zeroValue to zeroValue, oneValue to null, nullValue to nullValue)
9162
)
9263

93-
expectFailure<ComparisonFailure>("GitHub #469 has been fixed!") {
94-
assertEquals("""
95-
{
96-
"foo" : 0,
97-
"bar" : null,
98-
"baz" : 0,
99-
"qux" : [ 0, null ],
100-
"quux" : [ 0, null ],
101-
"corge" : {
102-
"inlineField" : 0
103-
},
104-
"grault" : null,
105-
"garply" : {
106-
"0" : 0,
107-
"1" : null
108-
},
109-
"waldo" : {
110-
"{inlineField=0}" : {
111-
"inlineField" : 0
112-
},
113-
"{inlineField=1}" : null
114-
}
115-
}
116-
""".trimIndent(),
117-
writer.writeValueAsString(target)
118-
)
119-
}
64+
assertEquals(
65+
"""
66+
{
67+
"foo" : 0,
68+
"bar" : null,
69+
"baz" : 0,
70+
"qux" : [ 0, null ],
71+
"quux" : [ 0, null ],
72+
"corge" : {
73+
"inlineField" : 0
74+
},
75+
"grault" : null,
76+
"garply" : {
77+
"0" : 0,
78+
"1" : null,
79+
"null-key" : null
80+
}
81+
}
82+
""".trimIndent(),
83+
writer.writeValueAsString(target)
84+
)
12085
}
12186
}
12287

@@ -129,15 +94,22 @@ class Github464 {
12994
gen.writeString(value.value.toString())
13095
}
13196
}
97+
object KeySerializer : StdSerializer<ValueBySerializer>(ValueBySerializer::class.java) {
98+
override fun serialize(value: ValueBySerializer, gen: JsonGenerator, provider: SerializerProvider) {
99+
gen.writeFieldName(value.value.toString())
100+
}
101+
}
132102

133-
private val target = listOf(ValueBySerializer(1))
103+
private val target = mapOf(ValueBySerializer(1) to ValueBySerializer(2))
104+
private val sm = SimpleModule()
105+
.addSerializer(Serializer)
106+
.addKeySerializer(ValueBySerializer::class.java, KeySerializer)
134107

135108
@Test
136109
fun simpleTest() {
137-
val sm = SimpleModule().addSerializer(Serializer)
138110
val om: ObjectMapper = jacksonMapperBuilder().addModule(sm).build()
139111

140-
assertEquals("""["1"]""", om.writeValueAsString(target))
112+
assertEquals("""{"1":"2"}""", om.writeValueAsString(target))
141113
}
142114

143115
// Currently, there is a situation where the serialization results are different depending on the registration order of the modules.
@@ -146,13 +118,12 @@ class Github464 {
146118
@Ignore
147119
@Test
148120
fun priorityTest() {
149-
val sm = SimpleModule().addSerializer(Serializer)
150121
val km = KotlinModule.Builder().build()
151122
val om1: ObjectMapper = JsonMapper.builder().addModules(km, sm).build()
152123
val om2: ObjectMapper = JsonMapper.builder().addModules(sm, km).build()
153124

154-
// om1(collect) -> """["1"]"""
155-
// om2(broken) -> """[1]"""
125+
// om1(collect) -> """{"1":"2"}"""
126+
// om2(broken) -> """{"1":2}"""
156127
assertEquals(om1.writeValueAsString(target), om2.writeValueAsString(target))
157128
}
158129
}

0 commit comments

Comments
 (0)