Skip to content

Commit 4bc2916

Browse files
committed
Split up test & add expected failure
1 parent f52e95e commit 4bc2916

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/SealedClassTest.kt

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.fasterxml.jackson.module.kotlin.test
22

33
import com.fasterxml.jackson.annotation.JsonCreator
4-
import com.fasterxml.jackson.annotation.JsonSubTypes
54
import com.fasterxml.jackson.annotation.JsonTypeInfo
65
import com.fasterxml.jackson.annotation.JsonValue
6+
import com.fasterxml.jackson.core.type.TypeReference
7+
import com.fasterxml.jackson.databind.exc.MismatchedInputException
78
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
89
import com.fasterxml.jackson.module.kotlin.test.SealedClassTest.SuperClass.B
910
import org.junit.Test
@@ -27,6 +28,21 @@ class SealedClassTest {
2728
assertTrue { result is B }
2829
}
2930

31+
@Test
32+
fun sealedClassWithoutSubTypesList() {
33+
val result = mapper.readValue(
34+
"""[$jsonB, $jsonB]""",
35+
object : TypeReference<List<SuperClass>>() {}
36+
)
37+
assertEquals(2, result.size)
38+
}
39+
40+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
41+
sealed class SuperClass {
42+
class A : SuperClass()
43+
class B : SuperClass()
44+
}
45+
3046
/**
3147
* Tests that we can use JsonTypeInfo.Id.DEDUCTION to deduct sealed types without the need for explicit fields.
3248
*/
@@ -36,24 +52,27 @@ class SealedClassTest {
3652
val single = mapper.readValue(serializedSingle, SealedRequest::class.java)
3753
assertTrue(single is SealedRequest.SingleRequest)
3854
assertEquals("single", single.request)
39-
40-
val serializedBatch = """[{"request":"first"},{"request":"second"}]"""
41-
val batch = mapper.readValue(serializedBatch, SealedRequest::class.java)
42-
assertTrue(batch is SealedRequest.BatchRequest)
43-
assertEquals(2, batch.requests.size)
44-
assertEquals("first", batch.requests[0].request)
45-
assertEquals("second", batch.requests[1].request)
4655
}
4756

48-
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
49-
sealed class SuperClass {
50-
class A : SuperClass()
51-
class B : SuperClass()
57+
/**
58+
* Attempting to deserialize a collection by deduction
59+
*/
60+
@Test
61+
fun sealedClassWithoutTypeDiscriminatorList() {
62+
val serializedBatch = """[{"request":"first"},{"request":"second"}]"""
63+
expectFailure<MismatchedInputException>("Deserializing a list using deduction is fixed!") {
64+
val batch = mapper.readValue(serializedBatch, SealedRequest::class.java)
65+
assertTrue(batch is SealedRequest.BatchRequest)
66+
assertEquals(2, batch.requests.size)
67+
assertEquals("first", batch.requests[0].request)
68+
assertEquals("second", batch.requests[1].request)
69+
}
5270
}
5371

5472
@JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION)
5573
sealed class SealedRequest {
5674
data class SingleRequest(val request: String) : SealedRequest()
57-
data class BatchRequest @JsonCreator constructor(@get:JsonValue val requests: List<SingleRequest>): SealedRequest()
75+
data class BatchRequest @JsonCreator constructor(@get:JsonValue val requests: List<SingleRequest>) :
76+
SealedRequest()
5877
}
5978
}

0 commit comments

Comments
 (0)