From c38f053905428cad900bc2e1f372d47cd10d8caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 9 Aug 2023 11:12:56 +0200 Subject: [PATCH] Add Kotlin value classes tests with primitive types This commit adds more Kotlin value classes tests with primitive types to ensure testing unwrapped use case. See gh-28638 --- .../beans/BeanUtilsKotlinTests.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spring-beans/src/test/kotlin/org/springframework/beans/BeanUtilsKotlinTests.kt b/spring-beans/src/test/kotlin/org/springframework/beans/BeanUtilsKotlinTests.kt index ea901077c02..29ae76bb100 100644 --- a/spring-beans/src/test/kotlin/org/springframework/beans/BeanUtilsKotlinTests.kt +++ b/spring-beans/src/test/kotlin/org/springframework/beans/BeanUtilsKotlinTests.kt @@ -128,6 +128,35 @@ class BeanUtilsKotlinTests { assertThat(instance).isEqualTo(OneConstructorWithNullableValueClass(null)) } + @Test + fun `Instantiate primitive value class`() { + val constructor = BeanUtils.findPrimaryConstructor(PrimitiveValueClass::class.java)!! + assertThat(constructor).isNotNull() + val value = 0 + val instance = BeanUtils.instantiateClass(constructor, value) + assertThat(instance).isEqualTo(PrimitiveValueClass(value)) + } + + @Test + fun `Instantiate class with primitive value class parameter`() { + val constructor = BeanUtils.findPrimaryConstructor(OneConstructorWithPrimitiveValueClass::class.java)!! + assertThat(constructor).isNotNull() + val value = PrimitiveValueClass(0) + val instance = BeanUtils.instantiateClass(constructor, value) + assertThat(instance).isEqualTo(OneConstructorWithPrimitiveValueClass(value)) + } + + @Test + fun `Instantiate class with nullable primitive value class parameter`() { + val constructor = BeanUtils.findPrimaryConstructor(OneConstructorWithNullablePrimitiveValueClass::class.java)!! + assertThat(constructor).isNotNull() + val value = PrimitiveValueClass(0) + var instance = BeanUtils.instantiateClass(constructor, value) + assertThat(instance).isEqualTo(OneConstructorWithNullablePrimitiveValueClass(value)) + instance = BeanUtils.instantiateClass(constructor, null) + assertThat(instance).isEqualTo(OneConstructorWithNullablePrimitiveValueClass(null)) + } + class Foo(val param1: String, val param2: Int) @@ -180,4 +209,11 @@ class BeanUtilsKotlinTests { data class OneConstructorWithNullableValueClass(val value: ValueClass?) + @JvmInline + value class PrimitiveValueClass(private val value: Int) + + data class OneConstructorWithPrimitiveValueClass(val value: PrimitiveValueClass) + + data class OneConstructorWithNullablePrimitiveValueClass(val value: PrimitiveValueClass?) + }