1
+ package com.fasterxml.jackson.module.kotlin
2
+
3
+ import com.fasterxml.jackson.databind.deser.std.StdValueInstantiator
4
+ import org.junit.Assert.*
5
+ import org.junit.Test
6
+
7
+ class KotlinInstantiatorsTest {
8
+ private val mapper = jacksonObjectMapper()
9
+ private val deserConfig = mapper.deserializationConfig
10
+
11
+ private val kotlinInstantiators = KotlinInstantiators (
12
+ ReflectionCache (10 ),
13
+ nullToEmptyCollection = false ,
14
+ nullToEmptyMap = false ,
15
+ nullIsSameAsDefault = false ,
16
+ strictNullChecks = false
17
+ )
18
+
19
+ @Test
20
+ fun `Provides default instantiator for Java class` () {
21
+ val javaType = mapper.constructType(String ::class .java)
22
+ val defaultInstantiator = StdValueInstantiator (deserConfig, javaType)
23
+ val instantiator = kotlinInstantiators.findValueInstantiator(
24
+ deserConfig,
25
+ deserConfig.introspect(javaType),
26
+ defaultInstantiator
27
+ )
28
+
29
+ assertEquals(defaultInstantiator, instantiator)
30
+ }
31
+
32
+ @Test
33
+ fun `Provides KotlinValueInstantiator for Kotlin class` () {
34
+ class TestClass
35
+
36
+ val javaType = mapper.constructType(TestClass ::class .java)
37
+ val instantiator = kotlinInstantiators.findValueInstantiator(
38
+ deserConfig,
39
+ deserConfig.introspect(javaType),
40
+ StdValueInstantiator (deserConfig, javaType)
41
+ )
42
+
43
+ assertTrue(instantiator is StdValueInstantiator )
44
+ assertTrue(instantiator::class == KotlinValueInstantiator ::class )
45
+ }
46
+
47
+ @Test
48
+ fun `Throws for Kotlin class when default instantiator isn't StdValueInstantiator` () {
49
+ class TestClass
50
+ class DefaultClass
51
+
52
+ val subClassInstantiator = object : StdValueInstantiator (
53
+ deserConfig,
54
+ mapper.constructType(DefaultClass ::class .java)
55
+ ) {}
56
+
57
+ assertThrows(IllegalStateException ::class .java) {
58
+ kotlinInstantiators.findValueInstantiator(
59
+ deserConfig,
60
+ deserConfig.introspect(mapper.constructType(TestClass ::class .java)),
61
+ subClassInstantiator
62
+ )
63
+ }
64
+ }
65
+ }
0 commit comments