Skip to content

Only one of generated tests is run with Generate and Run #1149 #1177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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 {
}
}
}

}
}