Skip to content

Commit 7c28142

Browse files
Only one of generated tests is run with Generate and Run #1149 (#1177)
* Only one of generated tests is run with Generate and Run #1149 * Only one of generated tests is run with Generate and Run #1149 Refactoring and comments
1 parent 5a242a0 commit 7c28142

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/RunConfigurationHelper.kt

+23-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ package org.utbot.intellij.plugin.util
22

33
import com.intellij.coverage.CoverageExecutor
44
import com.intellij.execution.ExecutorRegistry
5+
import com.intellij.execution.JavaTestConfigurationBase
56
import com.intellij.execution.Location
67
import com.intellij.execution.PsiLocation
78
import com.intellij.execution.RunManagerEx
89
import com.intellij.execution.actions.ConfigurationContext
10+
import com.intellij.execution.actions.ConfigurationFromContext
11+
import com.intellij.execution.actions.RunConfigurationProducer
12+
import com.intellij.execution.configurations.RunConfiguration
913
import com.intellij.execution.executors.DefaultRunExecutor
1014
import com.intellij.execution.runners.ExecutionUtil
1115
import com.intellij.execution.runners.ProgramRunner
@@ -23,6 +27,7 @@ import com.intellij.psi.PsiElement
2327
import com.intellij.psi.PsiFile
2428
import com.intellij.psi.SmartPsiElementPointer
2529
import com.intellij.psi.util.childrenOfType
30+
import java.util.Comparator
2631
import mu.KotlinLogging
2732
import org.utbot.intellij.plugin.models.GenerateTestsModel
2833
import org.utbot.intellij.plugin.util.IntelliJApiHelper.run
@@ -59,6 +64,20 @@ class RunConfigurationHelper {
5964
companion object {
6065
private val logger = KotlinLogging.logger {}
6166

67+
private fun RunConfiguration.isPatternBased() = this is JavaTestConfigurationBase && testType == "pattern"
68+
69+
// In case we do "generate and run" for many files at once,
70+
// desired run configuration has to be one of "pattern" typed test configuration that may run many tests at once.
71+
// Thus, we sort list of all provided configurations to get desired configuration the first.
72+
private val rcComparator = Comparator<ConfigurationFromContext> { o1, o2 ->
73+
val p1 = o1.configuration.isPatternBased()
74+
val p2 = o2.configuration.isPatternBased()
75+
if (p1 xor p2) {
76+
return@Comparator if (p1) -1 else 1
77+
}
78+
ConfigurationFromContext.COMPARATOR.compare(o1, o2)
79+
}
80+
6281
fun runTestsWithCoverage(
6382
model: GenerateTestsModel,
6483
testFilesPointers: MutableList<SmartPsiElementPointer<PsiFile>>,
@@ -86,10 +105,12 @@ class RunConfigurationHelper {
86105
)
87106
run(IntelliJApiHelper.Target.THREAD_POOL) {
88107
val configurations = ApplicationManager.getApplication().runReadAction(Computable {
89-
myConfigurationContext.configurationsFromContext
108+
return@Computable RunConfigurationProducer.getProducers(model.project)
109+
.mapNotNull { it.findOrCreateConfigurationFromContext(myConfigurationContext) }
110+
.toMutableList().sortedWith(rcComparator)
90111
})
91112

92-
val settings = if (configurations.isNullOrEmpty()) null else configurations[0].configurationSettings
113+
val settings = if (configurations.isEmpty()) null else configurations[0].configurationSettings
93114
if (settings != null) {
94115
val executor = if (ProgramRunner.getRunner(CoverageExecutor.EXECUTOR_ID, settings.configuration) != null) {
95116
ExecutorRegistry.getInstance().getExecutorById(CoverageExecutor.EXECUTOR_ID) ?: DefaultRunExecutor.getRunExecutorInstance()
@@ -113,6 +134,5 @@ class RunConfigurationHelper {
113134
}
114135
}
115136
}
116-
117137
}
118138
}

0 commit comments

Comments
 (0)