-
Notifications
You must be signed in to change notification settings - Fork 45
Open
Labels
comp-fuzzingIssue is related to the fuzzingIssue is related to the fuzzingctg-bugIssue is a bugIssue is a buglang-javaIssue is related to Java supportIssue is related to Java support
Description
Description
When creating instances of arbitrary classes Java fuzzer only considers their accessible constructors. However, some classes (e.g. LocalDateTime
) only have private constructors while their instances are meant to be created using static
methods.
Real world (concrete) example
Same as in #2428
To Reproduce
Run the following unit test.
@Test
fun `fuzzer can create instances of classes without public constructors but with static factory method in their class`() {
var seenLocalDateTime = false
runBlockingWithContext {
runJavaFuzzing(
TestIdentityPreservingIdGenerator,
methodUnderTest = LocalDateTime::getMinute.javaMethod!!.executableId,
constants = emptyList(),
names = emptyList(),
) { thisInstance, _, _ ->
val control = runCatching {
ValueConstructor()
.construct(listOfNotNull(thisInstance?.model))
.singleOrNull()?.value
}.getOrNull()?.let { constructedThisInstance ->
assertInstanceOf(LocalDateTime::class.java, constructedThisInstance)
seenLocalDateTime = true
Control.STOP
} ?: Control.CONTINUE
BaseFeedback(Trie.emptyNode(), control)
}
}
assertTrue(seenLocalDateTime) { "No value was generated for type LocalDateTime" }
}
Expected behavior
Test passes.
Actual behavior
Test fails.
Visual proofs (screenshots, logs, images)
No value was generated for type LocalDateTime ==> expected: <true> but was: <false>
alisevych
Metadata
Metadata
Assignees
Labels
comp-fuzzingIssue is related to the fuzzingIssue is related to the fuzzingctg-bugIssue is a bugIssue is a buglang-javaIssue is related to Java supportIssue is related to Java support
Type
Projects
Status
Todo