diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/JsonKeyTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/JsonKeyTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/JsonKeyTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/JsonKeyTest.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/WithoutCustomSerializeMethodTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/WithoutCustomSerializeMethodTest.kt new file mode 100644 index 000000000..f30a893ba --- /dev/null +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/WithoutCustomSerializeMethodTest.kt @@ -0,0 +1,173 @@ +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass + +import com.fasterxml.jackson.module.kotlin.defaultMapper +import com.fasterxml.jackson.module.kotlin.testPrettyWriter +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class WithoutCustomSerializeMethodTest { + @JvmInline + value class Primitive(val v: Int) + + @JvmInline + value class NonNullObject(val v: String) + + @JvmInline + value class NullableObject(val v: String?) + + @JvmInline + value class NullablePrimitive(val v: Int?) + + @JvmInline + value class TwoUnitPrimitive(val v: Long) + + private val writer = defaultMapper.testPrettyWriter() + + @Nested + inner class DirectSerializeTest { + @Test + fun primitive() { + val result = writer.writeValueAsString(Primitive(1)) + assertEquals("1", result) + } + + @Test + fun nonNullObject() { + val result = writer.writeValueAsString(NonNullObject("foo")) + assertEquals("\"foo\"", result) + } + + @Suppress("ClassName") + @Nested + inner class NullableObject_ { + @Test + fun value() { + val result = writer.writeValueAsString(NullableObject("foo")) + assertEquals("\"foo\"", result) + } + + @Test + fun nullValue() { + val result = writer.writeValueAsString(NullableObject(null)) + assertEquals("null", result) + } + } + + @Suppress("ClassName") + @Nested + inner class NullablePrimitive_ { + @Test + fun value() { + val result = writer.writeValueAsString(NullablePrimitive(1)) + assertEquals("1", result) + } + + @Test + fun nullValue() { + val result = writer.writeValueAsString(NullablePrimitive(null)) + assertEquals("null", result) + } + } + + @Test + fun twoUnitPrimitive() { + val result = writer.writeValueAsString(TwoUnitPrimitive(1)) + assertEquals("1", result) + } + } + + data class Src( + val pNn: Primitive, + val pN: Primitive?, + val nnoNn: NonNullObject, + val nnoN: NonNullObject?, + val noNn: NullableObject, + val noN: NullableObject?, + val npNn: NullablePrimitive, + val npN: NullablePrimitive?, + val tupNn: TwoUnitPrimitive, + val tupN: TwoUnitPrimitive?, + ) + + @Test + fun withoutNull() { + val src = Src( + Primitive(1), + Primitive(2), + NonNullObject("foo"), + NonNullObject("bar"), + NullableObject("baz"), + NullableObject("qux"), + NullablePrimitive(1), + NullablePrimitive(2), + TwoUnitPrimitive(3), + TwoUnitPrimitive(4), + ) + val result = writer.writeValueAsString(src) + + assertEquals( + """ + { + "pNn" : 1, + "pN" : 2, + "nnoNn" : "foo", + "nnoN" : "bar", + "noNn" : "baz", + "noN" : "qux", + "npNn" : 1, + "npN" : 2, + "tupNn" : 3, + "tupN" : 4 + } + """.trimIndent(), + result, + ) + } + + @Test + fun withNull() { + val src = Src( + Primitive(1), + null, + NonNullObject("foo"), + null, + NullableObject(null), + null, + NullablePrimitive(null), + null, + TwoUnitPrimitive(3), + null, + ) + val result = writer.writeValueAsString(src) + + assertEquals( + """ + { + "pNn" : 1, + "pN" : null, + "nnoNn" : "foo", + "nnoN" : null, + "noNn" : null, + "noN" : null, + "npNn" : null, + "npN" : null, + "tupNn" : 3, + "tupN" : null + } + """.trimIndent(), + result, + ) + } + + @JvmInline + value class HasToString(val value: Int) { + override fun toString(): String = "Custom($value)" + } + + @Test + fun toStringTest() { + val result = writer.writeValueAsString(HasToString(42)) + assertEquals("42", result) + } +} diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/JsonIncludeCustomTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/JsonIncludeCustomTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/JsonIncludeCustomTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/JsonIncludeCustomTest.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/JsonIncludeNonNullTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/JsonIncludeNonNullTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/JsonIncludeNonNullTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/JsonIncludeNonNullTest.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/ValueClasses.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/ValueClasses.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/jsonInclude/ValueClasses.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/jsonInclude/ValueClasses.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/SpecifiedForObjectMapperTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/SpecifiedForObjectMapperTest.kt new file mode 100644 index 000000000..9cd62a651 --- /dev/null +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/SpecifiedForObjectMapperTest.kt @@ -0,0 +1,160 @@ +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer + +import com.fasterxml.jackson.databind.module.SimpleModule +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.testPrettyWriter +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class SpecifiedForObjectMapperTest { + companion object { + val mapper = jacksonObjectMapper().apply { + val module = SimpleModule().apply { + this.addSerializer(Primitive::class.java, Primitive.Serializer()) + this.addSerializer(NonNullObject::class.java, NonNullObject.Serializer()) + this.addSerializer(NullableObject::class.java, NullableObject.Serializer()) + this.addSerializer(NullablePrimitive::class.java, NullablePrimitive.Serializer()) + this.addSerializer(TwoUnitPrimitive::class.java, TwoUnitPrimitive.Serializer()) + } + this.registerModule(module) + } + val writer = mapper.testPrettyWriter() + } + + @Nested + inner class DirectSerialize { + @Test + fun primitive() { + val result = writer.writeValueAsString(Primitive(1)) + assertEquals("101", result) + } + + @Test + fun nonNullObject() { + val result = writer.writeValueAsString(NonNullObject("foo")) + assertEquals("\"foo-ser\"", result) + } + + @Suppress("ClassName") + @Nested + inner class NullableObject_ { + @Test + fun value() { + val result = writer.writeValueAsString(NullableObject("foo")) + assertEquals("\"foo-ser\"", result) + } + + @Test + fun nullValue() { + val result = writer.writeValueAsString(NullableObject(null)) + assertEquals("\"NULL\"", result) + } + } + + @Suppress("ClassName") + @Nested + inner class NullablePrimitive_ { + @Test + fun value() { + val result = writer.writeValueAsString(NullablePrimitive(1)) + assertEquals("101", result) + } + + @Test + fun nullValue() { + val result = writer.writeValueAsString(NullablePrimitive(null)) + assertEquals("\"NULL\"", result) + } + } + + @Test + fun twoUnitPrimitive() { + val result = writer.writeValueAsString(TwoUnitPrimitive(1)) + assertEquals("101", result) + } + } + + data class Src( + val pNn: Primitive, + val pN: Primitive?, + val nnoNn: NonNullObject, + val nnoN: NonNullObject?, + val noNn: NullableObject, + val noN: NullableObject?, + val npNn: NullablePrimitive, + val npN: NullablePrimitive?, + val tupNn: TwoUnitPrimitive, + val tupN: TwoUnitPrimitive?, + ) + + @Test + fun nonNull() { + val src = Src( + Primitive(1), + Primitive(2), + NonNullObject("foo"), + NonNullObject("bar"), + NullableObject("baz"), + NullableObject("qux"), + NullablePrimitive(3), + NullablePrimitive(4), + TwoUnitPrimitive(5), + TwoUnitPrimitive(6), + ) + val result = writer.writeValueAsString(src) + + assertEquals( + """ + { + "pNn" : 101, + "pN" : 102, + "nnoNn" : "foo-ser", + "nnoN" : "bar-ser", + "noNn" : "baz-ser", + "noN" : "qux-ser", + "npNn" : 103, + "npN" : 104, + "tupNn" : 105, + "tupN" : 106 + } + """.trimIndent(), + result, + ) + } + + @Test + fun withNull() { + val src = Src( + Primitive(1), + null, + NonNullObject("foo"), + null, + NullableObject(null), + null, + NullablePrimitive(null), + null, + TwoUnitPrimitive(5), + null, + ) + val result = writer.writeValueAsString(src) + + assertEquals( + """ + { + "pNn" : 101, + "pN" : null, + "nnoNn" : "foo-ser", + "nnoN" : null, + "noNn" : "NULL", + "noN" : null, + "npNn" : "NULL", + "npN" : null, + "tupNn" : 105, + "tupN" : null + } + """.trimIndent(), + result, + ) + } +} diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/ValueClasses.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/ValueClasses.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/ValueClasses.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/ValueClasses.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nonNullObject/ByAnnotationTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nonNullObject/ByAnnotationTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nonNullObject/ByAnnotationTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nonNullObject/ByAnnotationTest.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NonNullValueTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NonNullValueTest.kt similarity index 96% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NonNullValueTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NonNullValueTest.kt index 6a06ff81f..c671ac24b 100644 --- a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NonNullValueTest.kt +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NonNullValueTest.kt @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NullValueTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NullValueTest.kt similarity index 96% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NullValueTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NullValueTest.kt index 4dd60c080..6ed8faf87 100644 --- a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullableObject/byAnnotation/NullValueTest.kt +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullableObject/NullValueTest.kt @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject.byAnnotation +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullableObject import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NonNullValueTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NonNullValueTest.kt similarity index 96% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NonNullValueTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NonNullValueTest.kt index c4ab3e891..3bdf7a3a1 100644 --- a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NonNullValueTest.kt +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NonNullValueTest.kt @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullablePrimitive.byAnnotation +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullablePrimitive import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NullValueTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NullValueTest.kt similarity index 96% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NullValueTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NullValueTest.kt index bb439be13..5e002a5e6 100644 --- a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/nullablePrimitive.byAnnotation/NullValueTest.kt +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/nullablePrimitive/NullValueTest.kt @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullablePrimitive.byAnnotation +package com.fasterxml.jackson.module.kotlin.kogeraIntegration.ser.valueClass.serializer.byAnnotation.nullablePrimitive import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/primitive/ByAnnotationTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/primitive/ByAnnotationTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/primitive/ByAnnotationTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/primitive/ByAnnotationTest.kt diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/twoUnitPrimitive/ByAnnotationTest.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/twoUnitPrimitive/ByAnnotationTest.kt similarity index 100% rename from src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser.valueClass/serializer/byAnnotation/twoUnitPrimitive/ByAnnotationTest.kt rename to src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/ser/valueClass/serializer/byAnnotation/twoUnitPrimitive/ByAnnotationTest.kt