From b6940f69759efde2cfd30a63331e3127e0ec8e2c Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Thu, 29 Mar 2018 22:02:39 +0300 Subject: [PATCH] PY-29163: Create different config. if different files are used. Assume you have two elements with same name but in different folders. Targets are same but resolved to different elements because of different working directories. We now check if configuration's target resolved to same file before reusing it. --- .../jetbrains/python/testing/PyTestsShared.kt | 14 ++++++- .../configurationByContext/__init__.py | 0 .../configurationByContext/bar/__init__.py | 0 .../configurationByContext/bar/test_test.py | 2 + .../configurationByContext/foo/__init__.py | 0 .../configurationByContext/foo/test_test.py | 2 + .../python/testing/PythonPyTestingTest.java | 42 +++++++++++++++++++ 7 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 python/testData/testRunner/env/createConfigurationTest/configurationByContext/__init__.py create mode 100644 python/testData/testRunner/env/createConfigurationTest/configurationByContext/bar/__init__.py create mode 100644 python/testData/testRunner/env/createConfigurationTest/configurationByContext/bar/test_test.py create mode 100644 python/testData/testRunner/env/createConfigurationTest/configurationByContext/foo/__init__.py create mode 100644 python/testData/testRunner/env/createConfigurationTest/configurationByContext/foo/test_test.py diff --git a/python/src/com/jetbrains/python/testing/PyTestsShared.kt b/python/src/com/jetbrains/python/testing/PyTestsShared.kt index e4e5b9ed9841..59afe4452183 100644 --- a/python/src/com/jetbrains/python/testing/PyTestsShared.kt +++ b/python/src/com/jetbrains/python/testing/PyTestsShared.kt @@ -63,6 +63,7 @@ import com.jetbrains.python.run.* import com.jetbrains.python.run.targetBasedConfiguration.PyRunTargetVariant import com.jetbrains.python.run.targetBasedConfiguration.TargetWithVariant import com.jetbrains.python.run.targetBasedConfiguration.createRefactoringListenerIfPossible +import com.jetbrains.python.run.targetBasedConfiguration.targetAsPsiElement import com.jetbrains.reflection.DelegationProperty import com.jetbrains.reflection.Properties import com.jetbrains.reflection.Property @@ -756,7 +757,18 @@ object PyTestsConfigurationProducer : AbstractPythonTestConfigurationProducer(myFrameworkName, PyTestConfiguration.class)); } + /** + * Create configuration by right click and check that same configuration is chosen when clicked on same element. + * New one created in other case. + */ + @Test + public void testConfigurationByContext() { + runPythonTest( + new CreateConfigurationTestTask(myFrameworkName, PyTestConfiguration.class) { + + @NotNull + private PyFunction getFunction(@NotNull final String folder) { + final PyFile file = (PyFile)myFixture.configureByFile(String.format("configurationByContext/%s/test_test.py", folder)); + assert file != null; + final PyFunction function = file.findTopLevelFunction("test_test"); + assert function != null; + return function; + } + + @Override + protected void checkConfiguration(@NotNull final PyTestConfiguration configuration, + @NotNull final PsiElement elementToRightClickOn) { + + + final PyTestConfiguration sameConfig = createConfigurationByElement(getFunction("bar"), PyTestConfiguration.class); + Assert.assertEquals("Same element must provide same config", sameConfig, configuration); + + final PyTestConfiguration differentConfig = createConfigurationByElement(getFunction("foo"), PyTestConfiguration.class); + //Although targets are same, working dirs are different + assert differentConfig.getTarget().equals(configuration.getTarget()); + + Assert.assertNotEquals("Function from different folder must provide different config", differentConfig, configuration); + } + + @NotNull + @Override + protected List getPsiElementsToRightClickOn() { + return Collections.singletonList(getFunction("bar")); + } + }); + } + /** * Checks tests are resolved when launched from subfolder */