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.
This commit is contained in:
Ilya.Kazakevich
2018-03-29 22:04:39 +03:00
parent 64c5d75ef7
commit b6940f6975
7 changed files with 59 additions and 1 deletions
@@ -17,6 +17,7 @@ import com.jetbrains.env.PyProcessWithConsoleTestTask;
import com.jetbrains.env.python.testing.CreateConfigurationTestTask.PyConfigurationValidationTask;
import com.jetbrains.env.ut.PyTestTestProcessRunner;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.run.targetBasedConfiguration.PyRunTargetVariant;
import com.jetbrains.python.testing.ConfigurationTarget;
@@ -337,6 +338,47 @@ public final class PythonPyTestingTest extends PyEnvTestCase {
new CreateConfigurationMultipleCasesTask<>(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<PyTestConfiguration>(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<PsiElement> getPsiElementsToRightClickOn() {
return Collections.singletonList(getFunction("bar"));
}
});
}
/**
* Checks tests are resolved when launched from subfolder
*/