Test generator: allow to exclude certain test data directories

This commit is contained in:
Alexander Udalov
2014-08-25 16:21:55 +04:00
parent 0bd5264b5e
commit 17c21dcaa2
3 changed files with 140 additions and 144 deletions
@@ -731,7 +731,8 @@ public class JetTestUtils {
@NotNull Class<?> testCaseClass, @NotNull Class<?> testCaseClass,
@NotNull File testDataDir, @NotNull File testDataDir,
@NotNull Pattern filenamePattern, @NotNull Pattern filenamePattern,
boolean recursive boolean recursive,
@NotNull String... excludeDirs
) { ) {
TestMetadata testClassMetadata = testCaseClass.getAnnotation(TestMetadata.class); TestMetadata testClassMetadata = testCaseClass.getAnnotation(TestMetadata.class);
Assert.assertNotNull("No metadata for class: " + testCaseClass, testClassMetadata); Assert.assertNotNull("No metadata for class: " + testCaseClass, testClassMetadata);
@@ -739,12 +740,13 @@ public class JetTestUtils {
File rootFile = new File(rootPath); File rootFile = new File(rootPath);
Set<String> filePaths = collectPathsMetadata(testCaseClass); Set<String> filePaths = collectPathsMetadata(testCaseClass);
Set<String> exclude = KotlinPackage.setOf(excludeDirs);
File[] files = testDataDir.listFiles(); File[] files = testDataDir.listFiles();
if (files != null) { if (files != null) {
for (File file : files) { for (File file : files) {
if (file.isDirectory()) { if (file.isDirectory()) {
if (recursive && containsTestData(file, filenamePattern)) { if (recursive && containsTestData(file, filenamePattern) && !exclude.contains(file.getName())) {
assertTestClassPresentByMetadata(testCaseClass, file); assertTestClassPresentByMetadata(testCaseClass, file);
} }
} }
@@ -16,139 +16,105 @@
package org.jetbrains.kotlin.generators.tests package org.jetbrains.kotlin.generators.tests
import org.jetbrains.kotlin.generators.tests.generator.TestGenerator
import org.jetbrains.kotlin.generators.tests.generator.TestGenerator.TargetBackend
import java.util.ArrayList
import org.jetbrains.kotlin.generators.tests.generator.SimpleTestClassModel
import java.io.File
import java.util.regex.Pattern
import junit.framework.TestCase import junit.framework.TestCase
import org.jetbrains.kotlin.checkers.AbstractJetDiagnosticsTest import org.jetbrains.kotlin.addImport.AbstractAddImportTest
import org.jetbrains.kotlin.resolve.AbstractResolveTest import org.jetbrains.kotlin.android.*
import org.jetbrains.kotlin.parsing.AbstractJetParsingTest
import org.jetbrains.kotlin.codegen.generated.AbstractBlackBoxCodegenTest
import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
import org.jetbrains.kotlin.codegen.AbstractTopLevelMembersInvocationTest
import org.jetbrains.kotlin.codegen.AbstractCheckLocalVariablesTableTest
import org.jetbrains.kotlin.codegen.flags.AbstractWriteFlagsTest
import org.jetbrains.kotlin.codegen.defaultConstructor.AbstractDefaultArgumentsReflectionTest
import org.jetbrains.kotlin.jvm.compiler.AbstractLoadJavaTest
import org.jetbrains.kotlin.jvm.compiler.AbstractCompileJavaAgainstKotlinTest
import org.jetbrains.kotlin.jvm.compiler.AbstractCompileKotlinAgainstKotlinTest
import org.jetbrains.kotlin.modules.xml.AbstractModuleXmlParserTest
import org.jetbrains.kotlin.jvm.compiler.AbstractWriteSignatureTest
import org.jetbrains.kotlin.cli.AbstractKotlincExecutableTest
import org.jetbrains.kotlin.repl.AbstractReplInterpreterTest
import org.jetbrains.kotlin.cfg.AbstractControlFlowTest
import org.jetbrains.kotlin.checkers.AbstractJetPsiCheckerTest
import org.jetbrains.kotlin.checkers.AbstractJetJsCheckerTest
import org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest
import org.jetbrains.kotlin.completion.AbstractJSBasicCompletionTest
import org.jetbrains.kotlin.completion.AbstractKeywordCompletionTest
import org.jetbrains.kotlin.completion.AbstractJvmSmartCompletionTest
import org.jetbrains.kotlin.completion.AbstractJvmBasicCompletionTest
import org.jetbrains.kotlin.completion.AbstractJvmWithLibBasicCompletionTest
import org.jetbrains.kotlin.idea.navigation.AbstractGotoSuperTest
import org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixMultiFileTest
import org.jetbrains.kotlin.idea.folding.AbstractKotlinFoldingTest
import org.jetbrains.kotlin.idea.codeInsight.surroundWith.AbstractSurroundWithTest
import org.jetbrains.kotlin.idea.intentions.AbstractIntentionTest
import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest
import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyTest
import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractCodeMoverTest
import org.jetbrains.kotlin.idea.refactoring.inline.AbstractInlineTest
import org.jetbrains.kotlin.idea.codeInsight.unwrap.AbstractUnwrapRemoveTest
import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractJetQuickDocProviderTest
import org.jetbrains.kotlin.safeDelete.AbstractJetSafeDeleteTest
import org.jetbrains.kotlin.idea.resolve.AbstractReferenceResolveTest
import org.jetbrains.kotlin.idea.resolve.AbstractReferenceResolveWithLibTest
import org.jetbrains.kotlin.findUsages.AbstractJetFindUsagesTest
import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest
import org.jetbrains.kotlin.formatter.AbstractJetFormatterTest
import org.jetbrains.kotlin.idea.codeInsight.AbstractOutOfBlockModificationTest
import org.jetbrains.kotlin.completion.AbstractDataFlowValueRenderingTest
import org.jetbrains.kotlin.resolve.annotation.AbstractAnnotationParameterTest
import org.jetbrains.kotlin.resolve.constants.evaluate.AbstractEvaluateExpressionTest
import org.jetbrains.kotlin.resolve.calls.AbstractResolvedCallsTest
import org.jetbrains.kotlin.idea.refactoring.rename.AbstractRenameTest
import org.jetbrains.kotlin.generators.tests.generator.SingleClassTestModel
import org.jetbrains.kotlin.generators.tests.generator.TestClassModel
import org.jetbrains.kotlin.idea.conversion.copy.AbstractJavaToKotlinCopyPasteConversionTest
import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest
import org.jetbrains.kotlin.completion.handlers.AbstractSmartCompletionHandlerTest
import org.jetbrains.kotlin.generators.tests.generator.TestGeneratorUtil
import org.jetbrains.kotlin.idea.resolve.AbstractAdditionalResolveDescriptorRendererTest
import org.jetbrains.kotlin.idea.resolve.AbstractReferenceResolveInLibrarySourcesTest
import org.jetbrains.kotlin.resolve.constraintSystem.AbstractConstraintSystemTest
import org.jetbrains.kotlin.completion.AbstractCompiledKotlinInJavaCompletionTest
import org.jetbrains.kotlin.completion.AbstractKotlinSourceInJavaCompletionTest
import org.jetbrains.kotlin.checkers.AbstractJetDiagnosticsTestWithStdLib
import org.jetbrains.kotlin.idea.codeInsight.AbstractInsertImportOnPasteTest
import org.jetbrains.kotlin.idea.codeInsight.AbstractLineMarkersTest
import org.jetbrains.kotlin.idea.resolve.AbstractReferenceToJavaWithWrongFileStructureTest
import org.jetbrains.kotlin.idea.navigation.AbstractKotlinGotoTest
import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest
import org.jetbrains.kotlin.idea.refactoring.move.AbstractJetMoveTest
import org.jetbrains.kotlin.cfg.AbstractDataFlowTest
import org.jetbrains.kotlin.idea.imports.AbstractOptimizeImportsTest
import org.jetbrains.kotlin.idea.debugger.AbstractSmartStepIntoTest
import org.jetbrains.kotlin.idea.stubs.AbstractStubBuilderTest
import org.jetbrains.kotlin.idea.codeInsight.AbstractJetInspectionTest
import org.jetbrains.kotlin.idea.debugger.AbstractKotlinSteppingTest
import org.jetbrains.kotlin.idea.debugger.AbstractJetPositionManagerTest
import org.jetbrains.kotlin.completion.AbstractMultiFileJvmBasicCompletionTest
import org.jetbrains.kotlin.idea.refactoring.introduce.AbstractJetExtractionTest
import org.jetbrains.kotlin.formatter.AbstractJetTypingIndentationTestBase
import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractKotlinEvaluateExpressionTest
import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractSelectExpressionForDebuggerTest
import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractCodeFragmentCompletionTest
import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractCodeFragmentHighlightingTest
import org.jetbrains.kotlin.idea.stubs.AbstractResolveByStubTest
import org.jetbrains.kotlin.idea.stubs.AbstractMultiFileHighlightingTest
import org.jetbrains.kotlin.cfg.AbstractPseudoValueTest
import org.jetbrains.kotlin.idea.structureView.AbstractKotlinFileStructureTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterSingleFileTest
import org.jetbrains.kotlin.jps.build.AbstractIncrementalJpsTest
import org.jetbrains.kotlin.asJava.AbstractKotlinLightClassTest import org.jetbrains.kotlin.asJava.AbstractKotlinLightClassTest
import org.jetbrains.kotlin.load.java.AbstractJavaTypeSubstitutorTest import org.jetbrains.kotlin.cfg.AbstractControlFlowTest
import org.jetbrains.kotlin.idea.intentions.declarations.AbstractJoinLinesTest import org.jetbrains.kotlin.cfg.AbstractDataFlowTest
import org.jetbrains.kotlin.codegen.AbstractScriptCodegenTest import org.jetbrains.kotlin.cfg.AbstractPseudoValueTest
import org.jetbrains.kotlin.idea.parameterInfo.AbstractFunctionParameterInfoTest import org.jetbrains.kotlin.checkers.*
import org.jetbrains.kotlin.psi.patternMatching.AbstractJetPsiUnifierTest import org.jetbrains.kotlin.cli.AbstractKotlincExecutableTest
import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.defaultConstructor.AbstractDefaultArgumentsReflectionTest
import org.jetbrains.kotlin.codegen.flags.AbstractWriteFlagsTest
import org.jetbrains.kotlin.codegen.generated.AbstractBlackBoxCodegenTest
import org.jetbrains.kotlin.completion.*
import org.jetbrains.kotlin.completion.handlers.AbstractBasicCompletionHandlerTest
import org.jetbrains.kotlin.completion.handlers.AbstractCompletionCharFilterTest
import org.jetbrains.kotlin.completion.handlers.AbstractKeywordCompletionHandlerTest
import org.jetbrains.kotlin.completion.handlers.AbstractSmartCompletionHandlerTest
import org.jetbrains.kotlin.completion.weighers.AbstractBasicCompletionWeigherTest import org.jetbrains.kotlin.completion.weighers.AbstractBasicCompletionWeigherTest
import org.jetbrains.kotlin.completion.weighers.AbstractSmartCompletionWeigherTest import org.jetbrains.kotlin.completion.weighers.AbstractSmartCompletionWeigherTest
import org.jetbrains.kotlin.findUsages.AbstractJetFindUsagesTest
import org.jetbrains.kotlin.formatter.AbstractJetFormatterTest
import org.jetbrains.kotlin.formatter.AbstractJetTypingIndentationTestBase
import org.jetbrains.kotlin.generators.tests.generator.*
import org.jetbrains.kotlin.generators.tests.generator.TestGenerator.TargetBackend
import org.jetbrains.kotlin.generators.tests.reservedWords.generateTestDataForReservedWords import org.jetbrains.kotlin.generators.tests.reservedWords.generateTestDataForReservedWords
import org.jetbrains.kotlin.idea.resolve.AbstractReferenceResolveInJavaTest import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterMultiFileTest import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterForWebDemoTest import org.jetbrains.kotlin.idea.codeInsight.AbstractInsertImportOnPasteTest
import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractDecompiledTextTest import org.jetbrains.kotlin.idea.codeInsight.AbstractJetInspectionTest
import org.jetbrains.kotlin.completion.AbstractMultiFileSmartCompletionTest import org.jetbrains.kotlin.idea.codeInsight.AbstractLineMarkersTest
import org.jetbrains.kotlin.completion.handlers.AbstractCompletionCharFilterTest import org.jetbrains.kotlin.idea.codeInsight.AbstractOutOfBlockModificationTest
import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractCodeMoverTest
import org.jetbrains.kotlin.idea.resolve.AbstractPartialBodyResolveTest import org.jetbrains.kotlin.idea.codeInsight.surroundWith.AbstractSurroundWithTest
import org.jetbrains.kotlin.checkers.AbstractJetDiagnosticsTestWithJsStdLib import org.jetbrains.kotlin.idea.codeInsight.unwrap.AbstractUnwrapRemoveTest
import org.jetbrains.kotlin.renderer.AbstractDescriptorRendererTest import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest
import org.jetbrains.kotlin.types.AbstractJetTypeBindingTest import org.jetbrains.kotlin.idea.conversion.copy.AbstractJavaToKotlinCopyPasteConversionTest
import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractCodeFragmentCompletionHandlerTest
import org.jetbrains.kotlin.idea.coverage.AbstractKotlinCoverageOutputFilesTest import org.jetbrains.kotlin.idea.coverage.AbstractKotlinCoverageOutputFilesTest
import org.jetbrains.kotlin.completion.handlers.AbstractBasicCompletionHandlerTest import org.jetbrains.kotlin.idea.debugger.AbstractJetPositionManagerTest
import org.jetbrains.kotlin.idea.debugger.AbstractKotlinSteppingTest
import org.jetbrains.kotlin.idea.debugger.AbstractSmartStepIntoTest
import org.jetbrains.kotlin.idea.debugger.evaluate.*
import org.jetbrains.kotlin.idea.decompiler.stubBuilder.AbstractClsStubBuilderTest import org.jetbrains.kotlin.idea.decompiler.stubBuilder.AbstractClsStubBuilderTest
import org.jetbrains.kotlin.codegen.AbstractLineNumberTest import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractDecompiledTextTest
import org.jetbrains.kotlin.completion.handlers.AbstractKeywordCompletionHandlerTest import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractJetQuickDocProviderTest
import org.jetbrains.kotlin.idea.folding.AbstractKotlinFoldingTest
import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyTest
import org.jetbrains.kotlin.idea.highlighter.AbstractDiagnosticMessageJsTest
import org.jetbrains.kotlin.idea.highlighter.AbstractDiagnosticMessageTest
import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightingTest
import org.jetbrains.kotlin.idea.imports.AbstractOptimizeImportsTest
import org.jetbrains.kotlin.idea.intentions.AbstractIntentionTest
import org.jetbrains.kotlin.idea.intentions.declarations.AbstractJoinLinesTest
import org.jetbrains.kotlin.idea.kdoc.AbstractKDocHighlightingTest import org.jetbrains.kotlin.idea.kdoc.AbstractKDocHighlightingTest
import org.jetbrains.kotlin.addImport.AbstractAddImportTest import org.jetbrains.kotlin.idea.navigation.AbstractGotoSuperTest
import org.jetbrains.kotlin.idea.highlighter.* import org.jetbrains.kotlin.idea.navigation.AbstractKotlinGotoTest
import org.jetbrains.kotlin.android.AbstractAndroidCompletionTest import org.jetbrains.kotlin.idea.parameterInfo.AbstractFunctionParameterInfoTest
import org.jetbrains.kotlin.android.AbstractAndroidGotoTest import org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixMultiFileTest
import org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest
import org.jetbrains.kotlin.idea.refactoring.inline.AbstractInlineTest
import org.jetbrains.kotlin.idea.refactoring.introduce.AbstractJetExtractionTest
import org.jetbrains.kotlin.idea.refactoring.move.AbstractJetMoveTest
import org.jetbrains.kotlin.idea.refactoring.rename.AbstractRenameTest
import org.jetbrains.kotlin.idea.resolve.*
import org.jetbrains.kotlin.idea.structureView.AbstractKotlinFileStructureTest
import org.jetbrains.kotlin.idea.stubs.AbstractMultiFileHighlightingTest
import org.jetbrains.kotlin.idea.stubs.AbstractResolveByStubTest
import org.jetbrains.kotlin.idea.stubs.AbstractStubBuilderTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterForWebDemoTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterMultiFileTest
import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterSingleFileTest
import org.jetbrains.kotlin.jps.build.AbstractIncrementalJpsTest
import org.jetbrains.kotlin.jps.build.android.AbstractAndroidJpsTestCase import org.jetbrains.kotlin.jps.build.android.AbstractAndroidJpsTestCase
import org.jetbrains.kotlin.android.AbstractAndroidRenameTest import org.jetbrains.kotlin.js.test.semantics.*
import org.jetbrains.kotlin.android.AbstractAndroidFindUsagesTest import org.jetbrains.kotlin.jvm.compiler.AbstractCompileJavaAgainstKotlinTest
import org.jetbrains.kotlin.jvm.compiler.AbstractCompileKotlinAgainstKotlinTest
import org.jetbrains.kotlin.jvm.compiler.AbstractLoadJavaTest
import org.jetbrains.kotlin.jvm.compiler.AbstractWriteSignatureTest
import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidBoxTest
import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidBytecodeShapeTest import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidBytecodeShapeTest
import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidXml2KConversionTest import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidXml2KConversionTest
import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidBoxTest import org.jetbrains.kotlin.load.java.AbstractJavaTypeSubstitutorTest
import org.jetbrains.kotlin.android.AbstractParserResultEqualityTest import org.jetbrains.kotlin.modules.xml.AbstractModuleXmlParserTest
import org.jetbrains.kotlin.js.test.* import org.jetbrains.kotlin.parsing.AbstractJetParsingTest
import org.jetbrains.kotlin.js.test.semantics.* import org.jetbrains.kotlin.psi.patternMatching.AbstractJetPsiUnifierTest
import org.jetbrains.kotlin.renderer.AbstractDescriptorRendererTest
import org.jetbrains.kotlin.repl.AbstractReplInterpreterTest
import org.jetbrains.kotlin.resolve.AbstractResolveTest
import org.jetbrains.kotlin.resolve.annotation.AbstractAnnotationParameterTest
import org.jetbrains.kotlin.resolve.calls.AbstractResolvedCallsTest
import org.jetbrains.kotlin.resolve.constants.evaluate.AbstractEvaluateExpressionTest
import org.jetbrains.kotlin.resolve.constraintSystem.AbstractConstraintSystemTest
import org.jetbrains.kotlin.safeDelete.AbstractJetSafeDeleteTest
import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest
import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest
import org.jetbrains.kotlin.types.AbstractJetTypeBindingTest
import java.io.File
import java.util.ArrayList
import java.util.regex.Pattern
fun main(args: Array<String>) { fun main(args: Array<String>) {
System.setProperty("java.awt.headless", "true") System.setProperty("java.awt.headless", "true")
@@ -862,15 +828,23 @@ private class TestGroup(val testsRoot: String, val testDataRoot: String) {
testMethod: String = "doTest", testMethod: String = "doTest",
singleClass: Boolean = false, singleClass: Boolean = false,
testClassName: String? = null, testClassName: String? = null,
targetBackend: TargetBackend = TargetBackend.ANY targetBackend: TargetBackend = TargetBackend.ANY,
excludeDirs: List<String> = listOf()
) { ) {
val rootFile = File(testDataRoot + "/" + relativeRootPath) val rootFile = File(testDataRoot + "/" + relativeRootPath)
val compiledPattern = Pattern.compile(pattern) val compiledPattern = Pattern.compile(pattern)
val className = testClassName ?: TestGeneratorUtil.fileNameToJavaIdentifier(rootFile) val className = testClassName ?: TestGeneratorUtil.fileNameToJavaIdentifier(rootFile)
testModels.add(if (singleClass) testModels.add(
SingleClassTestModel(rootFile, compiledPattern, testMethod, className, targetBackend) if (singleClass) {
else if (excludeDirs.isNotEmpty()) error("excludeDirs is unsupported for SingleClassTestModel yet")
SimpleTestClassModel(rootFile, recursive, excludeParentDirs, compiledPattern, testMethod, className, targetBackend)) SingleClassTestModel(rootFile, compiledPattern, testMethod, className, targetBackend)
}
else {
SimpleTestClassModel(
rootFile, recursive, excludeParentDirs, compiledPattern, testMethod, className, targetBackend, excludeDirs
)
}
)
} }
} }
@@ -26,10 +26,7 @@ import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.kotlin.utils.Printer; import org.jetbrains.kotlin.utils.Printer;
import java.io.File; import java.io.File;
import java.util.Collection; import java.util.*;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.jetbrains.kotlin.generators.tests.generator.TestGenerator.TargetBackend; import static org.jetbrains.kotlin.generators.tests.generator.TestGenerator.TargetBackend;
@@ -53,6 +50,8 @@ public class SimpleTestClassModel implements TestClassModel {
private final String testClassName; private final String testClassName;
@NotNull @NotNull
private final TargetBackend targetBackend; private final TargetBackend targetBackend;
@NotNull
private final Set<String> excludeDirs;
@Nullable @Nullable
private Collection<TestClassModel> innerTestClasses; private Collection<TestClassModel> innerTestClasses;
@Nullable @Nullable
@@ -65,7 +64,8 @@ public class SimpleTestClassModel implements TestClassModel {
@NotNull Pattern filenamePattern, @NotNull Pattern filenamePattern,
@NotNull String doTestMethodName, @NotNull String doTestMethodName,
@NotNull String testClassName, @NotNull String testClassName,
@NotNull TargetBackend targetBackend @NotNull TargetBackend targetBackend,
@NotNull Collection<String> excludeDirs
) { ) {
this.rootFile = rootFile; this.rootFile = rootFile;
this.recursive = recursive; this.recursive = recursive;
@@ -74,6 +74,7 @@ public class SimpleTestClassModel implements TestClassModel {
this.doTestMethodName = doTestMethodName; this.doTestMethodName = doTestMethodName;
this.testClassName = testClassName; this.testClassName = testClassName;
this.targetBackend = targetBackend; this.targetBackend = targetBackend;
this.excludeDirs = excludeDirs.isEmpty() ? Collections.<String>emptySet() : new LinkedHashSet<String>(excludeDirs);
} }
@NotNull @NotNull
@@ -88,12 +89,10 @@ public class SimpleTestClassModel implements TestClassModel {
File[] files = rootFile.listFiles(); File[] files = rootFile.listFiles();
if (files != null) { if (files != null) {
for (File file : files) { for (File file : files) {
if (file.isDirectory()) { if (file.isDirectory() && dirHasFilesInside(file) && !excludeDirs.contains(file.getName())) {
if (dirHasFilesInside(file)) { String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file);
String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file); children.add(new SimpleTestClassModel(file, true, excludeParentDirs, filenamePattern, doTestMethodName,
children.add(new SimpleTestClassModel(file, true, excludeParentDirs, filenamePattern, doTestMethodName, innerTestClassName, innerTestClassName, targetBackend, excludesStripOneDirectory(file.getName())));
targetBackend));
}
} }
} }
} }
@@ -103,6 +102,21 @@ public class SimpleTestClassModel implements TestClassModel {
return innerTestClasses; return innerTestClasses;
} }
@NotNull
private Set<String> excludesStripOneDirectory(@NotNull String directoryName) {
if (excludeDirs.isEmpty()) return excludeDirs;
Set<String> result = new LinkedHashSet<String>();
for (String excludeDir : excludeDirs) {
int firstSlash = excludeDir.indexOf('/');
if (firstSlash >= 0 && excludeDir.substring(0, firstSlash).equals(directoryName)) {
result.add(excludeDir.substring(firstSlash + 1));
}
}
return result;
}
private static boolean dirHasFilesInside(@NotNull File dir) { private static boolean dirHasFilesInside(@NotNull File dir) {
return !FileUtil.processFilesRecursively(dir, new Processor<File>() { return !FileUtil.processFilesRecursively(dir, new Processor<File>() {
@Override @Override
@@ -181,7 +195,6 @@ public class SimpleTestClassModel implements TestClassModel {
} }
private class TestAllFilesPresentMethodModel implements TestMethodModel { private class TestAllFilesPresentMethodModel implements TestMethodModel {
@Override @Override
public String getName() { public String getName() {
return "testAllFilesPresentIn" + testClassName; return "testAllFilesPresentIn" + testClassName;
@@ -189,9 +202,16 @@ public class SimpleTestClassModel implements TestClassModel {
@Override @Override
public void generateBody(@NotNull Printer p) { public void generateBody(@NotNull Printer p) {
String assertTestsPresentStr = StringBuilder exclude = new StringBuilder();
String.format("JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s);", for (String dir : excludeDirs) {
JetTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()), recursive); exclude.append(", \"");
exclude.append(StringUtil.escapeStringCharacters(dir));
exclude.append("\"");
}
String assertTestsPresentStr = String.format(
"JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s%s);",
JetTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()), recursive, exclude
);
p.println(assertTestsPresentStr); p.println(assertTestsPresentStr);
} }