Skip to content

Commit 9ae3b53

Browse files
authored
Merge pull request #7 from ProjectMapK/fix_github558
Fix jackson github558.
2 parents 0f33d63 + a11fd3a commit 9ae3b53

File tree

5 files changed

+103
-74
lines changed

5 files changed

+103
-74
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ dependencies {
2929
// test libs
3030
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.2")
3131
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
32+
// https://mvnrepository.com/artifact/io.mockk/mockk
33+
testImplementation("io.mockk:mockk:1.12.2")
3234

3335
testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
3436
}

src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ package com.fasterxml.jackson.module.kotlin
33
import com.fasterxml.jackson.core.JsonParser
44
import com.fasterxml.jackson.core.TreeNode
55
import com.fasterxml.jackson.core.type.TypeReference
6+
import com.fasterxml.jackson.databind.JsonDeserializer
67
import com.fasterxml.jackson.databind.JsonNode
8+
import com.fasterxml.jackson.databind.JsonSerializer
79
import com.fasterxml.jackson.databind.MappingIterator
810
import com.fasterxml.jackson.databind.ObjectMapper
911
import com.fasterxml.jackson.databind.ObjectReader
1012
import com.fasterxml.jackson.databind.json.JsonMapper
13+
import com.fasterxml.jackson.databind.module.SimpleModule
1114
import com.fasterxml.jackson.databind.node.ArrayNode
1215
import com.fasterxml.jackson.databind.node.ObjectNode
1316
import java.io.File
@@ -16,6 +19,7 @@ import java.io.Reader
1619
import java.math.BigDecimal
1720
import java.math.BigInteger
1821
import java.net.URL
22+
import kotlin.reflect.KClass
1923

