From 05db6fcbe14fe7c74f860109883cb833d5fb2a5a Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Wed, 25 Jan 2017 17:20:53 +0300 Subject: [PATCH] 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 --- .../execution/actions/RunConfigurationProducer.java | 10 +++++++++- .../python/testing/universalTests/PyUniversalTests.kt | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java b/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java index 8c0a551238ee..233cc66a7189 100644 --- a/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java +++ b/platform/lang-api/src/com/intellij/execution/actions/RunConfigurationProducer.java @@ -205,7 +205,7 @@ public abstract class RunConfigurationProducer { @Nullable public RunnerAndConfigurationSettings findExistingConfiguration(ConfigurationContext context) { final RunManager runManager = RunManager.getInstance(context.getProject()); - final List configurations = runManager.getConfigurationSettingsList(myConfigurationFactory.getType()); + final List configurations = getConfigurationSettingsList(runManager); for (RunnerAndConfigurationSettings configurationSettings : configurations) { if (isConfigurationFromContext((T) configurationSettings.getConfiguration(), context)) { return configurationSettings; @@ -214,6 +214,14 @@ public abstract class RunConfigurationProducer { return null; } + /** + * @return list of configurations that may match this producer + */ + @NotNull + protected List getConfigurationSettingsList(@NotNull RunManager runManager) { + return runManager.getConfigurationSettingsList(myConfigurationFactory.getType()); + } + protected RunnerAndConfigurationSettings cloneTemplateConfiguration(@NotNull final ConfigurationContext context) { return cloneTemplateConfigurationStatic(context, myConfigurationFactory); } diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt index 94a7d3030c2b..a7af9b43b4ad 100644 --- a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt +++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt @@ -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 { + // 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.