Skip to content

Commit 1490e6a

Browse files
authored
Merge pull request #210 from ProjectMapK/tests
Add and organize tests for `value class`
2 parents 1e519ae + 1ee3d47 commit 1490e6a

File tree

4 files changed

+83
-16
lines changed

4 files changed

+83
-16
lines changed
Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,55 @@
11
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.valueClass
22

3+
import io.github.projectmapk.jackson.module.kogera.defaultMapper
34
import io.github.projectmapk.jackson.module.kogera.jacksonObjectMapper
45
import io.github.projectmapk.jackson.module.kogera.readValue
6+
import org.junit.jupiter.api.Assertions
57
import org.junit.jupiter.api.Assertions.assertEquals
6-
import org.junit.jupiter.api.Assertions.assertTrue
8+
import org.junit.jupiter.api.Nested
79
import org.junit.jupiter.api.Test
810
import org.junit.jupiter.api.assertThrows
911
import java.lang.reflect.InvocationTargetException
1012

11-
class NoSpecifiedTest {
13+
class WithoutCustomDeserializeMethodTest {
1214
companion object {
1315
val mapper = jacksonObjectMapper()
1416
val throwable = IllegalArgumentException("test")
1517
}
1618

19+
@Nested
20+
inner class DirectDeserializeTest {
21+
@Test
22+
fun primitive() {
23+
val result = defaultMapper.readValue<Primitive>("1")
24+
assertEquals(Primitive(1), result)
25+
}
26+
27+
@Test
28+
fun nonNullObject() {
29+
val result = defaultMapper.readValue<NonNullObject>(""""foo"""")
30+
assertEquals(NonNullObject("foo"), result)
31+
}
32+
33+
@Suppress("ClassName")
34+
@Nested
35+
inner class NullableObject_ {
36+
@Test
37+
fun value() {
38+
val result = defaultMapper.readValue<NullableObject>(""""foo"""")
39+
assertEquals(NullableObject("foo"), result)
40+
}
41+
42+
// failing
43+
@Test
44+
fun nullString() {
45+
assertThrows<NullPointerException>("#209 has been fixed.") {
46+
val result = defaultMapper.readValue<NullableObject>("null")
47+
assertEquals(NullableObject(null), result)
48+
}
49+
}
50+
}
51+
}
52+
1753
data class Dst(
1854
val pNn: Primitive,
1955
val pN: Primitive?,
@@ -24,7 +60,7 @@ class NoSpecifiedTest {
2460
)
2561

2662
@Test
27-
fun nonNull() {
63+
fun withoutNull() {
2864
val expected = Dst(
2965
Primitive(1),
3066
Primitive(2),
@@ -56,15 +92,17 @@ class NoSpecifiedTest {
5692
}
5793

5894
@JvmInline
59-
value class HasCheck(val value: Int) {
95+
value class HasCheckConstructor(val value: Int) {
6096
init {
6197
if (value < 0) throw throwable
6298
}
6399
}
64100

65101
@Test
66-
fun callCheckTest() {
67-
val e = assertThrows<InvocationTargetException> { mapper.readValue<HasCheck>("-1") }
68-
assertTrue(e.cause === throwable)
102+
fun callConstructorCheckTest() {
103+
val e = assertThrows<InvocationTargetException> { defaultMapper.readValue<HasCheckConstructor>("-1") }
104+
Assertions.assertTrue(e.cause === throwable)
69105
}
106+
107+
// If all JsonCreator tests are OK, no need to check throws from factory functions.
70108
}

src/test/kotlin/io/github/projectmapk/jackson/module/kogera/zIntegration/deser/valueClass/deserializer/SpecifiedForObjectMapperTest.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import io.github.projectmapk.jackson.module.kogera.zIntegration.deser.valueClass
77
import io.github.projectmapk.jackson.module.kogera.zIntegration.deser.valueClass.NullableObject
88
import io.github.projectmapk.jackson.module.kogera.zIntegration.deser.valueClass.Primitive
99
import org.junit.jupiter.api.Assertions.assertEquals
10+
import org.junit.jupiter.api.Nested
1011
import org.junit.jupiter.api.Test
12+
import org.junit.jupiter.api.assertThrows
1113

1214
class SpecifiedForObjectMapperTest {
1315
companion object {
@@ -21,6 +23,40 @@ class SpecifiedForObjectMapperTest {
2123
}
2224
}
2325

26+
@Nested
27+
inner class DirectDeserialize {
28+
@Test
29+
fun primitive() {
30+
val result = mapper.readValue<Primitive>("1")
31+
assertEquals(Primitive(101), result)
32+
}
33+
34+
@Test
35+
fun nonNullObject() {
36+
val result = mapper.readValue<NonNullObject>(""""foo"""")
37+
assertEquals(NonNullObject("foo-deser"), result)
38+
}
39+
40+
@Suppress("ClassName")
41+
@Nested
42+
inner class NullableObject_ {
43+
@Test
44+
fun value() {
45+
val result = mapper.readValue<NullableObject>(""""foo"""")
46+
assertEquals(NullableObject("foo-deser"), result)
47+
}
48+
49+
// failing
50+
@Test
51+
fun nullString() {
52+
assertThrows<NullPointerException>("#209 has been fixed.") {
53+
val result = mapper.readValue<NullableObject>("null")
54+
assertEquals(NullableObject("null-value-deser"), result)
55+
}
56+
}
57+
}
58+
}
59+
2460
data class Dst(
2561
val pNn: Primitive,
2662
val pN: Primitive?,
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
77
import org.junit.jupiter.api.Test
88

99
// Test for Creator that can be handled by the Jackson mechanism.
10-
class ValueClassByJacksonCreatorTest {
10+
class HandledByJacksonTest {
1111
@JvmInline
1212
value class PrimitiveNullableCreator(val value: Int) {
1313
companion object {
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ import org.junit.jupiter.api.Test
99
import org.junit.jupiter.api.assertThrows
1010

1111
// Test on the case of deserialization by ValueClassBoxDeserializer
12-
class ValueClassByOriginalCreatorTest {
13-
@JvmInline
14-
value class Primary(val primary: String)
15-
12+
class HandledByKogeraTest {
1613
@JvmInline
1714
value class SpecifiedPrimary @JsonCreator constructor(val primary: String?)
1815

@@ -34,14 +31,12 @@ class ValueClassByOriginalCreatorTest {
3431
fun directDeserTest() {
3532
val mapper = jacksonObjectMapper()
3633

37-
assertEquals(Primary("a"), mapper.readValue<Primary>("\"a\""))
3834
assertEquals(SpecifiedPrimary("b"), mapper.readValue<SpecifiedPrimary>("\"b\""))
3935
assertEquals(Secondary("1-creator"), mapper.readValue<Secondary>("1"))
4036
assertEquals(Factory(101), mapper.readValue<Factory>("1"))
4137
}
4238

4339
data class Dst(
44-
val foo: Primary,
4540
val bar: SpecifiedPrimary,
4641
val baz: Secondary,
4742
val qux: Factory
@@ -54,7 +49,6 @@ class ValueClassByOriginalCreatorTest {
5449
val r = mapper.readValue<Dst>(
5550
"""
5651
{
57-
"foo":"a",
5852
"bar":"b",
5953
"baz":1,
6054
"qux":1
@@ -64,7 +58,6 @@ class ValueClassByOriginalCreatorTest {
6458

6559
assertEquals(
6660
Dst(
67-
Primary("a"),
6861
SpecifiedPrimary("b"),
6962
Secondary("1-creator"),
7063
Factory(101)

0 commit comments

Comments
 (0)