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 */