Skip to content
Merged

2.18 #898

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass

import com.fasterxml.jackson.annotation.JsonKey
import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
import kotlin.test.Test
import kotlin.test.assertEquals

class JsonKeyTest {
@JvmInline
value class JsonKeyGetter(val value: Int) {
@get:JsonKey
val jsonKey: String
get() = this.toString()
}

interface IJsonKeyGetter {
@get:JsonKey
val jsonKey: String
get() = this.toString()
}

@JvmInline
value class JsonKeyGetterImplementation(val value: Int) : IJsonKeyGetter

@JvmInline
value class JsonKeyGetterImplementationDisabled(val value: Int) : IJsonKeyGetter {
@get:JsonKey(false)
override val jsonKey: String
get() = super.jsonKey
}

private val writer = jacksonMapperBuilder().build().testPrettyWriter()

@Test
fun test() {
val src = mapOf(
JsonKeyGetter(0) to 0,
JsonKeyGetterImplementation(1) to 1,
JsonKeyGetterImplementationDisabled(2) to 2
)

assertEquals(
"""
{
"JsonKeyGetter(value=0)" : 0,
"JsonKeyGetterImplementation(value=1)" : 1,
"2" : 2
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude

import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import kotlin.test.Test
import kotlin.test.assertEquals

class JsonIncludeCustomTest {
class NullFilter {
override fun equals(other: Any?) = other == null
}

@JsonInclude(
value = JsonInclude.Include.CUSTOM,
valueFilter = NullFilter::class
)
data class NullFilterDto(
val pN: Primitive? = null,
val nnoN: NonNullObject? = null,
val noN1: NullableObject? = null
)

@Test
fun nullFilterTest() {
val mapper = jacksonObjectMapper()
val dto = NullFilterDto()
assertEquals("{}", mapper.writeValueAsString(dto))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude

import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals

class JsonIncludeNonNullTest {
@JsonInclude(value = JsonInclude.Include.NON_NULL)
data class Dto(
val pN: Primitive? = null,
val nnoN: NonNullObject? = null,
val noN1: NullableObject? = null
)

@Test
fun success() {
val mapper = jacksonObjectMapper()
val dto = Dto()
assertEquals("{}", mapper.writeValueAsString(dto))
}

// It is under consideration whether it should be serialized because it is non-null in Kotlin,
// but it is tentatively regarded as a failure.
@JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.NON_NULL)
data class DtoFails(
val noNn: NullableObject = NullableObject(null),
val noN2: NullableObject? = NullableObject(null),
val map: Map<Any, Any?> = mapOf("noNn" to NullableObject(null))
)

@Test
fun fails() {
val mapper = jacksonObjectMapper()
val dto = DtoFails()
val result = mapper.writeValueAsString(dto)
assertNotEquals("""{"map":{}}""", result)
assertEquals("""{"noNn":null,"noN2":null,"map":{"noNn":null}}""", result)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.jsonInclude

@JvmInline
value class Primitive(val v: Int)

@JvmInline
value class NonNullObject(val v: String)

@JvmInline
value class NullableObject(val v: String?)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.ser.std.StdSerializer

@JvmInline
value class Primitive(val v: Int) {
class Serializer : StdSerializer<Primitive>(Primitive::class.java) {
override fun serialize(value: Primitive, gen: JsonGenerator, provider: SerializerProvider) {
gen.writeNumber(value.v + 100)
}
}
}

@JvmInline
value class NonNullObject(val v: String) {
class Serializer : StdSerializer<NonNullObject>(NonNullObject::class.java) {
override fun serialize(value: NonNullObject, gen: JsonGenerator, provider: SerializerProvider) {
gen.writeString("${value.v}-ser")
}
}
}

@JvmInline
value class NullableObject(val v: String?) {
class Serializer : StdSerializer<NullableObject>(NullableObject::class.java) {
override fun serialize(value: NullableObject, gen: JsonGenerator, provider: SerializerProvider) {
gen.writeString(value.v?.let { "$it-ser" } ?: "NULL")
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nonNullObject

import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NonNullObject
import kotlin.test.Test
import kotlin.test.assertEquals

class ByAnnotationTest {
companion object {
val writer = jacksonObjectMapper().testPrettyWriter()
}

data class NonNullSrc(
@get:JsonSerialize(using = NonNullObject.Serializer::class)
val getterAnn: NonNullObject,
@field:JsonSerialize(using = NonNullObject.Serializer::class)
val fieldAnn: NonNullObject
)

@Test
fun nonNull() {
val src = NonNullSrc(NonNullObject("foo"), NonNullObject("bar"))

assertEquals(
"""
{
"getterAnn" : "foo-ser",
"fieldAnn" : "bar-ser"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

data class NullableSrc(
@get:JsonSerialize(using = NonNullObject.Serializer::class)
val getterAnn: NonNullObject?,
@field:JsonSerialize(using = NonNullObject.Serializer::class)
val fieldAnn: NonNullObject?
)

@Test
fun nullableWithoutNull() {
val src = NullableSrc(NonNullObject("foo"), NonNullObject("bar"))

assertEquals(
"""
{
"getterAnn" : "foo-ser",
"fieldAnn" : "bar-ser"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

@Test
fun nullableWithNull() {
val src = NullableSrc(null, null)

assertEquals(
"""
{
"getterAnn" : null,
"fieldAnn" : null
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation

import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NullableObject
import kotlin.test.Test
import kotlin.test.assertEquals

class NonNullValueTest {
companion object {
val writer = jacksonObjectMapper().testPrettyWriter()
}

data class NonNullSrc(
@get:JsonSerialize(using = NullableObject.Serializer::class)
val getterAnn: NullableObject,
@field:JsonSerialize(using = NullableObject.Serializer::class)
val fieldAnn: NullableObject
)

@Test
fun nonNull() {
val src = NonNullSrc(NullableObject("foo"), NullableObject("bar"))

assertEquals(
"""
{
"getterAnn" : "foo-ser",
"fieldAnn" : "bar-ser"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

data class NullableSrc(
@get:JsonSerialize(using = NullableObject.Serializer::class)
val getterAnn: NullableObject?,
@field:JsonSerialize(using = NullableObject.Serializer::class)
val fieldAnn: NullableObject?
)

@Test
fun nullableWithoutNull() {
val src = NullableSrc(NullableObject("foo"), NullableObject("bar"))

assertEquals(
"""
{
"getterAnn" : "foo-ser",
"fieldAnn" : "bar-ser"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

@Test
fun nullableWithNull() {
val src = NullableSrc(null, null)

assertEquals(
"""
{
"getterAnn" : null,
"fieldAnn" : null
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation

import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.testPrettyWriter
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.NullableObject
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals

class NullValueTest {
companion object {
val writer = jacksonObjectMapper().testPrettyWriter()
}

data class NonNullSrc(
@get:JsonSerialize(using = NullableObject.Serializer::class)
val getterAnn: NullableObject,
@field:JsonSerialize(using = NullableObject.Serializer::class)
val fieldAnn: NullableObject
)

@Test
fun failing() {
val src = NonNullSrc(NullableObject(null), NullableObject(null))

assertNotEquals(
"""
{
"getterAnn" : "NULL",
"fieldAnn" : "NULL"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

data class NullableSrc(
@get:JsonSerialize(using = NullableObject.Serializer::class)
val getterAnn: NullableObject?,
@field:JsonSerialize(using = NullableObject.Serializer::class)
val fieldAnn: NullableObject?
)

@Test
fun nullableWithoutNull() {
val src = NullableSrc(NullableObject(null), NullableObject(null))

assertEquals(
"""
{
"getterAnn" : "NULL",
"fieldAnn" : "NULL"
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}

@Test
fun nullableWithNull() {
val src = NullableSrc(null, null)

assertEquals(
"""
{
"getterAnn" : null,
"fieldAnn" : null
}
""".trimIndent(),
writer.writeValueAsString(src)
)
}
}
Loading