Skip to content

Commit 9d2fedf

Browse files
authored
Merge pull request #993 from k163377/value-class-tests
Add value class tests for primitive that consume two argument slots
2 parents 333cd46 + 0ce2933 commit 9d2fedf

File tree

18 files changed

+3207
-24
lines changed

18 files changed

+3207
-24
lines changed

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/JacksonInjectTest.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ class JacksonInjectTest {
2626
@get:JacksonInject("noNNn")
2727
val noNNn: NullableObject?,
2828
@get:JacksonInject("noNN")
29-
val noNN: NullableObject?
29+
val noNN: NullableObject?,
30+
@get:JacksonInject("tupNn")
31+
val tupNn: TwoUnitPrimitive,
32+
@get:JacksonInject("tupN")
33+
val tupN: TwoUnitPrimitive?
3034
)
3135

3236
@Test
@@ -39,7 +43,9 @@ class JacksonInjectTest {
3943
"noNnNn" to NullableObject("noNnNn"),
4044
"noNnN" to NullableObject(null),
4145
"noNNn" to NullableObject("noNNn"),
42-
"noNN" to NullableObject(null)
46+
"noNN" to NullableObject(null),
47+
"tupNn" to TwoUnitPrimitive(3),
48+
"tupN" to TwoUnitPrimitive(4)
4349
)
4450

4551
val reader = jacksonObjectMapper()

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/ValueClasses.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,14 @@ value class NullableObject(val v: String?) {
4242
override fun deserializeKey(key: String, ctxt: DeserializationContext) = NullableObject("$key-deser")
4343
}
4444
}
45+
46+
@JvmInline
47+
value class TwoUnitPrimitive(val v: Long) {
48+
class Deserializer : StdDeserializer<TwoUnitPrimitive>(TwoUnitPrimitive::class.java) {
49+
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): TwoUnitPrimitive = TwoUnitPrimitive(p.longValue + 100)
50+
}
51+
52+
class KeyDeserializer : JacksonKeyDeserializer() {
53+
override fun deserializeKey(key: String, ctxt: DeserializationContext) = TwoUnitPrimitive(key.toLong() + 100)
54+
}
55+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/WithoutCustomDeserializeMethodTest.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ class WithoutCustomDeserializeMethodTest {
4545
assertNotEquals(NullableObject(null), result, "kogera #209 has been fixed.")
4646
}
4747
}
48+
49+
@Test
50+
fun twoUnitPrimitive() {
51+
val result = defaultMapper.readValue<TwoUnitPrimitive>("1")
52+
assertEquals(TwoUnitPrimitive(1), result)
53+
}
4854
}
4955

5056
data class Dst(
@@ -53,7 +59,9 @@ class WithoutCustomDeserializeMethodTest {
5359
val nnoNn: NonNullObject,
5460
val nnoN: NonNullObject?,
5561
val noNn: NullableObject,
56-
val noN: NullableObject?
62+
val noN: NullableObject?,
63+
val tupNn: TwoUnitPrimitive,
64+
val tupN: TwoUnitPrimitive?
5765
)
5866

5967
@Test
@@ -64,7 +72,9 @@ class WithoutCustomDeserializeMethodTest {
6472
NonNullObject("foo"),
6573
NonNullObject("bar"),
6674
NullableObject("baz"),
67-
NullableObject("qux")
75+
NullableObject("qux"),
76+
TwoUnitPrimitive(3),
77+
TwoUnitPrimitive(4)
6878
)
6979
val src = defaultMapper.writeValueAsString(expected)
7080
val result = defaultMapper.readValue<Dst>(src)
@@ -80,6 +90,8 @@ class WithoutCustomDeserializeMethodTest {
8090
NonNullObject("foo"),
8191
null,
8292
NullableObject(null),
93+
null,
94+
TwoUnitPrimitive(3),
8395
null
8496
)
8597
val src = defaultMapper.writeValueAsString(expected)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.defaultArgument
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator
4+
import com.fasterxml.jackson.module.kotlin.defaultMapper
5+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.TwoUnitPrimitive
6+
import com.fasterxml.jackson.module.kotlin.readValue
7+
import org.junit.jupiter.api.Assertions.assertEquals
8+
import org.junit.jupiter.api.Test
9+
10+
class TwoUnitPrimitiveTest {
11+
data class ByConstructor(
12+
val nn: TwoUnitPrimitive = TwoUnitPrimitive(1),
13+
val nNn: TwoUnitPrimitive? = TwoUnitPrimitive(2),
14+
val nN: TwoUnitPrimitive? = null
15+
)
16+
17+
@Test
18+
fun byConstructorTest() {
19+
assertEquals(ByConstructor(), defaultMapper.readValue<ByConstructor>("{}"))
20+
}
21+
22+
data class ByFactory(val nn: TwoUnitPrimitive, val nNn: TwoUnitPrimitive?, val nN: TwoUnitPrimitive?) {
23+
companion object {
24+
@JvmStatic
25+
@JsonCreator
26+
fun creator(
27+
nn: TwoUnitPrimitive = TwoUnitPrimitive(1),
28+
nNn: TwoUnitPrimitive? = TwoUnitPrimitive(2),
29+
nN: TwoUnitPrimitive? = null
30+
) = ByFactory(nn, nNn, nN)
31+
}
32+
}
33+
34+
@Test
35+
fun byFactoryTest() {
36+
assertEquals(ByFactory.creator(), defaultMapper.readValue<ByFactory>("{}"))
37+
}
38+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/deserializer/SpecifiedForObjectMapperTest.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
55
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.NonNullObject
66
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.NullableObject
77
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.Primitive
8+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.TwoUnitPrimitive
89
import com.fasterxml.jackson.module.kotlin.readValue
910
import org.junit.jupiter.api.Assertions.assertEquals
1011
import org.junit.jupiter.api.Nested
@@ -18,6 +19,7 @@ class SpecifiedForObjectMapperTest {
1819
this.addDeserializer(Primitive::class.java, Primitive.Deserializer())
1920
this.addDeserializer(NonNullObject::class.java, NonNullObject.Deserializer())
2021
this.addDeserializer(NullableObject::class.java, NullableObject.DeserializerWrapsNullable())
22+
this.addDeserializer(TwoUnitPrimitive::class.java, TwoUnitPrimitive.Deserializer())
2123
}
2224
this.registerModule(module)
2325
}
@@ -50,9 +52,15 @@ class SpecifiedForObjectMapperTest {
5052
@Test
5153
fun nullString() {
5254
val result = mapper.readValue<NullableObject?>("null")
53-
assertNotEquals(NullableObject("null-value-deser"), result, "kogera #209 has been fixed.")
55+
assertNotEquals(NullableObject("null-value-deser"), result, "#209 has been fixed.")
5456
}
5557
}
58+
59+
@Test
60+
fun twoUnitPrimitive() {
61+
val result = mapper.readValue<TwoUnitPrimitive>("1")
62+
assertEquals(TwoUnitPrimitive(101), result)
63+
}
5664
}
5765

