@@ -2,10 +2,14 @@ package org.utbot.intellij.plugin.util
22
33import com.intellij.coverage.CoverageExecutor
44import com.intellij.execution.ExecutorRegistry
5+ import com.intellij.execution.JavaTestConfigurationBase
56import com.intellij.execution.Location
67import com.intellij.execution.PsiLocation
78import com.intellij.execution.RunManagerEx
89import 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
913import com.intellij.execution.executors.DefaultRunExecutor
1014import com.intellij.execution.runners.ExecutionUtil
1115import com.intellij.execution.runners.ProgramRunner
@@ -23,6 +27,7 @@ import com.intellij.psi.PsiElement
2327import com.intellij.psi.PsiFile
2428import com.intellij.psi.SmartPsiElementPointer
2529import com.intellij.psi.util.childrenOfType
30+ import java.util.Comparator
2631import mu.KotlinLogging
2732import org.utbot.intellij.plugin.models.GenerateTestsModel
2833import 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