|
1 | 1 | package com.fasterxml.jackson.module.kotlin._ported.test
|
2 | 2 |
|
3 |
| -import com.fasterxml.jackson.core.JsonGenerator |
4 |
| -import com.fasterxml.jackson.core.JsonParser |
5 | 3 | import com.fasterxml.jackson.databind.*
|
6 | 4 | import com.fasterxml.jackson.databind.module.SimpleModule
|
7 | 5 | import com.fasterxml.jackson.module.kotlin.addDeserializer
|
8 | 6 | import com.fasterxml.jackson.module.kotlin.addSerializer
|
9 |
| -import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper |
10 |
| -import com.fasterxml.jackson.module.kotlin.readValue |
11 |
| -import org.junit.jupiter.api.Assertions.assertEquals |
| 7 | +import io.mockk.confirmVerified |
| 8 | +import io.mockk.every |
| 9 | +import io.mockk.mockk |
| 10 | +import io.mockk.verify |
| 11 | +import org.junit.jupiter.api.Nested |
12 | 12 | import org.junit.jupiter.api.Test
|
13 |
| -import java.math.BigDecimal |
14 |
| -import java.math.RoundingMode |
15 | 13 |
|
16 | 14 | private class KClassSerializerDeserializerTest {
|
17 |
| - val objectMapper = jacksonObjectMapper() |
18 |
| - .registerModule(SimpleModule() |
19 |
| - .addSerializer(Double::class, RoundingSerializer()) |
20 |
| - .addDeserializer(Double::class, RoundingDeserializer())) |
21 |
| - |
22 |
| - @Test |
23 |
| - fun `test custom serializer expecting object serialized with rounding serializer applied`() { |
24 |
| - val jsonString = objectMapper.writeValueAsString(TestDoubleData(nonNullVal = 1.5567, nullVal = 1.5678)) |
25 |
| - val testResult = objectMapper.readValue(jsonString, TestDoubleData::class.java) |
26 |
| - assertEquals(1.56, testResult.nonNullVal) |
27 |
| - assertEquals(1.57, testResult.nullVal) |
28 |
| - } |
| 15 | + @Nested |
| 16 | + inner class AddDeserializerTest { |
| 17 | + val module = mockk<SimpleModule> { |
| 18 | + every { addDeserializer(any<Class<*>>(), any()) } returns this |
| 19 | + } |
29 | 20 |
|
30 |
| - @Test |
31 |
| - fun `test custom deserializer expecting object deserialized with rounding deserializer applied`() { |
32 |
| - val testResult = objectMapper.readValue<TestDoubleData>(""" |
33 |
| - { |
34 |
| - "nonNullVal":1.5567, |
35 |
| - "nullVal":1.5678 |
36 |
| - } |
37 |
| - """.trimIndent()) |
38 |
| - assertEquals(1.56, testResult.nonNullVal) |
39 |
| - assertEquals(1.57, testResult.nullVal) |
40 |
| - } |
41 |
| -} |
| 21 | + @Test |
| 22 | + fun primitiveType() { |
| 23 | + val mockDeserializer: JsonDeserializer<Double> = mockk() |
| 24 | + module.addDeserializer(Double::class, mockDeserializer) |
| 25 | + |
| 26 | + verify(exactly = 1) { module.addDeserializer(Double::class.javaPrimitiveType, mockDeserializer) } |
| 27 | + verify(exactly = 1) { module.addDeserializer(Double::class.javaObjectType, mockDeserializer) } |
| 28 | + } |
42 | 29 |
|
43 |
| -data class TestDoubleData( |
44 |
| - val nonNullVal: Double, |
45 |
| - val nullVal: Double? |
46 |
| -) |
| 30 | + @Test |
| 31 | + fun objectType() { |
| 32 | + val mockDeserializer: JsonDeserializer<Any> = mockk() |
| 33 | + module.addDeserializer(Any::class, mockDeserializer) |
47 | 34 |
|
48 |
| -class RoundingSerializer : JsonSerializer<Double>() { |
49 |
| - override fun serialize(value: Double?, gen: JsonGenerator?, serializers: SerializerProvider?) { |
50 |
| - value?.let { gen?.writeNumber(BigDecimal(it).setScale(2, RoundingMode.HALF_UP)) } |
| 35 | + verify(exactly = 1) { module.addDeserializer(Any::class.javaObjectType, mockDeserializer) } |
| 36 | + confirmVerified(module) |
| 37 | + } |
| 38 | + |
| 39 | + @Test |
| 40 | + @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") |
| 41 | + fun wrapperType() { |
| 42 | + val mockDeserializer: JsonDeserializer<Integer> = mockk() |
| 43 | + module.addDeserializer(Integer::class, mockDeserializer) |
| 44 | + |
| 45 | + verify(exactly = 1) { module.addDeserializer(Integer::class.javaPrimitiveType, mockDeserializer) } |
| 46 | + verify(exactly = 1) { module.addDeserializer(Integer::class.javaObjectType, mockDeserializer) } |
| 47 | + } |
51 | 48 | }
|
52 |
| -} |
53 | 49 |
|
54 |
| -class RoundingDeserializer : JsonDeserializer<Double>() { |
55 |
| - override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): Double { |
56 |
| - return BigDecimal(p?.valueAsString) |
57 |
| - .setScale(2, RoundingMode.HALF_UP) |
58 |
| - .toDouble() |
| 50 | + @Nested |
| 51 | + inner class AddSerializerTest { |
| 52 | + val module = mockk<SimpleModule> { |
| 53 | + every { addSerializer(any<Class<*>>(), any()) } returns this |
| 54 | + } |
| 55 | + |
| 56 | + @Test |
| 57 | + fun primitiveType() { |
| 58 | + val mockSerializer: JsonSerializer<Double> = mockk() |
| 59 | + module.addSerializer(Double::class, mockSerializer) |
| 60 | + |
| 61 | + verify(exactly = 1) { module.addSerializer(Double::class.javaPrimitiveType, mockSerializer) } |
| 62 | + verify(exactly = 1) { module.addSerializer(Double::class.javaObjectType, mockSerializer) } |
| 63 | + } |
| 64 | + |
| 65 | + @Test |
| 66 | + fun objectType() { |
| 67 | + val mockSerializer: JsonSerializer<Any> = mockk() |
| 68 | + module.addSerializer(Any::class, mockSerializer) |
| 69 | + |
| 70 | + verify(exactly = 1) { module.addSerializer(Any::class.javaObjectType, mockSerializer) } |
| 71 | + confirmVerified(module) |
| 72 | + } |
| 73 | + |
| 74 | + @Test |
| 75 | + @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") |
| 76 | + fun wrapperType() { |
| 77 | + val mockSerializer: JsonSerializer<Integer> = mockk() |
| 78 | + module.addSerializer(Integer::class, mockSerializer) |
| 79 | + |
| 80 | + verify(exactly = 1) { module.addSerializer(Integer::class.javaPrimitiveType, mockSerializer) } |
| 81 | + verify(exactly = 1) { module.addSerializer(Integer::class.javaObjectType, mockSerializer) } |
| 82 | + } |
59 | 83 | }
|
60 | 84 | }
|
0 commit comments