Skip to content

Commit

Permalink
Merge pull request #43 from ProjectMapK/value-deser-tests
Browse files Browse the repository at this point in the history
Added test on deserialization of `value class`
  • Loading branch information
k163377 authored Jan 18, 2023
2 parents e56562d + aa392c2 commit 00c2415
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.fasterxml.jackson.module.kotlin._integration.deser.value_class.deserializer.has_json_value

import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows

class SpecifiedForObjectMapperTest {
companion object {
val mapper = jacksonObjectMapper().apply {
val module = SimpleModule().apply {
this.addDeserializer(Primitive::class.java, Primitive.Deserializer())
this.addDeserializer(NonNullObject::class.java, NonNullObject.Deserializer())
this.addDeserializer(NullableObject::class.java, NullableObject.Deserializer())
}
this.registerModule(module)
}
}

data class Dst(
val pNn: Primitive,
val pN: Primitive?,
val nnoNn: NonNullObject,
val nnoN: NonNullObject?,
val noNn: NullableObject,
val noN: NullableObject?
)

@Test
fun nonNull() {
val expected = Dst(
Primitive(1),
Primitive(2),
NonNullObject("foo"),
NonNullObject("bar"),
NullableObject("baz"),
NullableObject("qux")
)
val src = mapper.writeValueAsString(expected)
val result = mapper.readValue<Dst>(src)

assertEquals(expected, result)
}

// region Kogera42
// After https://github.com/ProjectMapK/jackson-module-kogera/issues/42 is resolved, modify the test.
data class WithoutNoNn(
val pNn: Primitive,
val pN: Primitive?,
val nnoNn: NonNullObject,
val nnoN: NonNullObject?,
// val noNn: NullableObject,
val noN: NullableObject?
)

@Test
fun withNull() {
val expected = WithoutNoNn(
Primitive(1),
null,
NonNullObject("foo"),
null,
// NullableObject(null),
null
)
val src = mapper.writeValueAsString(expected)
val result = mapper.readValue<WithoutNoNn>(src)

assertEquals(expected, result)
}

data class Tmp(val noNn: NullableObject)

@Test
fun temp() {
val expected = Tmp(NullableObject(null))
val src = mapper.writeValueAsString(expected)

assertThrows<MissingKotlinParameterException>("Kogera #42 is fixed") {
val result = mapper.readValue<Tmp>(src)
assertEquals(expected, result)
}
}
// endregion
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.fasterxml.jackson.module.kotlin._integration.deser.value_class.deserializer.has_json_value

import com.fasterxml.jackson.annotation.JsonValue
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.deser.std.StdDeserializer

@JvmInline
value class Primitive(@get:JsonValue val v: Int) {
class Deserializer : StdDeserializer<Primitive>(Primitive::class.java) {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Primitive = Primitive(p.intValue)
}
}

@JvmInline
value class NonNullObject(@get:JsonValue val v: String) {
class Deserializer : StdDeserializer<NonNullObject>(NonNullObject::class.java) {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): NonNullObject =
NonNullObject(p.valueAsString)
}
}

@JvmInline
value class NullableObject(@get:JsonValue val v: String?) {
class Deserializer : StdDeserializer<NullableObject>(NullableObject::class.java) {
// After https://github.com/ProjectMapK/jackson-module-kogera/issues/42 is resolved, uncomment out
// override fun getNullValue(ctxt: DeserializationContext): NullableObject = NullableObject(null)

override fun deserialize(p: JsonParser, ctxt: DeserializationContext): NullableObject =
NullableObject(p.valueAsString)
}
}

0 comments on commit 00c2415

Please sign in to comment.