[TEST] Add ability to exclude some testdata with pattern in test generator

This commit is contained in:
Dmitriy Novozhilov
2019-12-11 15:32:58 +03:00
parent ae15fa7676
commit 5b1f96ba1b
4 changed files with 93 additions and 22 deletions
@@ -29,6 +29,8 @@ public class SimpleTestClassModel extends TestClassModel {
@NotNull
private final Pattern filenamePattern;
@Nullable
private final Pattern excludePattern;
@Nullable
private final Boolean checkFilenameStartsLowerCase;
@NotNull
private final String doTestMethodName;
@@ -56,6 +58,7 @@ public class SimpleTestClassModel extends TestClassModel {
boolean recursive,
boolean excludeParentDirs,
@NotNull Pattern filenamePattern,
@Nullable Pattern excludedPattern,
@Nullable Boolean checkFilenameStartsLowerCase,
@NotNull String doTestMethodName,
@NotNull String testClassName,
@@ -71,6 +74,7 @@ public class SimpleTestClassModel extends TestClassModel {
this.recursive = recursive;
this.excludeParentDirs = excludeParentDirs;
this.filenamePattern = filenamePattern;
this.excludePattern = excludedPattern;
this.doTestMethodName = doTestMethodName;
this.testClassName = testClassName;
this.targetBackend = targetBackend;
@@ -98,7 +102,7 @@ public class SimpleTestClassModel extends TestClassModel {
if (file.isDirectory() && dirHasFilesInside(file) && !excludeDirs.contains(file.getName())) {
String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file);
children.add(new SimpleTestClassModel(
file, true, excludeParentDirs, filenamePattern, checkFilenameStartsLowerCase,
file, true, excludeParentDirs, filenamePattern, excludePattern, checkFilenameStartsLowerCase,
doTestMethodName, innerTestClassName, targetBackend, excludesStripOneDirectory(file.getName()),
skipIgnored, testRunnerMethodName, additionalRunnerArguments, deep != null ? deep - 1 : null, annotations)
);
@@ -173,7 +177,8 @@ public class SimpleTestClassModel extends TestClassModel {
if (listFiles != null && (deep == null || deep == 0)) {
for (File file : listFiles) {
if (filenamePattern.matcher(file.getName()).matches()) {
boolean excluded = excludePattern != null && excludePattern.matcher(file.getName()).matches();
if (filenamePattern.matcher(file.getName()).matches() && !excluded) {
if (file.isDirectory() && excludeParentDirs && dirHasSubDirs(file)) {
continue;
@@ -252,19 +257,25 @@ public class SimpleTestClassModel extends TestClassModel {
exclude.append("\"");
}
String excludedArgument;
if (excludePattern != null) {
excludedArgument = String.format("Pattern.compile(\"%s\")", StringUtil.escapeStringCharacters(excludePattern.pattern()));
} else {
excludedArgument = null;
}
String assertTestsPresentStr;
if (targetBackend == TargetBackend.ANY) {
assertTestsPresentStr = String.format(
"KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s%s);",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()),
recursive, exclude
"KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s, %s%s);",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()), excludedArgument, recursive, exclude
);
} else {
assertTestsPresentStr = String.format(
"KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s.%s, %s%s);",
"KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s, %s.%s, %s%s);",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()),
TargetBackend.class.getSimpleName(), targetBackend.toString(), recursive, exclude
excludedArgument, TargetBackend.class.getSimpleName(), targetBackend.toString(), recursive, exclude
);
}
@@ -39,6 +39,8 @@ public class SingleClassTestModel extends TestClassModel {
@NotNull
private final Pattern filenamePattern;
@Nullable
private final Pattern excludePattern;
@Nullable
private final Boolean checkFilenameStartsLowerCase;
@NotNull
private final String doTestMethodName;
@@ -59,6 +61,7 @@ public class SingleClassTestModel extends TestClassModel {
public SingleClassTestModel(
@NotNull File rootFile,
@NotNull Pattern filenamePattern,
@Nullable Pattern excludePattern,
@Nullable Boolean checkFilenameStartsLowerCase,
@NotNull String doTestMethodName,
@NotNull String testClassName,
@@ -70,6 +73,7 @@ public class SingleClassTestModel extends TestClassModel {
) {
this.rootFile = rootFile;
this.filenamePattern = filenamePattern;
this.excludePattern = excludePattern;
this.checkFilenameStartsLowerCase = checkFilenameStartsLowerCase;
this.doTestMethodName = doTestMethodName;
this.testClassName = testClassName;
@@ -157,16 +161,23 @@ public class SingleClassTestModel extends TestClassModel {
public void generateBody(@NotNull Printer p) {
String assertTestsPresentStr;
String excludedArgument;
if (excludePattern != null) {
excludedArgument = String.format("Pattern.compile(\"%s\")", StringUtil.escapeStringCharacters(excludePattern.pattern()));
} else {
excludedArgument = null;
}
if (targetBackend != TargetBackend.ANY) {
assertTestsPresentStr = String.format(
"KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s.%s);",
"KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClassWithExcluded(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s, %s.%s);",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()),
TargetBackend.class.getSimpleName(), targetBackend.toString()
excludedArgument, TargetBackend.class.getSimpleName(), targetBackend.toString()
);
} else {
assertTestsPresentStr = String.format(
"KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"));",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern())
"KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClassWithExcluded(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s);",
KotlinTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()), excludedArgument
);
}
p.println(assertTestsPresentStr);
@@ -52,6 +52,7 @@ class TestGroup(
excludeParentDirs: Boolean = false,
extension: String? = "kt", // null string means dir (name without dot)
pattern: String = if (extension == null) """^([^\.]+)$""" else "^(.+)\\.$extension\$",
excludedPattern: String? = null,
testMethod: String = "doTest",
singleClass: Boolean = false,
testClassName: String? = null,
@@ -63,18 +64,19 @@ class TestGroup(
) {
val rootFile = File("$testDataRoot/$relativeRootPath")
val compiledPattern = Pattern.compile(pattern)
val compiledExcludedPattern = excludedPattern?.let { Pattern.compile(it) }
val className = testClassName ?: TestGeneratorUtil.fileNameToJavaIdentifier(rootFile)
testModels.add(
if (singleClass) {
if (excludeDirs.isNotEmpty()) error("excludeDirs is unsupported for SingleClassTestModel yet")
SingleClassTestModel(
rootFile, compiledPattern, filenameStartsLowerCase, testMethod, className, targetBackend,
skipIgnored, testRunnerMethodName, additionalRunnerArguments, annotations
rootFile, compiledPattern, compiledExcludedPattern, filenameStartsLowerCase, testMethod, className,
targetBackend, skipIgnored, testRunnerMethodName, additionalRunnerArguments, annotations
)
} else {
SimpleTestClassModel(
rootFile, recursive, excludeParentDirs,
compiledPattern, filenameStartsLowerCase, testMethod, className,
compiledPattern, compiledExcludedPattern, filenameStartsLowerCase, testMethod, className,
targetBackend, excludeDirs, skipIgnored, testRunnerMethodName, additionalRunnerArguments, deep, annotations
)
}