Skip to content

Commit 8dd947c

Browse files
authored
Make Spring Java fuzzer fallback to null value when nothing else works (#2448)
* Make Java fuzzer fallback to `null` value when nothing else works * Use `AnyDepthNullValueProvider` only in Spring integration tests
1 parent 339ef49 commit 8dd947c

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/context/spring/SpringIntegrationTestConcreteExecutionContext.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.utbot.framework.plugin.api.util.utContext
1515
import org.utbot.fuzzer.IdentityPreservingIdGenerator
1616
import org.utbot.fuzzing.JavaValueProvider
1717
import org.utbot.fuzzing.ValueProvider
18+
import org.utbot.fuzzing.providers.AnyDepthNullValueProvider
1819
import org.utbot.fuzzing.providers.FieldValueProvider
1920
import org.utbot.fuzzing.providers.ObjectValueProvider
2021
import org.utbot.fuzzing.providers.anyObjectValueProvider
@@ -93,6 +94,7 @@ class SpringIntegrationTestConcreteExecutionContext(
9394
.with(springBeanValueProvider)
9495
.with(createSavedEntityValueProviders(relevantRepositories, idGenerator))
9596
.with(createFieldValueProviders(relevantRepositories, idGenerator))
97+
.withFallback(AnyDepthNullValueProvider)
9698
}
9799

98100
private fun createSavedEntityValueProviders(

utbot-java-fuzzing/src/main/kotlin/org/utbot/fuzzing/providers/Objects.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,21 @@ object NullValueProvider : ValueProvider<FuzzedType, FuzzedValue, FuzzedDescript
132132
}
133133
}
134134

135+
/**
136+
* Unlike [NullValueProvider] can generate `null` values at any depth.
137+
*
138+
* Intended to be used as a last fallback.
139+
*/
140+
object AnyDepthNullValueProvider : ValueProvider<FuzzedType, FuzzedValue, FuzzedDescription> {
141+
142+
override fun accept(type: FuzzedType) = type.classId.isRefType
143+
144+
override fun generate(
145+
description: FuzzedDescription,
146+
type: FuzzedType
147+
) = sequenceOf<Seed<FuzzedType, FuzzedValue>>(Seed.Simple(nullFuzzedValue(classClassId)))
148+
}
149+
135150
/**
136151
* Finds and create object from implementations of abstract classes or interfaces.
137152
*/

0 commit comments

Comments
 (0)