Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@ package org.utbot.intellij.plugin.util

import com.intellij.coverage.CoverageExecutor
import com.intellij.execution.ExecutorRegistry
import com.intellij.execution.JavaTestConfigurationBase
import com.intellij.execution.Location
import com.intellij.execution.PsiLocation
import com.intellij.execution.RunManagerEx
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
import com.intellij.execution.actions.RunConfigurationProducer
import com.intellij.execution.configurations.RunConfiguration
import com.intellij.execution.executors.DefaultRunExecutor
import com.intellij.execution.runners.ExecutionUtil
import com.intellij.execution.runners.ProgramRunner
Expand All @@ -23,6 +27,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.SmartPsiElementPointer
import com.intellij.psi.util.childrenOfType
import java.util.Comparator
import mu.KotlinLogging
import org.utbot.intellij.plugin.models.GenerateTestsModel
import org.utbot.intellij.plugin.util.IntelliJApiHelper.run
Expand Down Expand Up @@ -59,6 +64,20 @@ class RunConfigurationHelper {
companion object {
private val logger = KotlinLogging.logger {}

private fun RunConfiguration.isPatternBased() = this is JavaTestConfigurationBase && testType == "pattern"

// In case we do "generate and run" for many files at once,
// desired run configuration has to be one of "pattern" typed test configuration that may run many tests at once.
// Thus, we sort list of all provided configurations to get desired configuration the first.
private val rcComparator = Comparator<ConfigurationFromContext> { o1, o2 ->
val p1 = o1.configuration.isPatternBased()
val p2 = o2.configuration.isPatternBased()
if (p1 xor p2) {
return@Comparator if (p1) -1 else 1
}
ConfigurationFromContext.COMPARATOR.compare(o1, o2)
}

fun runTestsWithCoverage(
model: GenerateTestsModel,
testFilesPointers: MutableList<SmartPsiElementPointer<PsiFile>>,
Expand Down Expand Up @@ -86,10 +105,12 @@ class RunConfigurationHelper {
)
run(IntelliJApiHelper.Target.THREAD_POOL) {
val configurations = ApplicationManager.getApplication().runReadAction(Computable {
myConfigurationContext.configurationsFromContext
return@Computable RunConfigurationProducer.getProducers(model.project)
.mapNotNull { it.findOrCreateConfigurationFromContext(myConfigurationContext) }
.toMutableList().sortedWith(rcComparator)
})

val settings = if (configurations.isNullOrEmpty()) null else configurations[0].configurationSettings
val settings = if (configurations.isEmpty()) null else configurations[0].configurationSettings
if (settings != null) {
val executor = if (ProgramRunner.getRunner(CoverageExecutor.EXECUTOR_ID, settings.configuration) != null) {
ExecutorRegistry.getInstance().getExecutorById(CoverageExecutor.EXECUTOR_ID) ?: DefaultRunExecutor.getRunExecutorInstance()
Expand All @@ -113,6 +134,5 @@ class RunConfigurationHelper {
}
}
}

}
}