PY-26102: Suggest test runner for any file starting with "test_"

Any file that starts with "test_" may be used as pytest/nosetest target
regardless its content.
Unittest is skipped because of "testCaseClassRequired".
This commit is contained in:
Ilya.Kazakevich
2017-09-20 23:54:32 +03:00
parent c0c9e366d0
commit 0be23bc144
4 changed files with 13 additions and 4 deletions
@@ -74,7 +74,8 @@ public final class PythonUnitTestUtil {
if (isTestCaseClassRequired(file, testCaseClassRequired)) {
return false;
}
return file.getTopLevelFunctions().stream().anyMatch(o -> isTestFunction(o, testCaseClassRequired, context));
return file.getName().startsWith("test_") ||
file.getTopLevelFunctions().stream().anyMatch(o -> isTestFunction(o, testCaseClassRequired, context));
}
/**
@@ -52,6 +52,7 @@ class CreateConfigurationMultipleCasesTask<T extends PyAbstractTestConfiguration
result.add(getDir("tests_package/package_test"));
result.add(getFile("tests_package/package_test", "test_in_package.py"));
result.add(getFile("/", "test_foo.py"));
result.add(getFile("tests_package/package_test", "test_in_package.py").findTopLevelClass("TestLogic"));
result.add(getDir("tests_folder"));
@@ -123,6 +124,9 @@ class CreateConfigurationMultipleCasesTask<T extends PyAbstractTestConfiguration
else if (element instanceof PyFunction && elementName.endsWith("foo")) {
Assert.assertEquals("non-test function should lead to level-based test", TestTargetType.PATH, target.getTargetType());
}
else if (element instanceof PyFile && elementName.endsWith("test_foo.py")) {
Assert.assertEquals("Wrong path for file-based target", TestTargetType.PATH, target.getTargetType());
}
else {
throw new AssertionError("Unexpected configuration " + configuration);
}
@@ -141,7 +145,7 @@ class CreateConfigurationMultipleCasesTask<T extends PyAbstractTestConfiguration
@NotNull
private PyFile getFile(@NotNull final String dirName, @NotNull final String fileName) {
final PsiFile psiFile = getDir(dirName).findFile(fileName);
assert psiFile instanceof PyFile : "Bad file " + psiFile;
assert psiFile instanceof PyFile : "Bad file " + psiFile + "name: " + fileName;
return (PyFile)psiFile;
}
}
@@ -666,9 +666,13 @@ public final class PythonUnitTestingTest extends PythonUnitTestingLikeTest<PyUni
PyUnitTestConfiguration.class) {
@Override
protected boolean configurationShouldBeProducedForElement(@NotNull final PsiElement element) {
// test_functions.py does not conttain any TestCase and can't be launched with unittest
// test_functions.py and test_foo do not contain any TestCase and can't be launched with unittest
final PsiFile file = element.getContainingFile();
return file == null || !file.getName().endsWith("test_functions.py");
if (file == null) {
return true;
}
final String name = file.getName();
return !(name.endsWith("test_functions.py") || name.endsWith("test_foo.py"));
}
});
}