5866
data class Dst(
@@ -61,7 +69,9 @@ class SpecifiedForObjectMapperTest {
6169
val nnoNn: NonNullObject,
6270
val nnoN: NonNullObject?,
6371
val noNn: NullableObject,
64-
val noN: NullableObject?
72+
val noN: NullableObject?,
73+
val tupNn: TwoUnitPrimitive,
74+
val tupN: TwoUnitPrimitive?
6575
)
6676

6777
@Test
@@ -72,7 +82,9 @@ class SpecifiedForObjectMapperTest {
7282
NonNullObject("foo"),
7383
NonNullObject("bar"),
7484
NullableObject("baz"),
75-
NullableObject("qux")
85+
NullableObject("qux"),
86+
TwoUnitPrimitive(3),
87+
TwoUnitPrimitive(4)
7688
)
7789
val src = mapper.writeValueAsString(base)
7890
val result = mapper.readValue<Dst>(src)
@@ -83,7 +95,9 @@ class SpecifiedForObjectMapperTest {
8395
NonNullObject("foo-deser"),
8496
NonNullObject("bar-deser"),
8597
NullableObject("baz-deser"),
86-
NullableObject("qux-deser")
98+
NullableObject("qux-deser"),
99+
TwoUnitPrimitive(103),
100+
TwoUnitPrimitive(104)
87101
)
88102
assertEquals(expected, result)
89103
}
@@ -96,6 +110,8 @@ class SpecifiedForObjectMapperTest {
96110
NonNullObject("foo"),
97111
null,
98112
NullableObject(null),
113+
null,
114+
TwoUnitPrimitive(3),
99115
null
100116
)
101117
val src = mapper.writeValueAsString(base)
@@ -107,6 +123,8 @@ class SpecifiedForObjectMapperTest {
107123
NonNullObject("foo-deser"),
108124
null,
109125
NullableObject("null-value-deser"),
126+
null,
127+
TwoUnitPrimitive(103),
110128
null
111129
)
112130
assertEquals(expected, result)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.deserializer.byAnnotation.specifiedForProperty
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
4+
import com.fasterxml.jackson.module.kotlin.defaultMapper
5+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.TwoUnitPrimitive
6+
import com.fasterxml.jackson.module.kotlin.readValue
7+
import org.junit.jupiter.api.Assertions.assertEquals
8+
import org.junit.jupiter.api.Nested
9+
import org.junit.jupiter.api.Test
10+
11+
class TwoUnitPrimitiveTest {
12+
data class NonNull(
13+
@get:JsonDeserialize(using = TwoUnitPrimitive.Deserializer::class)
14+
val getterAnn: TwoUnitPrimitive,
15+
@field:JsonDeserialize(using = TwoUnitPrimitive.Deserializer::class)
16+
val fieldAnn: TwoUnitPrimitive
17+
)
18+
19+
@Test
20+
fun nonNull() {
21+
val result = defaultMapper.readValue<NonNull>(
22+
"""
23+
{
24+
"getterAnn" : 1,
25+
"fieldAnn" : 2
26+
}
27+
""".trimIndent()
28+
)
29+
assertEquals(NonNull(TwoUnitPrimitive(101), TwoUnitPrimitive(102)), result)
30+
}
31+
32+
data class Nullable(
33+
@get:JsonDeserialize(using = TwoUnitPrimitive.Deserializer::class)
34+
val getterAnn: TwoUnitPrimitive?,
35+
@field:JsonDeserialize(using = TwoUnitPrimitive.Deserializer::class)
36+
val fieldAnn: TwoUnitPrimitive?
37+
)
38+
39+
@Nested
40+
inner class NullableTest {
41+
@Test
42+
fun nonNullInput() {
43+
val result = defaultMapper.readValue<Nullable>(
44+
"""
45+
{
46+
"getterAnn" : 1,
47+
"fieldAnn" : 2
48+
}
49+
""".trimIndent()
50+
)
51+
assertEquals(Nullable(TwoUnitPrimitive(101), TwoUnitPrimitive(102)), result)
52+
}
53+
54+
@Test
55+
fun nullInput() {
56+
val result = defaultMapper.readValue<Nullable>(
57+
"""
58+
{
59+
"getterAnn" : null,
60+
"fieldAnn" : null
61+
}
62+
""".trimIndent()
63+
)
64+
assertEquals(Nullable(null, null), result)
65+
}
66+
}
67+
}

