diff --git a/python/src/META-INF/python-core-common.xml b/python/src/META-INF/python-core-common.xml
index 07e88d0b468b..783ce7588ec0 100644
--- a/python/src/META-INF/python-core-common.xml
+++ b/python/src/META-INF/python-core-common.xml
@@ -151,8 +151,7 @@
-
-
+
diff --git a/python/src/com/jetbrains/python/testing/AbstractPythonOldTestRunConfiguration.java b/python/src/com/jetbrains/python/testing/AbstractPythonLegacyTestRunConfiguration.java
similarity index 97%
rename from python/src/com/jetbrains/python/testing/AbstractPythonOldTestRunConfiguration.java
rename to python/src/com/jetbrains/python/testing/AbstractPythonLegacyTestRunConfiguration.java
index 01d326473b28..decd4bfeb678 100644
--- a/python/src/com/jetbrains/python/testing/AbstractPythonOldTestRunConfiguration.java
+++ b/python/src/com/jetbrains/python/testing/AbstractPythonLegacyTestRunConfiguration.java
@@ -52,7 +52,7 @@ import java.io.File;
* For new style see {@link com.jetbrains.python.testing.universalTests}
* User: catherine
*/
-public abstract class AbstractPythonOldTestRunConfiguration>
+public abstract class AbstractPythonLegacyTestRunConfiguration>
extends AbstractPythonTestRunConfiguration
implements AbstractPythonRunConfigurationParams,
AbstractPythonTestRunConfigurationParams,
@@ -66,7 +66,7 @@ public abstract class AbstractPythonOldTestRunConfiguration
+ * This type is used both with Legacy and New test runners.
+ * {@link PyUniversalTestLegacyInteropKt} is used to support legacy. To drop legacy support, remove all code that depends on it.
*/
-public abstract class PythonTestConfigurationType implements ConfigurationType {
+public final class PythonTestConfigurationType implements ConfigurationType {
+ public static final String ID = "tests";
+
+ public final PythonConfigurationFactoryBase PY_DOCTEST_FACTORY = new PythonDocTestConfigurationFactory(this);
+ public final PythonConfigurationFactoryBase LEGACY_UNITTEST_FACTORY = new PythonLegacyUnitTestConfigurationFactory(this);
+ public final PythonConfigurationFactoryBase LEGACY_NOSETEST_FACTORY = new PythonLegacyNoseTestConfigurationFactory(this);
+ public final PythonConfigurationFactoryBase LEGACY_PYTEST_FACTORY = new PythonLegacyPyTestConfigurationFactory(this);
+
+ public static PythonTestConfigurationType getInstance() {
+ return ConfigurationTypeUtil.findConfigurationType(PythonTestConfigurationType.class);
+ }
+
+ public PythonTestConfigurationType() {
+ /*
+ According to PyUniversalTestLegacyInteropKt we need to call "projectInitialized" when it is initialized
+ */
+ ApplicationManager.getApplication().getMessageBus().connect().subscribe(ProjectLifecycleListener.TOPIC, new ProjectLifecycleListener() {
+ @Override
+ public void projectComponentsInitialized(@NotNull
+ final Project project) {
+ if (project.isInitialized()) {
+ PyUniversalTestLegacyInteropKt.projectInitialized(project);
+ return;
+ }
+ StartupManager.getInstance(project).runWhenProjectIsInitialized(() -> PyUniversalTestLegacyInteropKt.projectInitialized(project));
+ }
+ });
+ }
+
+ @Override
public String getDisplayName() {
return PyBundle.message("runcfg.test.display_name");
}
+ @Override
public String getConfigurationTypeDescription() {
return PyBundle.message("runcfg.test.description");
}
+ @Override
public Icon getIcon() {
return PythonIcons.Python.PythonTests;
}
+
+
+ private static class PythonLegacyUnitTestConfigurationFactory extends PythonConfigurationFactoryBase {
+ protected PythonLegacyUnitTestConfigurationFactory(ConfigurationType configurationType) {
+ super(configurationType);
+ }
+
+ @Override
+ public RunConfiguration createTemplateConfiguration(Project project) {
+ return new PythonUnitTestRunConfiguration(project, this);
+ }
+
+ @Override
+ public String getName() {
+ return PyBundle.message("runcfg.unittest.display_name");
+ }
+ }
+
+ private static class PythonDocTestConfigurationFactory extends PythonConfigurationFactoryBase {
+ protected PythonDocTestConfigurationFactory(ConfigurationType configurationType) {
+ super(configurationType);
+ }
+
+ @Override
+ public RunConfiguration createTemplateConfiguration(Project project) {
+ return new PythonDocTestRunConfiguration(project, this);
+ }
+
+ @Override
+ public String getName() {
+ return PyBundle.message("runcfg.doctest.display_name");
+ }
+ }
+
+ private static class PythonLegacyPyTestConfigurationFactory extends PythonConfigurationFactoryBase {
+ protected PythonLegacyPyTestConfigurationFactory(ConfigurationType configurationType) {
+ super(configurationType);
+ }
+
+ @Override
+ public RunConfiguration createTemplateConfiguration(Project project) {
+ return new PyTestRunConfiguration(project, this);
+ }
+
+ @Override
+ public String getName() {
+ return PyBundle.message("runcfg.pytest.display_name");
+ }
+ }
+
+ private static class PythonLegacyNoseTestConfigurationFactory extends PythonConfigurationFactoryBase {
+ protected PythonLegacyNoseTestConfigurationFactory(ConfigurationType configurationType) {
+ super(configurationType);
+ }
+
+ @Override
+ public RunConfiguration createTemplateConfiguration(Project project) {
+ return new PythonNoseTestRunConfiguration(project, this);
+ }
+
+ @Override
+ public String getName() {
+ return PyBundle.message("runcfg.nosetests.display_name");
+ }
+ }
+
+ @NotNull
+ @Override
+ public String getId() {
+ return ID;
+ }
+
+ @Override
+ public ConfigurationFactory[] getConfigurationFactories() {
+ // Use new or legacy factories depending to new config
+ final ConfigurationFactory[] factories = PyUniversalTestLegacyInteropKt.isNewTestsModeEnabled()
+ ? PyUniversalTestsKt.getFactories()
+ : new ConfigurationFactory[]
+ {LEGACY_UNITTEST_FACTORY, LEGACY_NOSETEST_FACTORY, LEGACY_PYTEST_FACTORY};
+ return ObjectArrays.concat(factories, PY_DOCTEST_FACTORY);
+ }
}
diff --git a/python/src/com/jetbrains/python/testing/PythonTestOldConfigurationProducer.java b/python/src/com/jetbrains/python/testing/PythonTestLegacyConfigurationProducer.java
similarity index 81%
rename from python/src/com/jetbrains/python/testing/PythonTestOldConfigurationProducer.java
rename to python/src/com/jetbrains/python/testing/PythonTestLegacyConfigurationProducer.java
index 4b79c98e53cd..007bf145f6d4 100644
--- a/python/src/com/jetbrains/python/testing/PythonTestOldConfigurationProducer.java
+++ b/python/src/com/jetbrains/python/testing/PythonTestLegacyConfigurationProducer.java
@@ -41,7 +41,7 @@ import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.types.TypeEvalContext;
import com.jetbrains.python.run.PythonRunConfigurationProducer;
import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration;
-import com.jetbrains.python.testing.universalTests.PyUniversalTestsKt;
+import com.jetbrains.python.testing.universalTests.PyUniversalTestLegacyInteropKt;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -54,14 +54,14 @@ import java.util.List;
/**
* User: ktisha
*/
-abstract public class PythonTestOldConfigurationProducer> extends RunConfigurationProducer> {
+abstract public class PythonTestLegacyConfigurationProducer> extends RunConfigurationProducer> {
- public PythonTestOldConfigurationProducer(final ConfigurationFactory configurationFactory) {
+ public PythonTestLegacyConfigurationProducer(final ConfigurationFactory configurationFactory) {
super(configurationFactory);
}
@Override
- public boolean isConfigurationFromContext(AbstractPythonOldTestRunConfiguration configuration, ConfigurationContext context) {
+ public boolean isConfigurationFromContext(AbstractPythonLegacyTestRunConfiguration configuration, ConfigurationContext context) {
final Location location = context.getLocation();
if (location == null || !isAvailable(location)) return false;
final PsiElement element = location.getPsiElement();
@@ -73,12 +73,12 @@ abstract public class PythonTestOldConfigurationProducer configuration,
+ protected boolean setupConfigurationFromContext(AbstractPythonLegacyTestRunConfiguration configuration,
ConfigurationContext context,
Ref sourceElement) {
if (context == null) return false;
@@ -147,12 +147,12 @@ abstract public class PythonTestOldConfigurationProducer
+public class PythonDocTestRunConfiguration extends AbstractPythonLegacyTestRunConfiguration
implements PythonDocTestRunConfigurationParams {
protected String myPluralTitle = "Doctests";
protected String myTitle = "Doctest";
diff --git a/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestConfigurationProducer.java b/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestConfigurationProducer.java
index 093d536098a4..0209d950ccb8 100644
--- a/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestConfigurationProducer.java
+++ b/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestConfigurationProducer.java
@@ -27,9 +27,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PythonNoseTestConfigurationProducer extends
- PythonTestOldConfigurationProducer {
+ PythonTestLegacyConfigurationProducer {
public PythonNoseTestConfigurationProducer() {
- super(PythonTestOldConfigurationType.getInstance().PY_NOSETEST_FACTORY);
+ super(PythonTestConfigurationType.getInstance().LEGACY_NOSETEST_FACTORY);
}
protected boolean isAvailable(@NotNull final Location location) {
@@ -45,7 +45,7 @@ public class PythonNoseTestConfigurationProducer extends
}
@Override
- protected boolean isTestFunction(@NotNull final PyFunction pyFunction, @Nullable final AbstractPythonOldTestRunConfiguration configuration) {
+ protected boolean isTestFunction(@NotNull final PyFunction pyFunction, @Nullable final AbstractPythonLegacyTestRunConfiguration configuration) {
return PythonUnitTestUtil.isTestCaseFunction(pyFunction, true);
}
}
\ No newline at end of file
diff --git a/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestRunConfiguration.java b/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestRunConfiguration.java
index 4a6ea8e2a716..630c2b9ad39d 100644
--- a/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestRunConfiguration.java
+++ b/python/src/com/jetbrains/python/testing/nosetest/PythonNoseTestRunConfiguration.java
@@ -26,7 +26,7 @@ import com.intellij.openapi.util.JDOMExternalizerUtil;
import com.intellij.openapi.util.WriteExternalException;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
import com.jetbrains.python.testing.VFSTestFrameworkListener;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -34,7 +34,7 @@ import org.jetbrains.annotations.NotNull;
/**
* User: catherine
*/
-public class PythonNoseTestRunConfiguration extends AbstractPythonOldTestRunConfiguration
+public class PythonNoseTestRunConfiguration extends AbstractPythonLegacyTestRunConfiguration
implements PythonNoseTestRunConfigurationParams {
private String myParams = ""; // parameters for nosetests
protected String myTitle = "Nosetest";
@@ -80,7 +80,7 @@ public class PythonNoseTestRunConfiguration extends AbstractPythonOldTestRunConf
}
public static void copyParams(PythonNoseTestRunConfigurationParams source, PythonNoseTestRunConfigurationParams target) {
- AbstractPythonOldTestRunConfiguration.copyParams(source.getTestRunConfigurationParams(), target.getTestRunConfigurationParams());
+ AbstractPythonLegacyTestRunConfiguration.copyParams(source.getTestRunConfigurationParams(), target.getTestRunConfigurationParams());
target.setParams(source.getParams());
target.useParam(source.useParam());
}
diff --git a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationProducer.java b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationProducer.java
index 6d09344f56bb..e7b376a08737 100644
--- a/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationProducer.java
+++ b/python/src/com/jetbrains/python/testing/pytest/PyTestConfigurationProducer.java
@@ -44,14 +44,14 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
-public class PyTestConfigurationProducer extends PythonTestOldConfigurationProducer {
+public class PyTestConfigurationProducer extends PythonTestLegacyConfigurationProducer {
public PyTestConfigurationProducer() {
- super(PythonTestOldConfigurationType.getInstance().PY_PYTEST_FACTORY);
+ super(PythonTestConfigurationType.getInstance().LEGACY_PYTEST_FACTORY);
}
@Override
- protected boolean setupConfigurationFromContext(AbstractPythonOldTestRunConfiguration configuration,
+ protected boolean setupConfigurationFromContext(AbstractPythonLegacyTestRunConfiguration configuration,
ConfigurationContext context,
Ref sourceElement) {
final PsiElement element = sourceElement.get();
@@ -144,7 +144,7 @@ public class PyTestConfigurationProducer extends PythonTestOldConfigurationProdu
}
@Override
- public boolean isConfigurationFromContext(AbstractPythonOldTestRunConfiguration configuration, ConfigurationContext context) {
+ public boolean isConfigurationFromContext(AbstractPythonLegacyTestRunConfiguration configuration, ConfigurationContext context) {
final Location location = context.getLocation();
if (location == null) return false;
if (!(configuration instanceof PyTestRunConfiguration)) return false;
diff --git a/python/src/com/jetbrains/python/testing/pytest/PyTestRunConfiguration.java b/python/src/com/jetbrains/python/testing/pytest/PyTestRunConfiguration.java
index 614ac77245ab..c5e8d247bd74 100644
--- a/python/src/com/jetbrains/python/testing/pytest/PyTestRunConfiguration.java
+++ b/python/src/com/jetbrains/python/testing/pytest/PyTestRunConfiguration.java
@@ -33,7 +33,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.sdk.PythonSdkType;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
import com.jetbrains.python.testing.VFSTestFrameworkListener;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -45,7 +45,7 @@ import java.util.List;
/**
* @author yole
*/
-public class PyTestRunConfiguration extends AbstractPythonOldTestRunConfiguration
+public class PyTestRunConfiguration extends AbstractPythonLegacyTestRunConfiguration
implements PyTestRunConfigurationParams {
private String myTestToRun = "";
private String myKeywords = "";
diff --git a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestCommandLineState.java b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestCommandLineState.java
index c20281f6c4ac..7404b850b670 100644
--- a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestCommandLineState.java
+++ b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestCommandLineState.java
@@ -23,7 +23,7 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.PythonHelper;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
import com.jetbrains.python.testing.PythonTestCommandLineStateBase;
import com.jetbrains.python.testing.PythonUnitTestTestIdUrlProvider;
import org.jetbrains.annotations.NotNull;
@@ -45,7 +45,7 @@ public class PythonUnitTestCommandLineState extends PythonTestCommandLineStateBa
@Override
protected PythonHelper getRunner() {
- if (myConfig.getTestType() == AbstractPythonOldTestRunConfiguration.TestType.TEST_SCRIPT &&
+ if (myConfig.getTestType() == AbstractPythonLegacyTestRunConfiguration.TestType.TEST_SCRIPT &&
myConfig.getScriptName().endsWith(PyNames.SETUP_DOT_PY))
return PythonHelper.SETUPPY;
return PythonHelper.UT_OLD;
@@ -98,7 +98,7 @@ public class PythonUnitTestCommandLineState extends PythonTestCommandLineStateBa
if (myConfig.useParam() && !StringUtil.isEmptyOrSpaces(myConfig.getParams()))
script_params.addParameter(myConfig.getParams());
- if (myConfig.getTestType() != AbstractPythonOldTestRunConfiguration.TestType.TEST_SCRIPT ||
+ if (myConfig.getTestType() != AbstractPythonLegacyTestRunConfiguration.TestType.TEST_SCRIPT ||
!myConfig.getScriptName().endsWith(PyNames.SETUP_DOT_PY))
script_params.addParameter(String.valueOf(myConfig.isPureUnittest()));
}
diff --git a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestConfigurationProducer.java b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestConfigurationProducer.java
index 7c79c9ccb341..556af387ecd3 100644
--- a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestConfigurationProducer.java
+++ b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestConfigurationProducer.java
@@ -36,9 +36,9 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
-public class PythonUnitTestConfigurationProducer extends PythonTestOldConfigurationProducer {
+public class PythonUnitTestConfigurationProducer extends PythonTestLegacyConfigurationProducer {
public PythonUnitTestConfigurationProducer() {
- super(PythonTestOldConfigurationType.getInstance().PY_UNITTEST_FACTORY);
+ super(PythonTestConfigurationType.getInstance().LEGACY_UNITTEST_FACTORY);
}
protected boolean isAvailable(@NotNull final Location location) {
@@ -54,7 +54,7 @@ public class PythonUnitTestConfigurationProducer extends PythonTestOldConfigurat
@Override
protected boolean isTestFunction(@NotNull final PyFunction pyFunction,
- @Nullable final AbstractPythonOldTestRunConfiguration configuration) {
+ @Nullable final AbstractPythonLegacyTestRunConfiguration configuration) {
final boolean isTestFunction = super.isTestFunction(pyFunction, configuration);
return isTestFunction || (configuration instanceof PythonUnitTestRunConfiguration &&
!((PythonUnitTestRunConfiguration)configuration).isPureUnittest());
@@ -62,7 +62,7 @@ public class PythonUnitTestConfigurationProducer extends PythonTestOldConfigurat
@Override
protected boolean isTestClass(@NotNull PyClass pyClass,
- @Nullable final AbstractPythonOldTestRunConfiguration configuration,
+ @Nullable final AbstractPythonLegacyTestRunConfiguration configuration,
TypeEvalContext context) {
final boolean isTestClass = super.isTestClass(pyClass, configuration, context);
return isTestClass || (configuration instanceof PythonUnitTestRunConfiguration &&
diff --git a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfiguration.java b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfiguration.java
index de7fe6fc1900..9bffbd8b8ff3 100644
--- a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfiguration.java
+++ b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfiguration.java
@@ -24,7 +24,7 @@ import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.JDOMExternalizerUtil;
import com.intellij.openapi.util.WriteExternalException;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -32,7 +32,7 @@ import org.jetbrains.annotations.NotNull;
* @author Leonid Shalupov
*/
public class PythonUnitTestRunConfiguration extends
- AbstractPythonOldTestRunConfiguration
+ AbstractPythonLegacyTestRunConfiguration
implements PythonUnitTestRunConfigurationParams {
private boolean myIsPureUnittest = true;
protected String myTitle = "Unittest";
diff --git a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfigurationForm.java b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfigurationForm.java
index 31e064060cab..ce5cfcec68b7 100644
--- a/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfigurationForm.java
+++ b/python/src/com/jetbrains/python/testing/unittest/PythonUnitTestRunConfigurationForm.java
@@ -17,7 +17,7 @@ package com.jetbrains.python.testing.unittest;
import com.intellij.openapi.project.Project;
import com.jetbrains.python.PyBundle;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
import com.jetbrains.python.testing.AbstractPythonTestRunConfigurationParams;
import com.jetbrains.python.testing.PythonTestRunConfigurationForm;
@@ -45,7 +45,7 @@ public class PythonUnitTestRunConfigurationForm implements PythonUnitTestRunConf
final ActionListener testTypeListener = new ActionListener() {
public void actionPerformed(final ActionEvent e) {
- myIsPureUnittest.setVisible(myTestRunConfigurationForm.getTestType() != AbstractPythonOldTestRunConfiguration.TestType.TEST_FUNCTION);
+ myIsPureUnittest.setVisible(myTestRunConfigurationForm.getTestType() != AbstractPythonLegacyTestRunConfiguration.TestType.TEST_FUNCTION);
}
};
myTestRunConfigurationForm.addTestTypeListener(testTypeListener);
diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestForm.java b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestForm.java
index 8f7ad6904d6b..25b16e275ada 100644
--- a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestForm.java
+++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestForm.java
@@ -18,6 +18,7 @@ package com.jetbrains.python.testing.universalTests;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
+import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBRadioButton;
@@ -85,13 +86,16 @@ public final class PyUniversalTestForm implements SimplePropertiesProvider {
}
@Override
- public void setPropertyValue(@NotNull final String propertyName, @Nullable final String propertyValue) {
+ public void setPropertyValue(@NotNull
+ final String propertyName, @Nullable
+ final String propertyValue) {
myCustomOptions.get(propertyName).setText(propertyValue != null ? propertyValue : "");
}
@Nullable
@Override
- public String getPropertyValue(@NotNull final String propertyName) {
+ public String getPropertyValue(@NotNull
+ final String propertyName) {
return myCustomOptions.get(propertyName).getText();
}
@@ -103,8 +107,10 @@ public final class PyUniversalTestForm implements SimplePropertiesProvider {
* @param customOptions additional option names this form shall support. Make sure your configuration has appropriate properties.
*/
@NotNull
- public static PyUniversalTestForm create(@NotNull final PyUniversalTestConfiguration configuration,
- @NotNull final String... customOptions) { // TODO: DOC
+ public static PyUniversalTestForm create(@NotNull
+ final PyUniversalTestConfiguration configuration,
+ @NotNull
+ final String... customOptions) { // TODO: DOC
final PyUniversalTestForm form = new PyUniversalTestForm();
@@ -134,7 +140,8 @@ public final class PyUniversalTestForm implements SimplePropertiesProvider {
return form;
}
- private void addCustomOptions(@NotNull final String... optionNames) {
+ private void addCustomOptions(@NotNull
+ final String... optionNames) {
if (optionNames.length == 0) {
return;
}
@@ -175,11 +182,15 @@ public final class PyUniversalTestForm implements SimplePropertiesProvider {
@NotNull
public String getTarget() {
- return myTargetText.getText();
+ // We should always use system-independent path because only this type of path is processed correctly
+ // when stored (folder changed to macros to prevent hard code)
+ final String targetText = myTargetText.getText().trim();
+ return getTargetType() == TestTargetType.PATH ? FileUtil.toSystemIndependentName(targetText) : targetText;
}
- public void setTarget(@NotNull final String targetText) {
+ public void setTarget(@NotNull
+ final String targetText) {
myTargetText.setText(targetText);
}
@@ -196,7 +207,8 @@ public final class PyUniversalTestForm implements SimplePropertiesProvider {
}
@SuppressWarnings("unused") // Mutator for property
- public void setTargetType(@NotNull final TestTargetType target) {
+ public void setTargetType(@NotNull
+ final TestTargetType target) {
final Enumeration elements = myButtonGroup.getElements();
while (elements.hasMoreElements()) {
final AbstractButton button = elements.nextElement();
diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestLegacyInterop.kt b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestLegacyInterop.kt
new file mode 100644
index 000000000000..62d7dd26cdf3
--- /dev/null
+++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTestLegacyInterop.kt
@@ -0,0 +1,264 @@
+package com.jetbrains.python.testing.universalTests
+
+import com.intellij.execution.RunManager
+import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.fileEditor.FileDocumentManager
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.util.JDOMExternalizable
+import com.intellij.openapi.util.registry.Registry
+import com.intellij.openapi.vfs.LocalFileSystem
+import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.psi.PsiDocumentManager
+import com.jetbrains.python.psi.PyFile
+import com.jetbrains.python.psi.PyQualifiedNameOwner
+import com.jetbrains.python.psi.PyUtil
+import com.jetbrains.python.psi.types.TypeEvalContext
+import com.jetbrains.python.run.PythonConfigurationFactoryBase
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration.TestType
+import com.jetbrains.python.testing.PythonTestConfigurationType
+import com.jetbrains.python.testing.nosetest.PythonNoseTestRunConfiguration
+import com.jetbrains.python.testing.pytest.PyTestRunConfiguration
+import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration
+import org.jdom.Element
+
+/**
+ * Module to support legacy configurations.
+ *
+ * When legacy configuration is ought to be dropped, just remove this module and all references to it.
+ * It supports switching back to old runners (see [isNewTestsModeEnabled]) and importing old configs to new one.
+ * [projectInitialized] shall be called for that.
+ *
+ * @author Ilya.Kazakevich
+ */
+
+/**
+ * @return is new mode enabled or not
+ */
+fun isNewTestsModeEnabled(): Boolean = Registry.`is`("python.tests.enableUniversalTests")
+
+/**
+ * To be called when project initialized to copy old configs to new one
+ */
+fun projectInitialized(project: Project) {
+ assert(project.isInitialized, { "Project is not initialized yet" })
+ RunManager.getInstance(project).allConfigurationsList.filterIsInstance(PyUniversalTestConfiguration::class.java).forEach {
+ it.legacyConfigurationAdapter.copyFromLegacyIfNeeded()
+ }
+}
+
+private fun getVirtualFileByPath(path: String): VirtualFile? {
+ return LocalFileSystem.getInstance().findFileByPath(path) ?: return null
+}
+
+private fun VirtualFile.asPyFile(project: Project): PyFile? {
+ assert(project.isInitialized, { "This function can't be used on uninitialized project" })
+ if (this.isDirectory) {
+ return null
+ }
+ var file: PyFile? = null
+
+ ApplicationManager.getApplication()
+ .invokeAndWait({
+ val document = FileDocumentManager.getInstance().getDocument(this)
+ if (document != null) {
+ file = PyUtil.`as`(PsiDocumentManager.getInstance(project).getPsiFile(document), PyFile::class.java)
+ }
+ })
+ return file
+}
+
+/**
+ * Manages legacy-to-new configuration binding
+ * Attach it to new configuration and mark with [com.jetbrains.reflection.DelegationProperty]
+ */
+class PyUniversalTestLegacyConfigurationAdapter(newConfig: T)
+ : JDOMExternalizable {
+
+ private val configManager: LegacyConfigurationManager<*, *>
+
+ /**
+ * Does configuration contain legacy information or was it created as new config?
+ * Null is unknown
+ */
+ private var containsLegacyInformation: Boolean? = null
+
+ // TODO: DOC null to prevent useless save
+ /**
+ * True if configuration [containsLegacyInformation] and this information is already copied to new config, so it should not be
+ * copied second time.
+ *
+ * Null means "false" and used here to prevent saving useless "false" value in .xml for new configurations.
+ */
+ @ConfigField
+ var legacyInformationCopiedToNew: Boolean? = null
+
+ init {
+ when (newConfig) {
+ is PyUniversalPyTestConfiguration -> {
+ configManager = LegacyConfigurationManagerPyTest(newConfig)
+ }
+ is PyUniversalNoseTestConfiguration -> {
+ configManager = LegacyConfigurationManagerNose(newConfig)
+ }
+ is PyUniversalUnitTestConfiguration -> {
+ configManager = LegacyConfigurationManagerUnit(newConfig)
+ }
+ else -> {
+ throw IllegalAccessException("Unknown config: $newConfig")
+ }
+ }
+ }
+
+ override fun readExternal(element: Element) {
+ configManager.legacyConfig.readExternal(element)
+ containsLegacyInformation = (configManager.legacyConfig.getTestType() != null)
+
+ }
+
+ override fun writeExternal(element: Element) {
+ if (containsLegacyInformation ?: return) {
+ configManager.legacyConfig.writeExternal(element)
+ }
+ }
+
+ fun copyFromLegacyIfNeeded() {
+ if (containsLegacyInformation ?: return && !(legacyInformationCopiedToNew ?: false)) {
+ configManager.copyFromLegacy()
+ legacyInformationCopiedToNew = true
+ }
+ }
+}
+
+/**
+ * Manages legacy-to-new configuration copying process
+ */
+private abstract class LegacyConfigurationManager<
+ LEGACY_CONF_T : AbstractPythonLegacyTestRunConfiguration,
+ out NEW_CONF_T : PyUniversalTestConfiguration
+ >(legacyConfFactory: PythonConfigurationFactoryBase, val newConfig: NEW_CONF_T) {
+
+ @Suppress("UNCHECKED_CAST") // Factory-to-config mapping should be checked by developer: createTemplateConfiguration is not generic
+ val legacyConfig = legacyConfFactory.createTemplateConfiguration(newConfig.project) as LEGACY_CONF_T
+
+ /**
+ * Checks test type to interpret target correctly. It could be function, class or method
+ */
+ private fun getElementFromConfig(script: PyFile): PyQualifiedNameOwner? {
+ if (legacyConfig.testType == TestType.TEST_FUNCTION) {
+ return script.findTopLevelFunction(legacyConfig.methodName)
+ }
+ val clazz = script.findTopLevelClass(legacyConfig.className) ?: return null
+ if (legacyConfig.testType == TestType.TEST_CLASS) {
+ return clazz
+ }
+ return clazz.findMethodByName(legacyConfig.methodName, true, TypeEvalContext.userInitiated(legacyConfig.project, script))
+ }
+
+ /**
+ * Copies config from legacy to new configuration.
+ * Used by all runners but py.test which has very different settings
+ */
+ open fun copyFromLegacy() {
+ when (legacyConfig.testType) {
+ TestType.TEST_CLASS, TestType.TEST_FUNCTION, TestType.TEST_METHOD -> {
+ val virtualFile = getVirtualFileByPath(legacyConfig.scriptName) ?: return
+ val pyFile = virtualFile.asPyFile(legacyConfig.project) ?: return
+ val qualifiedName = getElementFromConfig(pyFile)?.qualifiedName ?: return
+ newConfig.target.targetType = TestTargetType.PYTHON
+ newConfig.target.target = qualifiedName
+ }
+ TestType.TEST_FOLDER -> {
+ newConfig.target.targetType = TestTargetType.PATH
+ newConfig.target.target = legacyConfig.folderName
+ }
+ TestType.TEST_SCRIPT -> {
+ newConfig.target.targetType = TestTargetType.PATH
+ newConfig.target.target = legacyConfig.scriptName
+ }
+ else -> {
+ Logger.getInstance(LegacyConfigurationManager::class.java).warn("Unknown type {${legacyConfig.testType}")
+ }
+ }
+ }
+}
+
+
+private class LegacyConfigurationManagerPyTest(newConfig: PyUniversalPyTestConfiguration) :
+ LegacyConfigurationManager(
+ PythonTestConfigurationType.getInstance().LEGACY_PYTEST_FACTORY, newConfig) {
+ /**
+ * In Py.test target is provided as keywords, joined with "and".
+ * "function_foo", "MyClass" or "MyClass and my_method" could be used here.
+ */
+ private val KEYWORDS_SPLIT_PATTERN = java.util.regex.Pattern.compile("\\s+and\\s+", java.util.regex.Pattern.CASE_INSENSITIVE)
+
+ override fun copyFromLegacy() {
+ // Do not call parent since target is always provided as testToRun here
+ newConfig.additionalArguments = legacyConfig.params
+
+ // Default is PATH
+ newConfig.target.targetType = TestTargetType.PATH
+
+ val oldKeywords = legacyConfig.keywords
+
+ val virtualFile = getVirtualFileByPath(legacyConfig.testToRun) ?: return
+ if (virtualFile.isDirectory) {
+ // If target is directory, then it can't point to any symbol
+ newConfig.target.target = virtualFile.path
+ newConfig.target.targetType = TestTargetType.PATH
+ newConfig.keywords = oldKeywords
+ return
+ }
+ // If it is file -- it could be file, class, method or functions (see keywords)
+ val script = virtualFile.asPyFile(newConfig.project) ?: return
+
+
+ val keywordsList = oldKeywords.split(KEYWORDS_SPLIT_PATTERN)
+ if (keywordsList.isEmpty() || keywordsList.size > 2 || keywordsList.find { it.contains(" ") } != null) {
+ //Give up with interpreting
+ newConfig.keywords = oldKeywords
+ newConfig.target.target = script.virtualFile.path
+ newConfig.target.targetType = TestTargetType.PATH
+ return
+ }
+ val classOrFunctionName = keywordsList[0]
+ val clazz = script.findTopLevelClass(classOrFunctionName)
+
+ if (keywordsList.size == 1) { // Class or function
+ val classOrFunction = PyUtil.`as`(clazz ?:
+ script.findTopLevelFunction(classOrFunctionName),
+ PyQualifiedNameOwner::class.java) ?: return
+ newConfig.target.target = classOrFunction.qualifiedName ?: return
+ newConfig.target.targetType = TestTargetType.PYTHON
+ }
+ if (keywordsList.size == 2) { // Class and method
+ clazz ?: return
+ val method = clazz.findMethodByName(keywordsList[1], true, TypeEvalContext.userInitiated(newConfig.project, script)) ?: return
+ newConfig.target.target = method.qualifiedName ?: return
+ newConfig.target.targetType = TestTargetType.PYTHON
+
+ }
+
+ }
+}
+//TODO: Support "pattern" field for unittest
+private class LegacyConfigurationManagerUnit(newConfig: PyUniversalUnitTestConfiguration) :
+ LegacyConfigurationManager(
+ PythonTestConfigurationType.getInstance().LEGACY_UNITTEST_FACTORY, newConfig) {
+ override fun copyFromLegacy() {
+ super.copyFromLegacy()
+ newConfig.additionalArguments = legacyConfig.params
+ }
+}
+
+
+private class LegacyConfigurationManagerNose(newConfig: PyUniversalNoseTestConfiguration) :
+ LegacyConfigurationManager(
+ PythonTestConfigurationType.getInstance().LEGACY_NOSETEST_FACTORY, newConfig) {
+ override fun copyFromLegacy() {
+ super.copyFromLegacy()
+ newConfig.additionalArguments = legacyConfig.params
+ }
+}
diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt
index 467e5f6e9bed..94a7d3030c2b 100644
--- a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt
+++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt
@@ -38,7 +38,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.JDOMExternalizerUtil
import com.intellij.openapi.util.Pair
import com.intellij.openapi.util.Ref
-import com.intellij.openapi.util.registry.Registry
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
@@ -56,6 +55,7 @@ import com.jetbrains.python.run.PythonConfigurationFactoryBase
import com.jetbrains.python.testing.*
import com.jetbrains.reflection.DelegationProperty
import com.jetbrains.reflection.Properties
+import com.jetbrains.reflection.Property
import com.jetbrains.reflection.getProperties
import org.jdom.Element
import java.io.File
@@ -64,13 +64,11 @@ import javax.swing.JComponent
/**
- * New (universal) API for test runners.
- *
- * @author Ilya.Kazakevich
+ * New configuration factories
*/
-
-
-fun isUniversalModeEnabled(): Boolean = Registry.`is`("python.tests.enableUniversalTests")
+val factories: Array = arrayOf(PyUniversalUnitTestFactory,
+ PyUniversalPyTestFactory,
+ PyUniversalNoseTestFactory)
internal fun getAdditionalArgumentsPropertyName() = PyUniversalTestConfiguration::additionalArguments.name
@@ -79,7 +77,7 @@ internal fun getAdditionalArgumentsPropertyName() = PyUniversalTestConfiguration
*/
private fun findConfigurationFactoryFromSettings(module: Module): ConfigurationFactory {
val name = TestRunnerService.getInstance(module).projectConfiguration
- val factories = PyUniversalTestsConfigurationType.configurationFactories
+ val factories = PythonTestConfigurationType.getInstance().configurationFactories
val configurationFactory = factories.find { it.name == name }
return configurationFactory ?: factories.first()
}
@@ -150,6 +148,14 @@ data class ConfigurationTarget(@ConfigField var target: String, @ConfigField var
}
}
+
+/**
+ * To prevent legacy configuration options from clashing with new names, we add prefix
+ * to use for writing/reading xml
+ */
+private val Property.prefixedName: String
+ get() = "_new_" + this.getName()
+
/**
* Parent of all new test configurations.
* All config-specific fields are implemented as properties. They are saved/restored automatically and passed to GUI form.
@@ -167,6 +173,10 @@ abstract class PyUniversalTestConfiguration(project: Project,
val testFrameworkName = configurationFactory.name!!
+ @Suppress("LeakingThis") // Legacy adapter is used to support legacy configs. Leak is ok here since everything takes place in one thread
+ @DelegationProperty
+ val legacyConfigurationAdapter = PyUniversalTestLegacyConfigurationAdapter(this)
+
private fun getTestSpecForPythonTarget(location: Location<*>): List {
if (location !is PsiLocation) {
@@ -230,12 +240,18 @@ abstract class PyUniversalTestConfiguration(project: Project,
override fun writeExternal(element: Element) {
+ // Write legacy config to preserve it
+ legacyConfigurationAdapter.writeExternal(element)
super.writeExternal(element)
val gson = Gson()
getConfigFields().properties.forEach {
- JDOMExternalizerUtil.writeField(element, it.getName(), gson.toJson(it.get()))
+ val value = it.get()
+ if (value != null) {
+ // No need to write null since null is default value
+ JDOMExternalizerUtil.writeField(element, it.prefixedName, gson.toJson(value))
+ }
}
}
@@ -245,11 +261,12 @@ abstract class PyUniversalTestConfiguration(project: Project,
val gson = Gson()
getConfigFields().properties.forEach {
- val fromJson: Any? = gson.fromJson(JDOMExternalizerUtil.readField(element, it.getName()), it.getType())
+ val fromJson: Any? = gson.fromJson(JDOMExternalizerUtil.readField(element, it.prefixedName), it.getType())
if (fromJson != null) {
it.set(fromJson)
}
}
+ legacyConfigurationAdapter.readExternal(element)
}
@@ -273,37 +290,23 @@ abstract class PyUniversalTestConfiguration(project: Project,
}
}
-object PyUniversalTestsConfigurationType : PythonTestConfigurationType() {
- override fun getId() = "py_universal_tests"
-
- override fun getConfigurationFactories(): Array> {
- if (isUniversalModeEnabled()) {
- return arrayOf(PyUniversalUnitTestFactory,
- PyUniversalPyTestFactory,
- PyUniversalNoseTestFactory)
- }
- // Array can't be empty according to contract (type is fetched from first element)
- return arrayOf(PyUniversalUnitTestFactory)
- }
-}
-
-// TODO: DOC
abstract class PyUniversalTestFactory : PythonConfigurationFactoryBase(
- PyUniversalTestsConfigurationType) {
+ PythonTestConfigurationType.getInstance()) {
override abstract fun createTemplateConfiguration(project: Project): CONF_T
}
/**
* Only one producer is registered with EP, but it uses factory configured by user to prdouce different configs
*/
-object PyUniversalTestsConfigurationProducer : RunConfigurationProducer(PyUniversalTestsConfigurationType) {
+object PyUniversalTestsConfigurationProducer : RunConfigurationProducer(
+ PythonTestConfigurationType.getInstance()) {
override fun cloneTemplateConfiguration(context: ConfigurationContext): RunnerAndConfigurationSettings {
return cloneTemplateConfigurationStatic(context, findConfigurationFactoryFromSettings(context.module))
}
override fun findOrCreateConfigurationFromContext(context: ConfigurationContext?): ConfigurationFromContext? {
- if (!isUniversalModeEnabled()) {
+ if (!isNewTestsModeEnabled()) {
return null
}
return super.findOrCreateConfigurationFromContext(context)
@@ -323,7 +326,10 @@ object PyUniversalTestsConfigurationProducer : RunConfigurationProducer? {
var element = baseElement
diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalUnitTest.kt b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalUnitTest.kt
index 3a77acd14afe..8ccf4c21e863 100644
--- a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalUnitTest.kt
+++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalUnitTest.kt
@@ -29,6 +29,7 @@ import com.jetbrains.python.testing.PythonTestConfigurationsModel
* unittest
*/
+//TODO: Support pattern
class PyUniversalUnitTestSettingsEditor(configuration: PyUniversalTestConfiguration) :
PyUniversalTestSettingsEditor(PyUniversalTestForm.create(configuration))
diff --git a/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationTestTask.java b/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationTestTask.java
index ef63ddcd88c9..006baf5aadfe 100644
--- a/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationTestTask.java
+++ b/python/testSrc/com/jetbrains/env/python/testing/CreateConfigurationTestTask.java
@@ -23,7 +23,7 @@ import com.intellij.psi.PsiElement;
import com.jetbrains.env.PyExecutionFixtureTestTask;
import com.jetbrains.python.sdk.InvalidSdkException;
import com.jetbrains.python.sdkTools.SdkCreationType;
-import com.jetbrains.python.testing.PythonTestOldConfigurationProducer;
+import com.jetbrains.python.testing.PythonTestLegacyConfigurationProducer;
import com.jetbrains.python.testing.TestRunnerService;
import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
@@ -43,13 +43,13 @@ class CreateConfigurationTestTask extends PyExecutionFixtureTestTask {
@NotNull
private final String myTestRunnerName;
@NotNull
- private final Class extends PythonTestOldConfigurationProducer> myProducer;
+ private final Class extends PythonTestLegacyConfigurationProducer> myProducer;
/**
* @param producer class of configuration producer to check
* @param testRunnerName test runner name (to set as default to make sure producer launched)
*/
- CreateConfigurationTestTask(@NotNull final Class extends PythonTestOldConfigurationProducer> producer,
+ CreateConfigurationTestTask(@NotNull final Class extends PythonTestLegacyConfigurationProducer> producer,
@NotNull final String testRunnerName) {
super("/testRunner/env/createConfigurationTest/");
myProducer = producer;
@@ -74,7 +74,7 @@ class CreateConfigurationTestTask extends PyExecutionFixtureTestTask {
private void checkConfigurationCreatedFrom(@NotNull final PsiElement element) {
- final PythonTestOldConfigurationProducer producer = createProducer();
+ final PythonTestLegacyConfigurationProducer producer = createProducer();
final ConfigurationFromContext context =
producer.createConfigurationFromContext(new ConfigurationContext(element));
Assert.assertNotNull(String.format("Failed to create context for %s", myTestRunnerName), context);
@@ -82,7 +82,7 @@ class CreateConfigurationTestTask extends PyExecutionFixtureTestTask {
}
@NotNull
- private PythonTestOldConfigurationProducer createProducer() {
+ private PythonTestLegacyConfigurationProducer createProducer() {
try {
return myProducer.getConstructor().newInstance();
}
diff --git a/python/testSrc/com/jetbrains/env/ut/PyDocTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyDocTestProcessRunner.java
index 2ff7cc6a7d9b..0e4ca2cd8cea 100644
--- a/python/testSrc/com/jetbrains/env/ut/PyDocTestProcessRunner.java
+++ b/python/testSrc/com/jetbrains/env/ut/PyDocTestProcessRunner.java
@@ -16,7 +16,7 @@
package com.jetbrains.env.ut;
import com.jetbrains.env.ProcessWithConsoleRunner;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import com.jetbrains.python.testing.doctest.PythonDocTestRunConfiguration;
import org.jetbrains.annotations.NotNull;
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class PyDocTestProcessRunner extends PyScriptTestProcessRunner {
public PyDocTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) {
- super(PythonTestOldConfigurationType.getInstance().PY_DOCTEST_FACTORY,
+ super(PythonTestConfigurationType.getInstance().PY_DOCTEST_FACTORY,
PythonDocTestRunConfiguration.class, scriptName, timesToRerunFailedTests);
}
}
diff --git a/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java
index cc7586fd5151..fdb654a66069 100644
--- a/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java
+++ b/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java
@@ -16,7 +16,7 @@
package com.jetbrains.env.ut;
import com.jetbrains.env.ProcessWithConsoleRunner;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import com.jetbrains.python.testing.nosetest.PythonNoseTestRunConfiguration;
import org.jetbrains.annotations.NotNull;
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class PyNoseTestProcessRunner extends PyScriptTestProcessRunner {
public PyNoseTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) {
- super(PythonTestOldConfigurationType.getInstance().PY_NOSETEST_FACTORY,
+ super(PythonTestConfigurationType.getInstance().LEGACY_NOSETEST_FACTORY,
PythonNoseTestRunConfiguration.class, scriptName, timesToRerunFailedTests);
}
}
diff --git a/python/testSrc/com/jetbrains/env/ut/PyTestTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyTestTestProcessRunner.java
index 35ac7bd27e4e..485386c54e8d 100644
--- a/python/testSrc/com/jetbrains/env/ut/PyTestTestProcessRunner.java
+++ b/python/testSrc/com/jetbrains/env/ut/PyTestTestProcessRunner.java
@@ -16,7 +16,7 @@
package com.jetbrains.env.ut;
import com.jetbrains.env.ProcessWithConsoleRunner;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import com.jetbrains.python.testing.pytest.PyTestRunConfiguration;
import org.jetbrains.annotations.NotNull;
@@ -29,7 +29,7 @@ import java.io.IOException;
*/
public class PyTestTestProcessRunner extends PyScriptTestProcessRunner {
public PyTestTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) {
- super(PythonTestOldConfigurationType.getInstance().PY_PYTEST_FACTORY,
+ super(PythonTestConfigurationType.getInstance().LEGACY_PYTEST_FACTORY,
PyTestRunConfiguration.class, scriptName, timesToRerunFailedTests);
}
diff --git a/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java
index c10387467f8d..d902dba6ccae 100644
--- a/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java
+++ b/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java
@@ -16,7 +16,7 @@
package com.jetbrains.env.ut;
import com.jetbrains.env.ProcessWithConsoleRunner;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration;
import org.jetbrains.annotations.NotNull;
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class PyUnitTestProcessRunner extends PyScriptTestProcessRunner {
public PyUnitTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) {
- super(PythonTestOldConfigurationType.getInstance().PY_UNITTEST_FACTORY,
+ super(PythonTestConfigurationType.getInstance().LEGACY_UNITTEST_FACTORY,
PythonUnitTestRunConfiguration.class, scriptName, timesToRerunFailedTests);
}
}
diff --git a/python/testSrc/com/jetbrains/env/ut/PyUnitTestTask.java b/python/testSrc/com/jetbrains/env/ut/PyUnitTestTask.java
index 80a33a31e14d..242ef76f54b2 100644
--- a/python/testSrc/com/jetbrains/env/ut/PyUnitTestTask.java
+++ b/python/testSrc/com/jetbrains/env/ut/PyUnitTestTask.java
@@ -40,8 +40,8 @@ import com.jetbrains.python.PyNames;
import com.jetbrains.python.sdk.PythonEnvUtil;
import com.jetbrains.python.sdk.flavors.JythonSdkFlavor;
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
-import com.jetbrains.python.testing.AbstractPythonOldTestRunConfiguration;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.Assert;
@@ -154,7 +154,7 @@ public abstract class PyUnitTestTask extends PyExecutionFixtureTestTask {
@Override
public void runTestOn(String sdkHome) throws Exception {
final Project project = getProject();
- final ConfigurationFactory factory = PythonTestOldConfigurationType.getInstance().PY_UNITTEST_FACTORY;
+ final ConfigurationFactory factory = PythonTestConfigurationType.getInstance().LEGACY_UNITTEST_FACTORY;
runConfiguration(factory, sdkHome, project);
}
@@ -162,7 +162,7 @@ public abstract class PyUnitTestTask extends PyExecutionFixtureTestTask {
final RunnerAndConfigurationSettings settings =
RunManager.getInstance(project).createRunConfiguration("test", factory);
- AbstractPythonOldTestRunConfiguration config = (AbstractPythonOldTestRunConfiguration)settings.getConfiguration();
+ AbstractPythonLegacyTestRunConfiguration config = (AbstractPythonLegacyTestRunConfiguration)settings.getConfiguration();
config.setSdkHome(sdkHome);
@@ -271,7 +271,7 @@ public abstract class PyUnitTestTask extends PyExecutionFixtureTestTask {
return 60000;
}
- protected void configure(AbstractPythonOldTestRunConfiguration config) {
+ protected void configure(AbstractPythonLegacyTestRunConfiguration config) {
}
/**
diff --git a/python/testSrc/com/jetbrains/python/PythonRunConfigurationTest.java b/python/testSrc/com/jetbrains/python/PythonRunConfigurationTest.java
index 40afc8f1c850..420d9bc4b8ce 100644
--- a/python/testSrc/com/jetbrains/python/PythonRunConfigurationTest.java
+++ b/python/testSrc/com/jetbrains/python/PythonRunConfigurationTest.java
@@ -18,7 +18,7 @@ package com.jetbrains.python;
import com.jetbrains.python.fixtures.PyCommandLineTestCase;
import com.jetbrains.python.run.PythonConfigurationType;
import com.jetbrains.python.run.PythonRunConfiguration;
-import com.jetbrains.python.testing.PythonTestOldConfigurationType;
+import com.jetbrains.python.testing.PythonTestConfigurationType;
import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration;
import junit.framework.Assert;
@@ -31,7 +31,7 @@ public class PythonRunConfigurationTest extends PyCommandLineTestCase {
private static final String PY_SCRIPT = "foo.py";
public void testUnitTestCommandLine() {
- PythonUnitTestRunConfiguration configuration = createConfiguration(PythonTestOldConfigurationType.getInstance(),
+ PythonUnitTestRunConfiguration configuration = createConfiguration(PythonTestConfigurationType.getInstance(),
PythonUnitTestRunConfiguration.class);
configuration.setScriptName(PY_SCRIPT);
final List params = buildRunCommandLine(configuration);