Skip to content

Commit 78fec3e

Browse files
committed
Adapt force mock listener for plugin
1 parent 49820d7 commit 78fec3e

File tree

4 files changed

+50
-13
lines changed

4 files changed

+50
-13
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.utbot.framework.plugin.api.UtExecution
88
import org.utbot.framework.plugin.api.UtExecutionFailure
99
import org.utbot.framework.plugin.api.UtExecutionSuccess
1010
import org.utbot.framework.plugin.api.UtMethodTestSet
11+
import org.utbot.framework.plugin.api.UtSymbolicExecution
1112
import org.utbot.framework.plugin.api.util.executableId
1213
import org.utbot.framework.plugin.api.util.objectClassId
1314
import org.utbot.framework.plugin.api.util.voidClassId
@@ -66,6 +67,12 @@ data class CgMethodTestSet private constructor(
6667
return executionsByStaticsUsage.map { (_, executions) -> substituteExecutions(executions) }
6768
}
6869

70+
fun extractSymbolicExecutions(): CgMethodTestSet {
71+
val executionsBySource = executions.filterIsInstance<UtSymbolicExecution>()
72+
73+
return substituteExecutions(executionsBySource)
74+
}
75+
6976
/**
7077
* Finds a [ClassId] of all result models in executions.
7178
*

utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgTestClassConstructor.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,20 @@ internal class CgTestClassConstructor(val context: CgContext) :
147147
}
148148
}
149149
ParametrizedTestSource.PARAMETRIZE -> {
150-
for (splitByExecutionTestSet in testSet.splitExecutionsByResult()) {
151-
for (splitByChangedStaticsTestSet in splitByExecutionTestSet.splitExecutionsByChangedStatics()) {
152-
createParametrizedTestAndDataProvider(
153-
splitByChangedStaticsTestSet,
154-
requiredFields,
155-
regions,
156-
methodUnderTest
157-
)
150+
// We filter out Fuzzer executions because sometimes we need to turn off
151+
// Symbolic Engine and stop the test generation in case of mocking taking place
152+
// and do not collect this execution. But having Fuzzer executions may cause
153+
// unwanted executions being present.
154+
testSet.extractSymbolicExecutions().also {
155+
for (splitByExecutionTestSet in it.splitExecutionsByResult()) {
156+
for (splitByChangedStaticsTestSet in splitByExecutionTestSet.splitExecutionsByChangedStatics()) {
157+
createParametrizedTestAndDataProvider(
158+
splitByChangedStaticsTestSet,
159+
requiredFields,
160+
regions,
161+
methodUnderTest
162+
)
163+
}
158164
}
159165
}
160166
}

utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/TestCaseGenerator.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ open class TestCaseGenerator(
159159
)
160160

161161
engineActions.map { engine.apply(it) }
162+
engineActions.clear()
162163

163164
generate(engine)
164165
.catch {

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import java.nio.file.Paths
5454
import java.util.concurrent.TimeUnit
5555
import org.utbot.engine.util.mockListeners.ForceStaticMockListener
5656
import org.utbot.framework.PathSelectorType
57+
import org.utbot.framework.codegen.ParametrizedTestSource
5758
import org.utbot.framework.plugin.services.WorkingDirService
5859
import org.utbot.intellij.plugin.models.packageName
5960
import org.utbot.intellij.plugin.settings.Settings
@@ -206,13 +207,32 @@ object UtTestsDialogProcessor {
206207

207208
withStaticsSubstitutionRequired(true) {
208209
val mockFrameworkInstalled = model.mockFramework?.isInstalled ?: true
210+
var forceMockListener: ForceMockListener? = null
211+
var forceStaticMockListener: ForceStaticMockListener? = null
212+
213+
when (model.parametrizedTestSource) {
214+
ParametrizedTestSource.PARAMETRIZE -> {
215+
forceMockListener = ForceMockListener.create(testCaseGenerator, model.conflictTriggers)
216+
forceStaticMockListener = ForceStaticMockListener.create(
217+
testCaseGenerator,
218+
model.conflictTriggers
219+
)
220+
}
209221

210-
if (!mockFrameworkInstalled) {
211-
ForceMockListener.create(testCaseGenerator, model.conflictTriggers)
212-
}
222+
ParametrizedTestSource.DO_NOT_PARAMETRIZE -> {
223+
when {
224+
!mockFrameworkInstalled -> forceMockListener = ForceMockListener.create(
225+
testCaseGenerator,
226+
model.conflictTriggers
227+
)
213228

214-
if (!model.staticsMocking.isConfigured) {
215-
ForceStaticMockListener.create(testCaseGenerator, model.conflictTriggers)
229+
!model.staticsMocking.isConfigured -> forceStaticMockListener =
230+
ForceStaticMockListener.create(
231+
testCaseGenerator,
232+
model.conflictTriggers
233+
)
234+
}
235+
}
216236
}
217237

218238
val notEmptyCases = runCatching {
@@ -235,6 +255,9 @@ object UtTestsDialogProcessor {
235255
}
236256
}.getOrDefault(listOf())
237257

258+
forceMockListener?.detach(testCaseGenerator, forceMockListener)
259+
forceStaticMockListener?.detach(testCaseGenerator, forceStaticMockListener)
260+
238261
if (notEmptyCases.isEmpty()) {
239262
if (model.srcClasses.size > 1) {
240263
logger.error { "Failed to generate any tests cases for class $className" }

0 commit comments

Comments
 (0)