From 0ceaaa2277f8eabe780df697199947ae7375e9ec Mon Sep 17 00:00:00 2001 From: soo Date: Wed, 31 Jan 2024 15:33:07 +0900 Subject: [PATCH] add: access to private constructor (when constructing value class) --- ...PrimaryConstructorArbitraryIntrospector.kt | 1 + .../tests/kotlin/ValueClassTest.kt | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/fixture-monkey-kotlin/src/main/kotlin/com/navercorp/fixturemonkey/kotlin/introspector/PrimaryConstructorArbitraryIntrospector.kt b/fixture-monkey-kotlin/src/main/kotlin/com/navercorp/fixturemonkey/kotlin/introspector/PrimaryConstructorArbitraryIntrospector.kt index eb6354192..97fa7dda7 100644 --- a/fixture-monkey-kotlin/src/main/kotlin/com/navercorp/fixturemonkey/kotlin/introspector/PrimaryConstructorArbitraryIntrospector.kt +++ b/fixture-monkey-kotlin/src/main/kotlin/com/navercorp/fixturemonkey/kotlin/introspector/PrimaryConstructorArbitraryIntrospector.kt @@ -83,6 +83,7 @@ class PrimaryConstructorArbitraryIntrospector : ArbitraryIntrospector { try { val parameterKotlinType = parameter.type.jvmErasure return if (parameterKotlinType.isValue) { + parameterKotlinType.primaryConstructor!!.isAccessible = true parameterKotlinType.primaryConstructor!!.call(arbitrariesByPropertyName[parameter.name]) } else { arbitrariesByPropertyName[parameter.name] diff --git a/fixture-monkey-tests/kotlin-tests/src/test/kotlin/com/navercorp/fixturemonkey/tests/kotlin/ValueClassTest.kt b/fixture-monkey-tests/kotlin-tests/src/test/kotlin/com/navercorp/fixturemonkey/tests/kotlin/ValueClassTest.kt index 2b02dd4c6..b2044bf45 100644 --- a/fixture-monkey-tests/kotlin-tests/src/test/kotlin/com/navercorp/fixturemonkey/tests/kotlin/ValueClassTest.kt +++ b/fixture-monkey-tests/kotlin-tests/src/test/kotlin/com/navercorp/fixturemonkey/tests/kotlin/ValueClassTest.kt @@ -56,11 +56,38 @@ class ValueClassTest { then(actual.foo).isNotNull } + @Test + fun privateConstructorValueClassProperty() { + class ValueClassObject(val foo: FooWithPrivateConstructor) + + val actual: ValueClassObject = SUT.giveMeOne() + + then(actual).isNotNull + then(actual.foo).isNotNull + } + + @Test + fun privateConstructorValueClassPropertyFixed() { + class ValueClassObject(val foo: FooWithPrivateConstructor) + + val actual: ValueClassObject = SUT.giveMeBuilder() + .fixed() + .sample() + + then(actual).isNotNull + then(actual.foo).isNotNull + } + @JvmInline value class Foo( val bar: String, ) + @JvmInline + value class FooWithPrivateConstructor private constructor( + val bar: String + ) + companion object { private val SUT = FixtureMonkey.builder() .plugin(KotlinPlugin())