diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java index 8a237b7dfb01..c9740f0b2138 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java @@ -18,8 +18,14 @@ package com.jetbrains.python.fixtures; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ex.QuickFixWrapper; +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.find.findUsages.CustomUsageSearcher; import com.intellij.find.findUsages.FindUsagesOptions; +import com.intellij.ide.DataManager; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; @@ -56,6 +62,7 @@ import com.jetbrains.python.PythonTestUtil; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFile; +import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.impl.PyFileImpl; import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher; import org.jetbrains.annotations.NotNull; @@ -64,7 +71,6 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.ArrayList; import java.util.Collection; -import java.util.List; /** * @author yole @@ -148,8 +154,9 @@ public abstract class PyTestCase extends UsefulTestCase { /** * Searches for quickfix itetion by its class + * * @param clazz quick fix class - * @param quick fix class + * @param quick fix class * @return quick fix or null if nothing found */ @Nullable @@ -170,8 +177,8 @@ public abstract class PyTestCase extends UsefulTestCase { } - protected static void assertNotParsed(PyFile file) { - assertNull(PARSED_ERROR_MSG, ((PyFileImpl)file).getTreeElement()); + protected static void assertNotParsed(PyFile file) { + assertNull(PARSED_ERROR_MSG, ((PyFileImpl)file).getTreeElement()); } /** @@ -263,4 +270,27 @@ public abstract class PyTestCase extends UsefulTestCase { public static String getHelpersPath() { return new File(PythonHelpersLocator.getPythonCommunityPath(), "helpers").getPath(); } + + /** + * Creates run configuration from right click menu + * @param expectedClass expected class of run configuration + * @param expected class of run configuration + * @return configuration (if created) or null (otherwise) + */ + @Nullable + protected C createRunConfigurationFromContext(@NotNull final Class expectedClass) { + final DataContext context = DataManager.getInstance().getDataContext(myFixture.getEditor().getComponent()); + for (final RunConfigurationProducer producer : RunConfigurationProducer.EP_NAME.getExtensions()) { + final ConfigurationFromContext fromContext = producer.createConfigurationFromContext(ConfigurationContext.getFromContext(context)); + if (fromContext == null) { + continue; + } + final C result = PyUtil.as(fromContext.getConfiguration(), expectedClass); + if (result != null) { + return result; + } + } + return null; + } } +