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