Skip to content

Commit 1e519ae

Browse files
authored
Merge pull request #208 from ProjectMapK/value-param-size-test
Added parameter size test when `value class` is included as an argument
2 parents 13e662d + b40c362 commit 1e519ae

17 files changed

+11663
-39
lines changed

src/test/kotlin/io/github/projectmapk/jackson/module/kogera/TestCommons.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
55
import com.fasterxml.jackson.databind.ObjectMapper
66
import com.fasterxml.jackson.databind.ObjectWriter
77
import org.junit.jupiter.api.Assertions.assertEquals
8+
import kotlin.reflect.KParameter
89
import kotlin.reflect.full.memberProperties
910
import kotlin.reflect.full.primaryConstructor
1011

@@ -19,10 +20,11 @@ internal fun Class<*>.isKotlinClass() = declaredAnnotations.any { it is Metadata
1920

2021
internal val defaultMapper = jacksonObjectMapper()
2122

22-
internal inline fun <reified T : Any> callPrimaryConstructorByParamName(): T = T::class.primaryConstructor!!.run {
23-
val args = parameters.associateWith { it.name }
24-
return callBy(args)
25-
}
23+
internal inline fun <reified T : Any> callPrimaryConstructor(mapper: (KParameter) -> Any? = { it.name }): T =
24+
T::class.primaryConstructor!!.run {
25+
val args = parameters.associateWith { mapper(it) }
26+
callBy(args)
27+
}
2628

2729
// Function for comparing non-data classes.
2830
internal inline fun <reified T : Any> assertReflectEquals(expected: T, actual: T) {
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.parameterSize
22

33
import io.github.projectmapk.jackson.module.kogera.assertReflectEquals
44
import io.github.projectmapk.jackson.module.kogera.defaultMapper
55
import io.github.projectmapk.jackson.module.kogera.readValue
6-
import org.junit.jupiter.api.Assertions.assertEquals
6+
import org.junit.jupiter.api.Assertions
77
import org.junit.jupiter.api.Test
88

99
/**
@@ -50,7 +50,7 @@ class DeserializeByConstructorWithDefaultArgumentsTest {
5050

5151
@Test
5252
fun test32() {
53-
assertEquals(Dst32(), defaultMapper.readValue<Dst32>("{}"))
53+
Assertions.assertEquals(Dst32(), defaultMapper.readValue<Dst32>("{}"))
5454
}
5555

5656
data class Dst33(
@@ -91,7 +91,7 @@ class DeserializeByConstructorWithDefaultArgumentsTest {
9191

9292
@Test
9393
fun test33() {
94-
assertEquals(Dst33(), defaultMapper.readValue<Dst33>("{}"))
94+
Assertions.assertEquals(Dst33(), defaultMapper.readValue<Dst33>("{}"))
9595
}
9696

9797
data class Dst64(
@@ -163,7 +163,7 @@ class DeserializeByConstructorWithDefaultArgumentsTest {
163163

164164
@Test
165165
fun test64() {
166-
assertEquals(Dst64(), defaultMapper.readValue<Dst64>("{}"))
166+
Assertions.assertEquals(Dst64(), defaultMapper.readValue<Dst64>("{}"))
167167
}
168168

169169
data class Dst65(
@@ -236,7 +236,7 @@ class DeserializeByConstructorWithDefaultArgumentsTest {
236236

237237
@Test
238238
fun test65() {
239-
assertEquals(Dst65(), defaultMapper.readValue<Dst65>("{}"))
239+
Assertions.assertEquals(Dst65(), defaultMapper.readValue<Dst65>("{}"))
240240
}
241241

242242
// It cannot be a data class because the generated method would exceed the argument size limit.
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.parameterSize
22

33
import io.github.projectmapk.jackson.module.kogera.assertReflectEquals
4-
import io.github.projectmapk.jackson.module.kogera.callPrimaryConstructorByParamName
4+
import io.github.projectmapk.jackson.module.kogera.callPrimaryConstructor
55
import io.github.projectmapk.jackson.module.kogera.defaultMapper
66
import io.github.projectmapk.jackson.module.kogera.readValue
7-
import org.junit.jupiter.api.Assertions.assertEquals
7+
import org.junit.jupiter.api.Assertions
88
import org.junit.jupiter.api.Test
99

1010
/**
@@ -50,9 +50,9 @@ class DeserializeByConstructorWithoutDefaultArgumentsTest {
5050

5151
@Test
5252
fun test32() {
53-
val expected = callPrimaryConstructorByParamName<Dst32>()
53+
val expected = callPrimaryConstructor<Dst32>()
5454
val src = defaultMapper.writeValueAsString(expected)
55-
assertEquals(expected, defaultMapper.readValue<Dst32>(src))
55+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst32>(src))
5656
}
5757

5858
data class Dst33(
@@ -93,9 +93,9 @@ class DeserializeByConstructorWithoutDefaultArgumentsTest {
9393

9494
@Test
9595
fun test33() {
96-
val expected = callPrimaryConstructorByParamName<Dst33>()
96+
val expected = callPrimaryConstructor<Dst33>()
9797
val src = defaultMapper.writeValueAsString(expected)
98-
assertEquals(expected, defaultMapper.readValue<Dst33>(src))
98+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst33>(src))
9999
}
100100

101101
data class Dst64(
@@ -167,9 +167,9 @@ class DeserializeByConstructorWithoutDefaultArgumentsTest {
167167

168168
@Test
169169
fun test64() {
170-
val expected = callPrimaryConstructorByParamName<Dst64>()
170+
val expected = callPrimaryConstructor<Dst64>()
171171
val src = defaultMapper.writeValueAsString(expected)
172-
assertEquals(expected, defaultMapper.readValue<Dst64>(src))
172+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst64>(src))
173173
}
174174

175175
data class Dst65(
@@ -242,9 +242,9 @@ class DeserializeByConstructorWithoutDefaultArgumentsTest {
242242

243243
@Test
244244
fun test65() {
245-
val expected = callPrimaryConstructorByParamName<Dst65>()
245+
val expected = callPrimaryConstructor<Dst65>()
246246
val src = defaultMapper.writeValueAsString(expected)
247-
assertEquals(expected, defaultMapper.readValue<Dst65>(src))
247+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst65>(src))
248248
}
249249

250250
// It cannot be a data class because the generated method would exceed the argument size limit.
@@ -507,7 +507,7 @@ class DeserializeByConstructorWithoutDefaultArgumentsTest {
507507

508508
@Test
509509
fun testMax() {
510-
val expected = callPrimaryConstructorByParamName<DstMax>()
510+
val expected = callPrimaryConstructor<DstMax>()
511511
val src = defaultMapper.writeValueAsString(expected)
512512
assertReflectEquals(expected, defaultMapper.readValue<DstMax>(src))
513513
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.parameterSize
22

33
import com.fasterxml.jackson.annotation.JsonCreator
44
import io.github.projectmapk.jackson.module.kogera.assertReflectEquals
@@ -7,13 +7,10 @@ import io.github.projectmapk.jackson.module.kogera.readValue
77
import org.junit.jupiter.api.Assertions
88
import org.junit.jupiter.api.Test
99

10-
// Convert the property p to q (but not the value) to make it an input to the factory function.
11-
private fun replacePQ(src: String) = src.replace(Regex("""p\d+":""")) { "q" + it.value.substring(1) }
12-
1310
/**
1411
* Up to argument size 32 there is one mask argument for the default argument,
1512
* 33 ~ 64 there are two, and 65 there are three, so each boundary value is tested.
16-
* Also, the maximum argument size that can be set in the constructor is 254, so that case is tested as well.
13+
* Also, the maximum argument size that can be set in the constructor is 244, so that case is tested as well.
1714
*/
1815
class DeserializeByFactoryWithDefaultArgumentsTest {
1916
data class Dst32(
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser
1+
package io.github.projectmapk.jackson.module.kogera.zIntegration.deser.parameterSize
22

33
import com.fasterxml.jackson.annotation.JsonCreator
44
import io.github.projectmapk.jackson.module.kogera.assertReflectEquals
5-
import io.github.projectmapk.jackson.module.kogera.callPrimaryConstructorByParamName
5+
import io.github.projectmapk.jackson.module.kogera.callPrimaryConstructor
66
import io.github.projectmapk.jackson.module.kogera.defaultMapper
77
import io.github.projectmapk.jackson.module.kogera.readValue
8-
import org.junit.jupiter.api.Assertions.assertEquals
8+
import org.junit.jupiter.api.Assertions
99
import org.junit.jupiter.api.Test
1010

1111
// Convert the property p to q (but not the value) to make it an input to the factory function.
@@ -126,9 +126,9 @@ class DeserializeByFactoryWithoutDefaultArgumentsTest {
126126

127127
@Test
128128
fun test32() {
129-
val expected = callPrimaryConstructorByParamName<Dst32>()
129+
val expected = callPrimaryConstructor<Dst32>()
130130
val src = replacePQ(defaultMapper.writeValueAsString(expected))
131-
assertEquals(expected, defaultMapper.readValue<Dst32>(src))
131+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst32>(src))
132132
}
133133

134134
data class Dst33(
@@ -243,9 +243,9 @@ class DeserializeByFactoryWithoutDefaultArgumentsTest {
243243

244244
@Test
245245
fun test33() {
246-
val expected = callPrimaryConstructorByParamName<Dst33>()
246+
val expected = callPrimaryConstructor<Dst33>()
247247
val src = replacePQ(defaultMapper.writeValueAsString(expected))
248-
assertEquals(expected, defaultMapper.readValue<Dst33>(src))
248+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst33>(src))
249249
}
250250

251251
data class Dst64(
@@ -453,9 +453,9 @@ class DeserializeByFactoryWithoutDefaultArgumentsTest {
453453

454454
@Test
455455
fun test64() {
456-
val expected = callPrimaryConstructorByParamName<Dst64>()
456+
val expected = callPrimaryConstructor<Dst64>()
457457
val src = replacePQ(defaultMapper.writeValueAsString(expected))
458-
assertEquals(expected, defaultMapper.readValue<Dst64>(src))
458+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst64>(src))
459459
}
460460

461461
data class Dst65(
@@ -666,9 +666,9 @@ class DeserializeByFactoryWithoutDefaultArgumentsTest {
666666

667667
@Test
668668
fun test65() {
669-
val expected = callPrimaryConstructorByParamName<Dst65>()
669+
val expected = callPrimaryConstructor<Dst65>()
670670
val src = replacePQ(defaultMapper.writeValueAsString(expected))
671-
assertEquals(expected, defaultMapper.readValue<Dst65>(src))
671+
Assertions.assertEquals(expected, defaultMapper.readValue<Dst65>(src))
672672
}
673673

674674
// It cannot be a data class because the generated method would exceed the argument size limit.
@@ -1447,7 +1447,7 @@ class DeserializeByFactoryWithoutDefaultArgumentsTest {
14471447

14481448
@Test
14491449
fun testMax() {
1450-
val expected = callPrimaryConstructorByParamName<DstMax>()
1450+
val expected = callPrimaryConstructor<DstMax>()
14511451
val src = replacePQ(defaultMapper.writeValueAsString(expected))
14521452
assertReflectEquals(expected, defaultMapper.readValue<DstMax>(src))
14531453
}

0 commit comments

Comments
 (0)