diff --git a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt index aca00bb271e4..fbfb02e4bd73 100644 --- a/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt +++ b/python/src/com/jetbrains/python/testing/universalTests/PyUniversalTests.kt @@ -316,6 +316,12 @@ object PyUniversalTestsConfigurationProducer : RunConfigurationProducer NOT_SUIT = new Filter() { @Override public boolean shouldAccept(final SMTestProxy test) { - return !test.isSuite(); + return test.isLeaf(); } }; diff --git a/python/testSrc/com/jetbrains/env/python/testing/PyUnitTestProcessWithConsoleTestTask.java b/python/testSrc/com/jetbrains/env/python/testing/PyUnitTestProcessWithConsoleTestTask.java index 70119731a37e..ba7df332d9fd 100644 --- a/python/testSrc/com/jetbrains/env/python/testing/PyUnitTestProcessWithConsoleTestTask.java +++ b/python/testSrc/com/jetbrains/env/python/testing/PyUnitTestProcessWithConsoleTestTask.java @@ -40,4 +40,6 @@ abstract class PyUnitTestProcessWithConsoleTestTask extends PyProcessWithConsole protected PyUnitTestProcessRunner createProcessRunner() throws Exception { return new PyUnitTestProcessRunner(myScriptName, 0); } + + } diff --git a/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java b/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java index 89c058dc356a..335ef5d6c7ee 100644 --- a/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java +++ b/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java @@ -10,7 +10,8 @@ import com.jetbrains.env.ut.PyTestTestProcessRunner; import com.jetbrains.python.sdkTools.SdkCreationType; import com.jetbrains.python.testing.PythonTestConfigurationsModel; import com.jetbrains.python.testing.pytest.PyTestConfigurationProducer; -import com.jetbrains.python.testing.pytest.PyTestRunConfiguration; +import com.jetbrains.python.testing.universalTests.PyUniversalPyTestConfiguration; +import com.jetbrains.python.testing.universalTests.TestTargetType; import org.hamcrest.Matchers; import org.jetbrains.annotations.NotNull; import org.junit.Assert; @@ -66,12 +67,13 @@ public class PythonPyTestingTest extends PyEnvTestCase { protected PyTestTestProcessRunner createProcessRunner() throws Exception { return new PyTestTestProcessRunner("", 0) { @Override - protected void configurationCreatedAndWillLaunch(@NotNull final PyTestRunConfiguration configuration) throws IOException { + protected void configurationCreatedAndWillLaunch(@NotNull final PyUniversalPyTestConfiguration configuration) throws IOException { super.configurationCreatedAndWillLaunch(configuration); configuration.setWorkingDirectory(null); final VirtualFile fullFilePath = myFixture.getTempDirFixture().getFile("dir_test.py"); assert fullFilePath != null : String.format("No dir_test.py in %s", myFixture.getTempDirFixture().getTempDirPath()); - configuration.setTestToRun(fullFilePath.getPath()); + configuration.getTarget().setTarget(fullFilePath.getPath()); + configuration.getTarget().setTargetType(TestTargetType.PATH); } }; } diff --git a/python/testSrc/com/jetbrains/env/python/testing/PythonUnitTestingTest.java b/python/testSrc/com/jetbrains/env/python/testing/PythonUnitTestingTest.java index 5d8c05e0d84f..8cb5c77b84b6 100644 --- a/python/testSrc/com/jetbrains/env/python/testing/PythonUnitTestingTest.java +++ b/python/testSrc/com/jetbrains/env/python/testing/PythonUnitTestingTest.java @@ -23,6 +23,7 @@ import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import com.jetbrains.env.PyEnvTestCase; import com.jetbrains.env.Staging; +import com.jetbrains.env.ut.PyScriptTestProcessRunner; import com.jetbrains.env.ut.PyUnitTestProcessRunner; import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.LanguageLevel; @@ -59,8 +60,8 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { @NotNull final String stdout, @NotNull final String stderr, @NotNull final String all) { - assertEquals(2, runner.getAllTestsCount()); - assertEquals(2, runner.getPassedTestsCount()); + assertEquals(runner.getFormattedTestTree(), 2, runner.getAllTestsCount()); + assertEquals(runner.getFormattedTestTree(), 2, runner.getPassedTestsCount()); runner.assertAllTestsPassed(); } }); @@ -91,6 +92,7 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { /** * Ensure rerun test works even if test is declared in parent + * See https://github.com/JetBrains/teamcity-messages/issues/117 */ @Test public void testRerunDerivedClass() throws Exception { @@ -201,9 +203,9 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { @NotNull final String stdout, @NotNull final String stderr, @NotNull final String all) { - assertEquals(3, runner.getAllTestsCount()); - assertEquals(1, runner.getPassedTestsCount()); - assertEquals(2, runner.getFailedTestsCount()); + assertEquals(runner.getFormattedTestTree(), 3, runner.getAllTestsCount()); + assertEquals(runner.getFormattedTestTree(), 1, runner.getPassedTestsCount()); + assertEquals(runner.getFormattedTestTree(), 2, runner.getFailedTestsCount()); } }); } @@ -213,7 +215,7 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { */ @Test public void testUTRunnerByPattern() { - runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", "./_args_separator_*pattern.py") { + runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", PyUnitTestProcessRunner.TEST_PATTERN_PREFIX + "*pattern.py") { @Override @@ -221,9 +223,9 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { @NotNull final String stdout, @NotNull final String stderr, @NotNull final String all) { - assertEquals(4, runner.getAllTestsCount()); - assertEquals(2, runner.getPassedTestsCount()); - assertEquals(2, runner.getFailedTestsCount()); + assertEquals(runner.getFormattedTestTree(),4, runner.getAllTestsCount()); + assertEquals(runner.getFormattedTestTree(),2, runner.getPassedTestsCount()); + assertEquals(runner.getFormattedTestTree(),2, runner.getFailedTestsCount()); } }); } @@ -246,12 +248,12 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { assertEquals(1, runner.getFailedTestsCount()); } }); - } @Test public void testClass() { - runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", "test_file.py::GoodTest") { + runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", + PyScriptTestProcessRunner.TEST_TARGET_PREFIX + "test_file.GoodTest") { @Override protected void checkTestResults(@NotNull final PyUnitTestProcessRunner runner, @@ -266,7 +268,9 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { @Test public void testMethod() { - runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", "test_file.py::GoodTest::test_passes") { + runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit", + PyScriptTestProcessRunner.TEST_TARGET_PREFIX + + "test_file.GoodTest.test_passes") { @Override protected void checkTestResults(@NotNull final PyUnitTestProcessRunner runner, @@ -313,7 +317,7 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { runner.getAllConsoleText()), fileNames.size() >= 3); // UnitTest highlights file name - Assert.assertThat("Bad line highlighted", fileNames, everyItem(endsWith(fileName))); + Assert.assertThat("Bad line highlighted", fileNames, hasItem(endsWith(fileName))); } }); } @@ -336,14 +340,14 @@ public final class PythonUnitTestingTest extends PyEnvTestCase { @Test @Staging public void testRelativeImports() { - runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit/relativeImports", "relative_imports/tests/test_imps.py") { + runPythonTest(new PyUnitTestProcessWithConsoleTestTask("/testRunner/env/unit/relativeImports", PyUnitTestProcessRunner.TEST_PATTERN_PREFIX + "test_imps.py") { @Override protected void checkTestResults(@NotNull final PyUnitTestProcessRunner runner, @NotNull final String stdout, @NotNull final String stderr, @NotNull final String all) { - assertEquals(1, runner.getAllTestsCount()); - assertEquals(1, runner.getPassedTestsCount()); + assertEquals(runner.getFormattedTestTree(),1, runner.getAllTestsCount()); + assertEquals(runner.getFormattedTestTree(),1, runner.getPassedTestsCount()); } }); } diff --git a/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java index fdb654a66069..3c0422e0fc30 100644 --- a/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java +++ b/python/testSrc/com/jetbrains/env/ut/PyNoseTestProcessRunner.java @@ -16,8 +16,8 @@ package com.jetbrains.env.ut; import com.jetbrains.env.ProcessWithConsoleRunner; -import com.jetbrains.python.testing.PythonTestConfigurationType; -import com.jetbrains.python.testing.nosetest.PythonNoseTestRunConfiguration; +import com.jetbrains.python.testing.universalTests.PyUniversalNoseTestConfiguration; +import com.jetbrains.python.testing.universalTests.PyUniversalNoseTestFactory; import org.jetbrains.annotations.NotNull; /** @@ -25,9 +25,9 @@ import org.jetbrains.annotations.NotNull; * * @author Ilya.Kazakevich */ -public class PyNoseTestProcessRunner extends PyScriptTestProcessRunner { +public class PyNoseTestProcessRunner extends PyScriptTestProcessRunner { public PyNoseTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) { - super(PythonTestConfigurationType.getInstance().LEGACY_NOSETEST_FACTORY, - PythonNoseTestRunConfiguration.class, scriptName, timesToRerunFailedTests); + super(PyUniversalNoseTestFactory.INSTANCE, + PyUniversalNoseTestConfiguration.class, scriptName, timesToRerunFailedTests); } } diff --git a/python/testSrc/com/jetbrains/env/ut/PyScriptTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyScriptTestProcessRunner.java index f4f0024ea3c9..d2f1bf4baa3d 100644 --- a/python/testSrc/com/jetbrains/env/ut/PyScriptTestProcessRunner.java +++ b/python/testSrc/com/jetbrains/env/ut/PyScriptTestProcessRunner.java @@ -20,19 +20,30 @@ import com.jetbrains.env.ConfigurationBasedProcessRunner; import com.jetbrains.env.PyAbstractTestProcessRunner; import com.jetbrains.python.run.AbstractPythonRunConfigurationParams; import com.jetbrains.python.testing.AbstractPythonTestRunConfigurationParams; +import com.jetbrains.python.testing.universalTests.ConfigurationTarget; +import com.jetbrains.python.testing.universalTests.PyUniversalTestConfiguration; +import com.jetbrains.python.testing.universalTests.TestTargetType; import org.jetbrains.annotations.NotNull; import java.io.IOException; /** - * {@link PyAbstractTestProcessRunner} to run script-bases tests + * {@link PyAbstractTestProcessRunner} to run script-bases tests. + * + * Since this class only supports scripts {@link #myScriptName}, one may use + * {@link #TEST_TARGET_PREFIX} as prefix to provide python qname for new test runners * * @author Ilya.Kazakevich */ -public class PyScriptTestProcessRunner +public class PyScriptTestProcessRunner extends PyAbstractTestProcessRunner { + + /** + * Prepent script name with it if you use python test qname but not script name + */ + public static final String TEST_TARGET_PREFIX = "test:"; @NotNull - private final String myScriptName; + protected final String myScriptName; /** * @param scriptName name of script to run @@ -50,6 +61,18 @@ public class PyScriptTestProcessRunner { +public class PyTestTestProcessRunner extends PyScriptTestProcessRunner { public PyTestTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) { - super(PythonTestConfigurationType.getInstance().LEGACY_PYTEST_FACTORY, - PyTestRunConfiguration.class, scriptName, timesToRerunFailedTests); - } - - @Override - protected void configurationCreatedAndWillLaunch(@NotNull final PyTestRunConfiguration configuration) throws IOException { - super.configurationCreatedAndWillLaunch(configuration); - configuration.setTestToRun(configuration.getScriptName()); + super(PyUniversalPyTestFactory.INSTANCE, + PyUniversalPyTestConfiguration.class, scriptName, timesToRerunFailedTests); } } diff --git a/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java b/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java index d902dba6ccae..a9c0044fe0ae 100644 --- a/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java +++ b/python/testSrc/com/jetbrains/env/ut/PyUnitTestProcessRunner.java @@ -16,18 +16,36 @@ package com.jetbrains.env.ut; import com.jetbrains.env.ProcessWithConsoleRunner; -import com.jetbrains.python.testing.PythonTestConfigurationType; -import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration; +import com.jetbrains.python.testing.universalTests.PyUniversalUnitTestConfiguration; +import com.jetbrains.python.testing.universalTests.PyUniversalUnitTestFactory; +import com.jetbrains.python.testing.universalTests.TestTargetType; import org.jetbrains.annotations.NotNull; +import java.io.IOException; + /** * {@link ProcessWithConsoleRunner} to run unittest * * @author Ilya.Kazakevich */ -public class PyUnitTestProcessRunner extends PyScriptTestProcessRunner { +public class PyUnitTestProcessRunner extends PyScriptTestProcessRunner { + /** + * Prefix to use test pattern. See {@link #TEST_PATTERN_PREFIX} doc because it is similar + */ + public static final String TEST_PATTERN_PREFIX = "pattern:"; + public PyUnitTestProcessRunner(@NotNull final String scriptName, final int timesToRerunFailedTests) { - super(PythonTestConfigurationType.getInstance().LEGACY_UNITTEST_FACTORY, - PythonUnitTestRunConfiguration.class, scriptName, timesToRerunFailedTests); + super(PyUniversalUnitTestFactory.INSTANCE, + PyUniversalUnitTestConfiguration.class, scriptName, timesToRerunFailedTests); + } + + @Override + protected void configurationCreatedAndWillLaunch(@NotNull PyUniversalUnitTestConfiguration configuration) throws IOException { + super.configurationCreatedAndWillLaunch(configuration); + if (myScriptName.startsWith(TEST_PATTERN_PREFIX)) { + configuration.getTarget().setTargetType(TestTargetType.PATH); + configuration.getTarget().setTarget("."); + configuration.setPattern(myScriptName.substring(TEST_PATTERN_PREFIX.length())); + } } }