Skip to content

Commit f879734

Browse files
authored
Merge pull request #897 from k163377/porting-kogera-value-class-ser-tests
Ported value class serialization tests
2 parents 1bf0ad7 + 6363de3 commit f879734

File tree

9 files changed

+505
-0
lines changed

9 files changed

+505
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass
2+
3+
import com.fasterxml.jackson.annotation.JsonKey
4+
import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder
5+
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
6+
import kotlin.test.Test
7+
import kotlin.test.assertEquals
8+
9+
class JsonKeyTest {
10+
@JvmInline
11+
value class JsonKeyGetter(val value: Int) {
12+
@get:JsonKey
13+
val jsonKey: String
14+
get() = this.toString()
15+
}
16+
17+
interface IJsonKeyGetter {
18+
@get:JsonKey
19+
val jsonKey: String
20+
get() = this.toString()
21+
}
22+
23+
@JvmInline
24+
value class JsonKeyGetterImplementation(val value: Int) : IJsonKeyGetter
25+
26+
@JvmInline
27+
value class JsonKeyGetterImplementationDisabled(val value: Int) : IJsonKeyGetter {
28+
@get:JsonKey(false)
29+
override val jsonKey: String
30+
get() = super.jsonKey
31+
}
32+
33+
private val writer = jacksonMapperBuilder().build().testPrettyWriter()
34+
35+
@Test
36+
fun test() {
37+
val src = mapOf(
38+
JsonKeyGetter(0) to 0,
39+
JsonKeyGetterImplementation(1) to 1,
40+
JsonKeyGetterImplementationDisabled(2) to 2
41+
)
42+
43+
assertEquals(
44+
"""
45+
{
46+
"JsonKeyGetter(value=0)" : 0,
47+
"JsonKeyGetterImplementation(value=1)" : 1,
48+
"2" : 2
49+
}
50+
""".trimIndent(),
51+
writer.writeValueAsString(src)
52+
)
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude
4+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
8+
class JsonIncludeCustomTest {
9+
class NullFilter {
10+
override fun equals(other: Any?) = other == null
11+
}
12+
13+
@JsonInclude(
14+
value = JsonInclude.Include.CUSTOM,
15+
valueFilter = NullFilter::class
16+
)
17+
data class NullFilterDto(
18+
val pN: Primitive? = null,
19+
val nnoN: NonNullObject? = null,
20+
val noN1: NullableObject? = null
21+
)
22+
23+
@Test
24+
fun nullFilterTest() {
25+
val mapper = jacksonObjectMapper()
26+
val dto = NullFilterDto()
27+
assertEquals("{}", mapper.writeValueAsString(dto))
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude
4+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
import kotlin.test.assertNotEquals
8+
9+
class JsonIncludeNonNullTest {
10+
@JsonInclude(value = JsonInclude.Include.NON_NULL)
11+
data class Dto(
12+
val pN: Primitive? = null,
13+
val nnoN: NonNullObject? = null,
14+
val noN1: NullableObject? = null
15+
)
16+
17+
@Test
18+
fun success() {
19+
val mapper = jacksonObjectMapper()
20+
val dto = Dto()
21+
assertEquals("{}", mapper.writeValueAsString(dto))
22+
}
23+
24+
// It is under consideration whether it should be serialized because it is non-null in Kotlin,
25+
// but it is tentatively regarded as a failure.
26+
@JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.NON_NULL)
27+
data class DtoFails(
28+
val noNn: NullableObject = NullableObject(null),
29+
val noN2: NullableObject? = NullableObject(null),
30+
val map: Map<Any, Any?> = mapOf("noNn" to NullableObject(null))
31+
)
32+
33+
@Test
34+
fun fails() {
35+
val mapper = jacksonObjectMapper()
36+
val dto = DtoFails()
37+
val result = mapper.writeValueAsString(dto)
38+
assertNotEquals("""{"map":{}}""", result)
39+
assertEquals("""{"noNn":null,"noN2":null,"map":{"noNn":null}}""", result)
40+
}
41+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude
2+
3+
@JvmInline
4+
value class Primitive(val v: Int)
5+
6+
@JvmInline
7+
value class NonNullObject(val v: String)
8+
9+
@JvmInline
10+
value class NullableObject(val v: String?)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer
2+
3+
import com.fasterxml.jackson.core.JsonGenerator
4+
import com.fasterxml.jackson.databind.SerializerProvider
5+
import com.fasterxml.jackson.databind.ser.std.StdSerializer
6+
7+
@JvmInline
8+
value class Primitive(val v: Int) {
9+
class Serializer : StdSerializer<Primitive>(Primitive::class.java) {
10+
override fun serialize(value: Primitive, gen: JsonGenerator, provider: SerializerProvider) {
11+
gen.writeNumber(value.v + 100)
12+
}
13+
}
14+
}
15+
16+
@JvmInline
17+
value class NonNullObject(val v: String) {
18+
class Serializer : StdSerializer<NonNullObject>(NonNullObject::class.java) {
19+
override fun serialize(value: NonNullObject, gen: JsonGenerator, provider: SerializerProvider) {
20+
gen.writeString("${value.v}-ser")
21+
}
22+
}
23+
}
24+
25+
@JvmInline
26+
value class NullableObject(val v: String?) {
27+
class Serializer : StdSerializer<NullableObject>(NullableObject::class.java) {
28+
override fun serialize(value: NullableObject, gen: JsonGenerator, provider: SerializerProvider) {
29+
gen.writeString(value.v?.let { "$it-ser" } ?: "NULL")
30+
}
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nonNullObject
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonSerialize
4+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5+
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
6+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NonNullObject
7+
import kotlin.test.Test
8+
import kotlin.test.assertEquals
9+
10+
class ByAnnotationTest {
11+
companion object {
12+
val writer = jacksonObjectMapper().testPrettyWriter()
13+
}
14+
15+
data class NonNullSrc(
16+
@get:JsonSerialize(using = NonNullObject.Serializer::class)
17+
val getterAnn: NonNullObject,
18+
@field:JsonSerialize(using = NonNullObject.Serializer::class)
19+
val fieldAnn: NonNullObject
20+
)
21+
22+
@Test
23+
fun nonNull() {
24+
val src = NonNullSrc(NonNullObject("foo"), NonNullObject("bar"))
25+
26+
assertEquals(
27+
"""
28+
{
29+
"getterAnn" : "foo-ser",
30+
"fieldAnn" : "bar-ser"
31+
}
32+
""".trimIndent(),
33+
writer.writeValueAsString(src)
34+
)
35+
}
36+
37+
data class NullableSrc(
38+
@get:JsonSerialize(using = NonNullObject.Serializer::class)
39+
val getterAnn: NonNullObject?,
40+
@field:JsonSerialize(using = NonNullObject.Serializer::class)
41+
val fieldAnn: NonNullObject?
42+
)
43+
44+
@Test
45+
fun nullableWithoutNull() {
46+
val src = NullableSrc(NonNullObject("foo"), NonNullObject("bar"))
47+
48+
assertEquals(
49+
"""
50+
{
51+
"getterAnn" : "foo-ser",
52+
"fieldAnn" : "bar-ser"
53+
}
54+
""".trimIndent(),
55+
writer.writeValueAsString(src)
56+
)
57+
}
58+
59+
@Test
60+
fun nullableWithNull() {
61+
val src = NullableSrc(null, null)
62+
63+
assertEquals(
64+
"""
65+
{
66+
"getterAnn" : null,
67+
"fieldAnn" : null
68+
}
69+
""".trimIndent(),
70+
writer.writeValueAsString(src)
71+
)
72+
}
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonSerialize
4+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5+
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
6+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NullableObject
7+
import kotlin.test.Test
8+
import kotlin.test.assertEquals
9+
10+
class NonNullValueTest {
11+
companion object {
12+
val writer = jacksonObjectMapper().testPrettyWriter()
13+
}
14+
15+
data class NonNullSrc(
16+
@get:JsonSerialize(using = NullableObject.Serializer::class)
17+
val getterAnn: NullableObject,
18+
@field:JsonSerialize(using = NullableObject.Serializer::class)
19+
val fieldAnn: NullableObject
20+
)
21+
22+
@Test
23+
fun nonNull() {
24+
val src = NonNullSrc(NullableObject("foo"), NullableObject("bar"))
25+
26+
assertEquals(
27+
"""
28+
{
29+
"getterAnn" : "foo-ser",
30+
"fieldAnn" : "bar-ser"
31+
}
32+
""".trimIndent(),
33+
writer.writeValueAsString(src)
34+
)
35+
}
36+
37+
data class NullableSrc(
38+
@get:JsonSerialize(using = NullableObject.Serializer::class)
39+
val getterAnn: NullableObject?,
40+
@field:JsonSerialize(using = NullableObject.Serializer::class)
41+
val fieldAnn: NullableObject?
42+
)
43+
44+
@Test
45+
fun nullableWithoutNull() {
46+
val src = NullableSrc(NullableObject("foo"), NullableObject("bar"))
47+
48+
assertEquals(
49+
"""
50+
{
51+
"getterAnn" : "foo-ser",
52+
"fieldAnn" : "bar-ser"
53+
}
54+
""".trimIndent(),
55+
writer.writeValueAsString(src)
56+
)
57+
}
58+
59+
@Test
60+
fun nullableWithNull() {
61+
val src = NullableSrc(null, null)
62+
63+
assertEquals(
64+
"""
65+
{
66+
"getterAnn" : null,
67+
"fieldAnn" : null
68+
}
69+
""".trimIndent(),
70+
writer.writeValueAsString(src)
71+
)
72+
}
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonSerialize
4+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5+
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
6+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NullableObject
7+
import kotlin.test.Test
8+
import kotlin.test.assertEquals
9+
import kotlin.test.assertNotEquals
10+
11+
class NullValueTest {
12+
companion object {
13+
val writer = jacksonObjectMapper().testPrettyWriter()
14+
}
15+
16+
data class NonNullSrc(
17+
@get:JsonSerialize(using = NullableObject.Serializer::class)
18+
val getterAnn: NullableObject,
19+
@field:JsonSerialize(using = NullableObject.Serializer::class)
20+
val fieldAnn: NullableObject
21+
)
22+
23+
@Test
24+
fun failing() {
25+
val src = NonNullSrc(NullableObject(null), NullableObject(null))
26+
27+
assertNotEquals(
28+
"""
29+
{
30+
"getterAnn" : "NULL",
31+
"fieldAnn" : "NULL"
32+
}
33+
""".trimIndent(),
34+
writer.writeValueAsString(src)
35+
)
36+
}
37+
38+
data class NullableSrc(
39+
@get:JsonSerialize(using = NullableObject.Serializer::class)
40+
val getterAnn: NullableObject?,
41+
@field:JsonSerialize(using = NullableObject.Serializer::class)
42+
val fieldAnn: NullableObject?
43+
)
44+
45+
@Test
46+
fun nullableWithoutNull() {
47+
val src = NullableSrc(NullableObject(null), NullableObject(null))
48+
49+
assertEquals(
50+
"""
51+
{
52+
"getterAnn" : "NULL",
53+
"fieldAnn" : "NULL"
54+
}
55+
""".trimIndent(),
56+
writer.writeValueAsString(src)
57+
)
58+
}
59+
60+
@Test
61+
fun nullableWithNull() {
62+
val src = NullableSrc(null, null)
63+
64+
assertEquals(
65+
"""
66+
{
67+
"getterAnn" : null,
68+
"fieldAnn" : null
69+
}
70+
""".trimIndent(),
71+
writer.writeValueAsString(src)
72+
)
73+
}
74+
}

0 commit comments

Comments
 (0)