diff --git a/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java b/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java index 964dc5fdb0a..a9336371405 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/kotlin/test/JetTestUtils.java @@ -731,7 +731,8 @@ public class JetTestUtils { @NotNull Class testCaseClass, @NotNull File testDataDir, @NotNull Pattern filenamePattern, - boolean recursive + boolean recursive, + @NotNull String... excludeDirs ) { TestMetadata testClassMetadata = testCaseClass.getAnnotation(TestMetadata.class); Assert.assertNotNull("No metadata for class: " + testCaseClass, testClassMetadata); @@ -739,12 +740,13 @@ public class JetTestUtils { File rootFile = new File(rootPath); Set filePaths = collectPathsMetadata(testCaseClass); + Set exclude = KotlinPackage.setOf(excludeDirs); File[] files = testDataDir.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { - if (recursive && containsTestData(file, filenamePattern)) { + if (recursive && containsTestData(file, filenamePattern) && !exclude.contains(file.getName())) { assertTestClassPresentByMetadata(testCaseClass, file); } } diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 2e25a389fd0..a48f9264021 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -16,139 +16,105 @@ 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 org.jetbrains.kotlin.checkers.AbstractJetDiagnosticsTest -import org.jetbrains.kotlin.resolve.AbstractResolveTest -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.addImport.AbstractAddImportTest +import org.jetbrains.kotlin.android.* import org.jetbrains.kotlin.asJava.AbstractKotlinLightClassTest -import org.jetbrains.kotlin.load.java.AbstractJavaTypeSubstitutorTest -import org.jetbrains.kotlin.idea.intentions.declarations.AbstractJoinLinesTest -import org.jetbrains.kotlin.codegen.AbstractScriptCodegenTest -import org.jetbrains.kotlin.idea.parameterInfo.AbstractFunctionParameterInfoTest -import org.jetbrains.kotlin.psi.patternMatching.AbstractJetPsiUnifierTest +import org.jetbrains.kotlin.cfg.AbstractControlFlowTest +import org.jetbrains.kotlin.cfg.AbstractDataFlowTest +import org.jetbrains.kotlin.cfg.AbstractPseudoValueTest +import org.jetbrains.kotlin.checkers.* +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.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.idea.resolve.AbstractReferenceResolveInJavaTest -import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterMultiFileTest -import org.jetbrains.kotlin.j2k.AbstractJavaToKotlinConverterForWebDemoTest -import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractDecompiledTextTest -import org.jetbrains.kotlin.completion.AbstractMultiFileSmartCompletionTest -import org.jetbrains.kotlin.completion.handlers.AbstractCompletionCharFilterTest -import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest -import org.jetbrains.kotlin.idea.resolve.AbstractPartialBodyResolveTest -import org.jetbrains.kotlin.checkers.AbstractJetDiagnosticsTestWithJsStdLib -import org.jetbrains.kotlin.renderer.AbstractDescriptorRendererTest -import org.jetbrains.kotlin.types.AbstractJetTypeBindingTest -import org.jetbrains.kotlin.idea.debugger.evaluate.AbstractCodeFragmentCompletionHandlerTest +import org.jetbrains.kotlin.idea.AbstractExpressionSelectionTest +import org.jetbrains.kotlin.idea.AbstractSmartSelectionTest +import org.jetbrains.kotlin.idea.codeInsight.AbstractInsertImportOnPasteTest +import org.jetbrains.kotlin.idea.codeInsight.AbstractJetInspectionTest +import org.jetbrains.kotlin.idea.codeInsight.AbstractLineMarkersTest +import org.jetbrains.kotlin.idea.codeInsight.AbstractOutOfBlockModificationTest +import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractCodeMoverTest +import org.jetbrains.kotlin.idea.codeInsight.surroundWith.AbstractSurroundWithTest +import org.jetbrains.kotlin.idea.codeInsight.unwrap.AbstractUnwrapRemoveTest +import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest +import org.jetbrains.kotlin.idea.conversion.copy.AbstractJavaToKotlinCopyPasteConversionTest 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.codegen.AbstractLineNumberTest -import org.jetbrains.kotlin.completion.handlers.AbstractKeywordCompletionHandlerTest +import org.jetbrains.kotlin.idea.decompiler.textBuilder.AbstractDecompiledTextTest +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.addImport.AbstractAddImportTest -import org.jetbrains.kotlin.idea.highlighter.* -import org.jetbrains.kotlin.android.AbstractAndroidCompletionTest -import org.jetbrains.kotlin.android.AbstractAndroidGotoTest +import org.jetbrains.kotlin.idea.navigation.AbstractGotoSuperTest +import org.jetbrains.kotlin.idea.navigation.AbstractKotlinGotoTest +import org.jetbrains.kotlin.idea.parameterInfo.AbstractFunctionParameterInfoTest +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.android.AbstractAndroidRenameTest -import org.jetbrains.kotlin.android.AbstractAndroidFindUsagesTest +import org.jetbrains.kotlin.js.test.semantics.* +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.AbstractAndroidXml2KConversionTest -import org.jetbrains.kotlin.lang.resolve.android.test.AbstractAndroidBoxTest -import org.jetbrains.kotlin.android.AbstractParserResultEqualityTest -import org.jetbrains.kotlin.js.test.* -import org.jetbrains.kotlin.js.test.semantics.* +import org.jetbrains.kotlin.load.java.AbstractJavaTypeSubstitutorTest +import org.jetbrains.kotlin.modules.xml.AbstractModuleXmlParserTest +import org.jetbrains.kotlin.parsing.AbstractJetParsingTest +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) { System.setProperty("java.awt.headless", "true") @@ -862,15 +828,23 @@ private class TestGroup(val testsRoot: String, val testDataRoot: String) { testMethod: String = "doTest", singleClass: Boolean = false, testClassName: String? = null, - targetBackend: TargetBackend = TargetBackend.ANY + targetBackend: TargetBackend = TargetBackend.ANY, + excludeDirs: List = listOf() ) { val rootFile = File(testDataRoot + "/" + relativeRootPath) val compiledPattern = Pattern.compile(pattern) val className = testClassName ?: TestGeneratorUtil.fileNameToJavaIdentifier(rootFile) - testModels.add(if (singleClass) - SingleClassTestModel(rootFile, compiledPattern, testMethod, className, targetBackend) - else - SimpleTestClassModel(rootFile, recursive, excludeParentDirs, compiledPattern, testMethod, className, targetBackend)) + testModels.add( + if (singleClass) { + if (excludeDirs.isNotEmpty()) error("excludeDirs is unsupported for SingleClassTestModel yet") + SingleClassTestModel(rootFile, compiledPattern, testMethod, className, targetBackend) + } + else { + SimpleTestClassModel( + rootFile, recursive, excludeParentDirs, compiledPattern, testMethod, className, targetBackend, excludeDirs + ) + } + ) } } diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/generator/SimpleTestClassModel.java b/generators/src/org/jetbrains/kotlin/generators/tests/generator/SimpleTestClassModel.java index a477bb3a353..6696d563296 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/generator/SimpleTestClassModel.java +++ b/generators/src/org/jetbrains/kotlin/generators/tests/generator/SimpleTestClassModel.java @@ -26,10 +26,7 @@ import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.utils.Printer; import java.io.File; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.util.*; import java.util.regex.Pattern; import static org.jetbrains.kotlin.generators.tests.generator.TestGenerator.TargetBackend; @@ -53,6 +50,8 @@ public class SimpleTestClassModel implements TestClassModel { private final String testClassName; @NotNull private final TargetBackend targetBackend; + @NotNull + private final Set excludeDirs; @Nullable private Collection innerTestClasses; @Nullable @@ -65,7 +64,8 @@ public class SimpleTestClassModel implements TestClassModel { @NotNull Pattern filenamePattern, @NotNull String doTestMethodName, @NotNull String testClassName, - @NotNull TargetBackend targetBackend + @NotNull TargetBackend targetBackend, + @NotNull Collection excludeDirs ) { this.rootFile = rootFile; this.recursive = recursive; @@ -74,6 +74,7 @@ public class SimpleTestClassModel implements TestClassModel { this.doTestMethodName = doTestMethodName; this.testClassName = testClassName; this.targetBackend = targetBackend; + this.excludeDirs = excludeDirs.isEmpty() ? Collections.emptySet() : new LinkedHashSet(excludeDirs); } @NotNull @@ -88,12 +89,10 @@ public class SimpleTestClassModel implements TestClassModel { File[] files = rootFile.listFiles(); if (files != null) { for (File file : files) { - if (file.isDirectory()) { - if (dirHasFilesInside(file)) { - String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file); - children.add(new SimpleTestClassModel(file, true, excludeParentDirs, filenamePattern, doTestMethodName, innerTestClassName, - targetBackend)); - } + if (file.isDirectory() && dirHasFilesInside(file) && !excludeDirs.contains(file.getName())) { + String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file); + children.add(new SimpleTestClassModel(file, true, excludeParentDirs, filenamePattern, doTestMethodName, + innerTestClassName, targetBackend, excludesStripOneDirectory(file.getName()))); } } } @@ -103,6 +102,21 @@ public class SimpleTestClassModel implements TestClassModel { return innerTestClasses; } + @NotNull + private Set excludesStripOneDirectory(@NotNull String directoryName) { + if (excludeDirs.isEmpty()) return excludeDirs; + + Set result = new LinkedHashSet(); + 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) { return !FileUtil.processFilesRecursively(dir, new Processor() { @Override @@ -181,7 +195,6 @@ public class SimpleTestClassModel implements TestClassModel { } private class TestAllFilesPresentMethodModel implements TestMethodModel { - @Override public String getName() { return "testAllFilesPresentIn" + testClassName; @@ -189,9 +202,16 @@ public class SimpleTestClassModel implements TestClassModel { @Override public void generateBody(@NotNull Printer p) { - String assertTestsPresentStr = - String.format("JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File(\"%s\"), Pattern.compile(\"%s\"), %s);", - JetTestUtils.getFilePath(rootFile), StringUtil.escapeStringCharacters(filenamePattern.pattern()), recursive); + StringBuilder exclude = new StringBuilder(); + for (String dir : excludeDirs) { + 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); }