summaryrefslogtreecommitdiff
path: root/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java')
-rw-r--r--python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java66
1 files changed, 54 insertions, 12 deletions
diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyTestCase.java
index 8a237b7dfb01..3528d7c6517d 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
@@ -92,12 +98,12 @@ public abstract class PyTestCase extends UsefulTestCase {
IdeaTestFixtureFactory factory = IdeaTestFixtureFactory.getFixtureFactory();
TestFixtureBuilder<IdeaProjectTestFixture> fixtureBuilder = factory.createLightFixtureBuilder(getProjectDescriptor());
final IdeaProjectTestFixture fixture = fixtureBuilder.getFixture();
- myFixture = IdeaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(fixture,
- new LightTempDirTestFixtureImpl(true));
- myFixture.setUp();
+ myFixture = IdeaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(fixture,
+ new LightTempDirTestFixtureImpl(true));
+ myFixture.setUp();
- myFixture.setTestDataPath(getTestDataPath());
- }
+ myFixture.setTestDataPath(getTestDataPath());
+ }
protected String getTestDataPath() {
return PythonTestUtil.getTestDataPath();
@@ -148,8 +154,9 @@ public abstract class PyTestCase extends UsefulTestCase {
/**
* Searches for quickfix itetion by its class
+ *
* @param clazz quick fix class
- * @param <T> quick fix class
+ * @param <T> 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());
}
/**
@@ -184,15 +191,23 @@ public abstract class PyTestCase extends UsefulTestCase {
}
/**
+ * @see #moveByText(com.intellij.testFramework.fixtures.CodeInsightTestFixture, String)
+ */
+ protected void moveByText(@NotNull final String testToFind) {
+ moveByText(myFixture, testToFind);
+ }
+
+ /**
* Finds some text and moves cursor to it (if found)
*
+ * @param fixture test fixture
* @param testToFind text to find
* @throws AssertionError if element not found
*/
- protected void moveByText(@NotNull final String testToFind) {
- final PsiElement element = myFixture.findElementByText(testToFind, PsiElement.class);
+ public static void moveByText(@NotNull final CodeInsightTestFixture fixture, @NotNull final String testToFind) {
+ final PsiElement element = fixture.findElementByText(testToFind, PsiElement.class);
assert element != null : "No element found by text: " + testToFind;
- myFixture.getEditor().getCaretModel().moveToOffset(element.getTextOffset());
+ fixture.getEditor().getCaretModel().moveToOffset(element.getTextOffset());
}
/**
@@ -263,4 +278,31 @@ 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 fixture test fixture
+ * @param expectedClass expected class of run configuration
+ * @param <C> expected class of run configuration
+ * @return configuration (if created) or null (otherwise)
+ */
+ @Nullable
+ public static <C extends RunConfiguration> C createRunConfigurationFromContext(
+ @NotNull final CodeInsightTestFixture fixture,
+ @NotNull final Class<C> expectedClass) {
+ final DataContext context = DataManager.getInstance().getDataContext(fixture.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;
+ }
}
+