Skip to content

Commit f9be114

Browse files
committed
Add test cases for #800
1 parent be07a10 commit f9be114

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@
122122
<artifactId>jackson-dataformat-xml</artifactId>
123123
<scope>test</scope>
124124
</dependency>
125+
<dependency>
126+
<groupId>com.fasterxml.jackson.dataformat</groupId>
127+
<artifactId>jackson-dataformat-csv</artifactId>
128+
<scope>test</scope>
129+
</dependency>
125130
<dependency>
126131
<!-- needed for kotlin.time.Duration converter test -->
127132
<groupId>com.fasterxml.jackson.datatype</groupId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.fasterxml.jackson.module.kotlin.test.github
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty
4+
import com.fasterxml.jackson.core.JsonParser
5+
import com.fasterxml.jackson.databind.DeserializationContext
6+
import com.fasterxml.jackson.databind.JsonDeserializer
7+
import com.fasterxml.jackson.databind.ObjectReader
8+
import com.fasterxml.jackson.databind.module.SimpleModule
9+
import com.fasterxml.jackson.dataformat.csv.CsvMapper
10+
import com.fasterxml.jackson.dataformat.csv.CsvParser
11+
import com.fasterxml.jackson.dataformat.csv.CsvSchema
12+
import com.fasterxml.jackson.module.kotlin.kotlinModule
13+
import org.junit.jupiter.api.Test
14+
import kotlin.test.assertEquals
15+
16+
class GitHub800 {
17+
val CSV = """
18+
BAR_HEADER,BAZ_HEADER
19+
bar1,baz1
20+
""".trimIndent()
21+
22+
val MAPPER =
23+
CsvMapper
24+
.builder()
25+
.addModule(
26+
SimpleModule()
27+
.addDeserializer(BazValueClass::class.java, object : JsonDeserializer<BazValueClass>() {
28+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = BazValueClass(p.valueAsString)
29+
})
30+
.addDeserializer(BazDataClass::class.java, object : JsonDeserializer<BazDataClass>() {
31+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = BazDataClass(p.valueAsString)
32+
})
33+
)
34+
.addModule(kotlinModule())
35+
.build()
36+
37+
inline fun <reified T> createSchema(columnReordering: Boolean): CsvSchema =
38+
MAPPER
39+
.schemaFor(T::class.java)
40+
.withColumnReordering(columnReordering)
41+
.withHeader()
42+
43+
inline fun <reified T> createReader(columnReordering: Boolean): ObjectReader =
44+
MAPPER
45+
.readerFor(T::class.java)
46+
.with(CsvParser.Feature.WRAP_AS_ARRAY)
47+
.with(createSchema<T>(columnReordering))
48+
49+
data class FooWithValueClass(
50+
@field:JsonProperty("BAR_HEADER")
51+
val bar: String?,
52+
@field:JsonProperty("BAZ_HEADER")
53+
val baz: BazValueClass?,
54+
)
55+
56+
data class FooWithDataClass(
57+
@field:JsonProperty("BAR_HEADER")
58+
val bar: String?,
59+
@field:JsonProperty("BAZ_HEADER")
60+
val baz: BazDataClass?,
61+
)
62+
63+
@JvmInline
64+
value class BazValueClass(val value: String)
65+
66+
data class BazDataClass(val value: String)
67+
68+
@Test
69+
fun valueClassWithoutColumnReordering() {
70+
val actual = createReader<FooWithValueClass>(false)
71+
.readValues<FooWithValueClass>(CSV)
72+
.readAll()
73+
74+
assertEquals(listOf(FooWithValueClass("bar1", BazValueClass("baz1"))), actual)
75+
}
76+
77+
@Test
78+
fun valueClassWithColumnReordering() {
79+
val actual = createReader<FooWithValueClass>(true)
80+
.readValues<FooWithValueClass>(CSV)
81+
.readAll()
82+
83+
assertEquals(listOf(FooWithValueClass("bar1", BazValueClass("baz1"))), actual)
84+
}
85+
86+
@Test
87+
fun dataClassWithoutColumnReordering() {
88+
val actual = createReader<FooWithDataClass>(false)
89+
.readValues<FooWithDataClass>(CSV)
90+
.readAll()
91+
92+
assertEquals(listOf(FooWithDataClass("bar1", BazDataClass("baz1"))), actual)
93+
}
94+
95+
@Test
96+
fun dataClassWithColumnReordering() {
97+
val actual = createReader<FooWithDataClass>(true)
98+
.readValues<FooWithDataClass>(CSV)
99+
.readAll()
100+
101+
assertEquals(listOf(FooWithDataClass("bar1", BazDataClass("baz1"))), actual)
102+
}
103+
}

0 commit comments

Comments
 (0)