PY-22376: New test runners: Filter out DocTest configurations

* When RunConfigurationProducer finds config with id "test" it provides
it to new configuration producer to check. But it could be doctest
configuration and it leads to classcast
This commit is contained in:
Ilya.Kazakevich
2017-02-01 16:23:02 +03:00
parent c94b46f2ff
commit 05db6fcbe1
2 changed files with 15 additions and 1 deletions
@@ -205,7 +205,7 @@ public abstract class RunConfigurationProducer<T extends RunConfiguration> {
@Nullable
public RunnerAndConfigurationSettings findExistingConfiguration(ConfigurationContext context) {
final RunManager runManager = RunManager.getInstance(context.getProject());
final List<RunnerAndConfigurationSettings> configurations = runManager.getConfigurationSettingsList(myConfigurationFactory.getType());
final List<RunnerAndConfigurationSettings> configurations = getConfigurationSettingsList(runManager);
for (RunnerAndConfigurationSettings configurationSettings : configurations) {
if (isConfigurationFromContext((T) configurationSettings.getConfiguration(), context)) {
return configurationSettings;
@@ -214,6 +214,14 @@ public abstract class RunConfigurationProducer<T extends RunConfiguration> {
return null;
}
/**
* @return list of configurations that may match this producer
*/
@NotNull
protected List<RunnerAndConfigurationSettings> getConfigurationSettingsList(@NotNull RunManager runManager) {
return runManager.getConfigurationSettingsList(myConfigurationFactory.getType());
}
protected RunnerAndConfigurationSettings cloneTemplateConfiguration(@NotNull final ConfigurationContext context) {
return cloneTemplateConfigurationStatic(context, myConfigurationFactory);
}
@@ -20,6 +20,7 @@ package com.jetbrains.python.testing.universalTests
import com.google.gson.Gson
import com.intellij.execution.Location
import com.intellij.execution.PsiLocation
import com.intellij.execution.RunManager
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
@@ -325,6 +326,11 @@ object PyUniversalTestsConfigurationProducer : RunConfigurationProducer<PyUniver
return true
}
override fun getConfigurationSettingsList(runManager: RunManager): List<RunnerAndConfigurationSettings> {
// Some configurations have same type but produces different class (doctest, for example)
// to prevent ClassCastException we only allow our configurations
return super.getConfigurationSettingsList(runManager).filter { it.configuration is PyUniversalTestConfiguration }
}
/**
* Find concrete element to be used as test target.