2024
fun kotlinModule(initializer: KotlinModule.Builder.() -> Unit = {}): KotlinModule {
2125
val builder = KotlinModule.Builder()
@@ -87,3 +91,17 @@ operator fun ObjectNode.minusAssign(fields: Collection<String>) { remove(fields)
8791

8892
operator fun JsonNode.contains(field: String) = has(field)
8993
operator fun JsonNode.contains(index: Int) = has(index)
94+
95+
public fun <T : Any> SimpleModule.addSerializer(
96+
kClass: KClass<T>, serializer: JsonSerializer<T>
97+
): SimpleModule = this.apply {
98+
kClass.javaPrimitiveType?.let { addSerializer(it, serializer) }
99+
addSerializer(kClass.javaObjectType, serializer)
100+
}
101+
102+
public fun <T : Any> SimpleModule.addDeserializer(
103+
kClass: KClass<T>, deserializer: JsonDeserializer<T>
104+
): SimpleModule = this.apply {
105+
kClass.javaPrimitiveType?.let { addDeserializer(it, deserializer) }
106+
addDeserializer(kClass.javaObjectType, deserializer)
107+
}

src/main/kotlin/com/fasterxml/jackson/module/kotlin/InternalCommons.kt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,13 @@
11
package com.fasterxml.jackson.module.kotlin
22

3-
import com.fasterxml.jackson.databind.JsonDeserializer
43
import com.fasterxml.jackson.databind.JsonMappingException
5-
import com.fasterxml.jackson.databind.JsonSerializer
6-
import com.fasterxml.jackson.databind.module.SimpleModule
74
import java.util.*
8-
import kotlin.reflect.KClass
95
import kotlin.reflect.KType
106
import kotlin.reflect.jvm.jvmErasure
117

128
internal fun JsonMappingException.wrapWithPath(refFrom: Any?, refFieldName: String) = JsonMappingException.wrapWithPath(this, refFrom, refFieldName)
139
internal fun JsonMappingException.wrapWithPath(refFrom: Any?, index: Int) = JsonMappingException.wrapWithPath(this, refFrom, index)
1410

15-
inline fun <reified T : Any> SimpleModule.addSerializer(kClass: KClass<T>, serializer: JsonSerializer<T>) = this.apply {
16-
addSerializer(kClass.java, serializer)
17-
addSerializer(kClass.javaObjectType, serializer)
18-
}
19-
20-
inline fun <reified T : Any> SimpleModule.addDeserializer(kClass: KClass<T>, deserializer: JsonDeserializer<T>) = this.apply {
21-
addDeserializer(kClass.java, deserializer)
22-
addDeserializer(kClass.javaObjectType, deserializer)
23-
}
24-
2511
internal fun Int.toBitSet(): BitSet {
2612
var i = this
2713
var index = 0
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.fasterxml.jackson.module.kotlin
2+
3+
import com.fasterxml.jackson.databind.JsonDeserializer
4+
import com.fasterxml.jackson.databind.JsonSerializer
5+
import com.fasterxml.jackson.databind.module.SimpleModule
6+
import io.mockk.confirmVerified
7+
import io.mockk.every
8+
import io.mockk.mockk
9+
import io.mockk.verify
10+
import org.junit.jupiter.api.Nested
11+
import org.junit.jupiter.api.Test
12+
13+
class ExtensionsTest {
14+
@Nested
15+
inner class AddDeserializerTest {
16+
val module = mockk<SimpleModule> {
17+
every { addDeserializer(any<Class<*>>(), any()) } returns this
18+
}
19+
20+
@Test
21+
fun primitiveType() {
22+
val mockDeserializer: JsonDeserializer<Double> = mockk()
23+
module.addDeserializer(Double::class, mockDeserializer)
24+
25+
verify(exactly = 1) { module.addDeserializer(Double::class.javaPrimitiveType, mockDeserializer) }
26+
verify(exactly = 1) { module.addDeserializer(Double::class.javaObjectType, mockDeserializer) }
27+
}
28+
29+
@Test
30+
fun objectType() {
31+
val mockDeserializer: JsonDeserializer<Any> = mockk()
32+
module.addDeserializer(Any::class, mockDeserializer)
33+
34+
verify(exactly = 1) { module.addDeserializer(Any::class.javaObjectType, mockDeserializer) }
35+
confirmVerified(module)
36+
}
37+
38+
@Test
39+
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
40+
fun wrapperType() {
41+
val mockDeserializer: JsonDeserializer<Integer> = mockk()
42+
module.addDeserializer(Integer::class, mockDeserializer)
43+
44+
verify(exactly = 1) { module.addDeserializer(Integer::class.javaPrimitiveType, mockDeserializer) }
45+
verify(exactly = 1) { module.addDeserializer(Integer::class.javaObjectType, mockDeserializer) }
46+
}
47+
}
48+
49+
@Nested
50+
inner class AddSerializerTest {
51+
val module = mockk<SimpleModule> {
52+
every { addSerializer(any<Class<*>>(), any()) } returns this
53+
}
54+
55+
@Test
56+
fun primitiveType() {
57+
val mockSerializer: JsonSerializer<Double> = mockk()
58+
module.addSerializer(Double::class, mockSerializer)
59+
60+
verify(exactly = 1) { module.addSerializer(Double::class.javaPrimitiveType, mockSerializer) }
61+
verify(exactly = 1) { module.addSerializer(Double::class.javaObjectType, mockSerializer) }
62+
}
63+
64+
@Test
65+
fun objectType() {
66+
val mockSerializer: JsonSerializer<Any> = mockk()
67+
module.addSerializer(Any::class, mockSerializer)
68+
69+
verify(exactly = 1) { module.addSerializer(Any::class.javaObjectType, mockSerializer) }
70+
confirmVerified(module)
71+
}
72+
73+
@Test
74+
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
75+
fun wrapperType() {
76+
val mockSerializer: JsonSerializer<Integer> = mockk()
77+
module.addSerializer(Integer::class, mockSerializer)
78+
79+
verify(exactly = 1) { module.addSerializer(Integer::class.javaPrimitiveType, mockSerializer) }
80+
verify(exactly = 1) { module.addSerializer(Integer::class.javaObjectType, mockSerializer) }
81+
}
82+
}
83+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/_ported/test/KClassSerializerDeserializerTest.kt

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)