Gererated tests now check that all the relevant directories are present
We only checked test data files before
This commit is contained in:
@@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||
import org.jetbrains.jet.plugin.JetLanguage;
|
||||
import org.jetbrains.jet.test.InnerTestClasses;
|
||||
import org.jetbrains.jet.test.TestMetadata;
|
||||
import org.jetbrains.jet.util.slicedmap.ReadOnlySlice;
|
||||
import org.jetbrains.jet.util.slicedmap.SlicedMap;
|
||||
@@ -168,6 +169,9 @@ public class JetTestUtils {
|
||||
}
|
||||
};
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static final Class<? extends TestCase>[] NO_INNER_CLASSES = new Class[0];
|
||||
|
||||
private JetTestUtils() {
|
||||
}
|
||||
|
||||
@@ -385,19 +389,17 @@ public class JetTestUtils {
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
if (file.isDirectory()) {
|
||||
if (recursive) {
|
||||
assertAllTestsPresentByMetadata(testCaseClass, generatorClassFqName, file, extension, recursive);
|
||||
if (recursive && containsTestData(file, extension)) {
|
||||
assertTestClassPresentByMetadata(testCaseClass, generatorClassFqName, file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (file.getName().endsWith("." + extension)) {
|
||||
String relativePath = FileUtil.getRelativePath(rootFile, file);
|
||||
if (!filePaths.contains(relativePath)) {
|
||||
String generatorClassSimpleName = generatorClassFqName.substring(generatorClassFqName.lastIndexOf(".") + 1);
|
||||
Assert.fail("Test data file missing from the generated test class: " +
|
||||
file +
|
||||
"\nPlease re-run the generator: " + generatorClassFqName +
|
||||
"(" + generatorClassSimpleName + ".java:1)");
|
||||
file +
|
||||
pleaseReRunGenerator(generatorClassFqName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -405,4 +407,52 @@ public class JetTestUtils {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean containsTestData(File dir, String extension) {
|
||||
File[] files = dir.listFiles();
|
||||
assert files != null;
|
||||
for (File file : files) {
|
||||
if (file.isDirectory()) {
|
||||
if (containsTestData(file, extension)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (FileUtil.getExtension(file.getName()).equals(extension)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void assertTestClassPresentByMetadata(
|
||||
@NotNull Class<?> outerClass,
|
||||
@NotNull String generatorClassFqName,
|
||||
@NotNull File testDataDir
|
||||
) {
|
||||
InnerTestClasses innerClassesAnnotation = outerClass.getAnnotation(InnerTestClasses.class);
|
||||
Class<? extends TestCase>[] innerClasses = innerClassesAnnotation == null ? NO_INNER_CLASSES : innerClassesAnnotation.value();
|
||||
for (Class<?> innerClass : innerClasses) {
|
||||
TestMetadata testMetadata = innerClass.getAnnotation(TestMetadata.class);
|
||||
if (testMetadata != null && testMetadata.value().equals(testDataDir.getPath())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Assert.fail("Test data directory missing from the generated test class: " +
|
||||
testDataDir +
|
||||
pleaseReRunGenerator(generatorClassFqName));
|
||||
}
|
||||
|
||||
private static String pleaseReRunGenerator(String generatorClassFqName) {
|
||||
return "\nPlease re-run the generator: " + generatorClassFqName +
|
||||
getLocationFormattedForConsole(generatorClassFqName);
|
||||
}
|
||||
|
||||
private static String getLocationFormattedForConsole(String generatorClassFqName) {
|
||||
return "(" + getSimpleName(generatorClassFqName) + ".java:1)";
|
||||
}
|
||||
|
||||
private static String getSimpleName(String generatorClassFqName) {
|
||||
return generatorClassFqName.substring(generatorClassFqName.lastIndexOf(".") + 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user