src/test/kotlin/com/fasterxml/jackson/module/kotlin/kogeraIntegration/deser/valueClass/jsonCreator/InCreatorArgumentTest.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import com.fasterxml.jackson.module.kotlin.defaultMapper
55
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.NonNullObject
66
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.NullableObject
77
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.Primitive
8+
import com.fasterxml.jackson.module.kotlin.kogeraIntegration.deser.valueClass.TwoUnitPrimitive
89
import com.fasterxml.jackson.module.kotlin.readValue
910
import org.junit.jupiter.api.Assertions.assertEquals
1011
import org.junit.jupiter.api.Test
1112

1213
private fun Primitive.modify(): Primitive = Primitive(v + 100)
1314
private fun NonNullObject.modify(): NonNullObject = NonNullObject("$v-creator")
1415
private fun NullableObject.modify(): NullableObject = NullableObject(v!! + "-creator")
16+
private fun TwoUnitPrimitive.modify(): TwoUnitPrimitive = TwoUnitPrimitive(v + 100)
1517

1618
class InCreatorArgumentTest {
1719
data class Dst(
@@ -20,7 +22,9 @@ class InCreatorArgumentTest {
2022
val nnoNn: NonNullObject,
2123
val nnoN: NonNullObject?,
2224
val noNn: NullableObject,
23-
val noN: NullableObject?
25+
val noN: NullableObject?,
26+
val tupNn: TwoUnitPrimitive,
27+
val tupN: TwoUnitPrimitive?
2428
) {
2529
companion object {
2630
@JvmStatic
@@ -31,14 +35,18 @@ class InCreatorArgumentTest {
3135
nnoNn: NonNullObject,
3236
nnoN: NonNullObject?,
3337
noNn: NullableObject,
34-
noN: NullableObject?
38+
noN: NullableObject?,
39+
tupNn: TwoUnitPrimitive,
40+
tupN: TwoUnitPrimitive?
3541
) = Dst(
3642
pNn.modify(),
3743
pN?.modify(),
3844
nnoNn.modify(),
3945
nnoN?.modify(),
4046
noNn.modify(),
41-
noN?.modify()
47+
noN?.modify(),
48+
tupNn.modify(),
49+
tupN?.modify()
4250
)
4351
}
4452
}
@@ -51,7 +59,9 @@ class InCreatorArgumentTest {
5159
NonNullObject("nnoNn"),
5260
NonNullObject("nnoN"),
5361
NullableObject("noNn"),
54-
NullableObject("noN")
62+
NullableObject("noN"),
63+
TwoUnitPrimitive(3),
64+
TwoUnitPrimitive(4)
5565
)
5666
val result = defaultMapper.readValue<Dst>(defaultMapper.writeValueAsString(base))
5767

@@ -62,7 +72,9 @@ class InCreatorArgumentTest {
6272
nnoNn = base.nnoNn.modify(),
6373
nnoN = base.nnoN?.modify(),
6474
noNn = base.noNn.modify(),
65-
noN = base.noN?.modify()
75+
noN = base.noN?.modify(),
76+
tupNn = base.tupNn.modify(),
77+
tupN = base.tupN?.modify()
6678
),
6779
result
6880
)

0 commit comments

Comments
 (0)