Add possibility to compute additional files for IgnoreTests

It is more flexible then just passing additional prefixes, since in some
cases test data have some weird naming conventions
This commit is contained in:
Roman Golyshev
2021-05-11 14:23:25 +03:00
committed by Space
parent e50d643213
commit cc41592969
@@ -27,7 +27,7 @@ object IgnoreTests {
testFile, testFile,
EnableOrDisableTestDirective.Enable(enableTestDirective), EnableOrDisableTestDirective.Enable(enableTestDirective),
directivePosition, directivePosition,
additionalFilesExtensions.toList(), computeAdditionalFilesByExtensions(testFile, additionalFilesExtensions.asList()),
test test
) )
} }
@@ -41,7 +41,7 @@ object IgnoreTests {
testFile, testFile,
EnableOrDisableTestDirective.Disable(DIRECTIVES.FIX_ME), EnableOrDisableTestDirective.Disable(DIRECTIVES.FIX_ME),
directivePosition, directivePosition,
additionalFilesExtensions = emptyList(), additionalFiles = emptyList(),
test = test test = test
) )
} }
@@ -52,12 +52,28 @@ object IgnoreTests {
vararg additionalFilesExtensions: String, vararg additionalFilesExtensions: String,
directivePosition: DirectivePosition = DirectivePosition.FIRST_LINE_IN_FILE, directivePosition: DirectivePosition = DirectivePosition.FIRST_LINE_IN_FILE,
test: () -> Unit test: () -> Unit
) {
runTestIfNotDisabledByFileDirective(
testFile,
disableTestDirective,
{ mainTestFile -> computeAdditionalFilesByExtensions(mainTestFile, additionalFilesExtensions.asList()) },
directivePosition,
test
)
}
fun runTestIfNotDisabledByFileDirective(
testFile: Path,
disableTestDirective: String,
computeAdditionalFiles: (mainTestFile: Path) -> List<Path>,
directivePosition: DirectivePosition = DirectivePosition.FIRST_LINE_IN_FILE,
test: () -> Unit
) { ) {
runTestIfEnabledByDirective( runTestIfEnabledByDirective(
testFile, testFile,
EnableOrDisableTestDirective.Disable(disableTestDirective), EnableOrDisableTestDirective.Disable(disableTestDirective),
directivePosition, directivePosition,
additionalFilesExtensions.toList(), computeAdditionalFiles(testFile),
test test
) )
} }
@@ -66,7 +82,7 @@ object IgnoreTests {
testFile: Path, testFile: Path,
directive: EnableOrDisableTestDirective, directive: EnableOrDisableTestDirective,
directivePosition: DirectivePosition, directivePosition: DirectivePosition,
additionalFilesExtensions: List<String>, additionalFiles: List<Path>,
test: () -> Unit test: () -> Unit
) { ) {
if (ALWAYS_CONSIDER_TEST_AS_PASSING) { if (ALWAYS_CONSIDER_TEST_AS_PASSING) {
@@ -81,7 +97,7 @@ object IgnoreTests {
} catch (e: Throwable) { } catch (e: Throwable) {
if (testIsEnabled) { if (testIsEnabled) {
if (directive is EnableOrDisableTestDirective.Disable) { if (directive is EnableOrDisableTestDirective.Disable) {
handleTestWithWrongDirective(testFile, directive, directivePosition, additionalFilesExtensions) handleTestWithWrongDirective(testFile, directive, directivePosition, additionalFiles)
} }
throw e throw e
} }
@@ -89,7 +105,7 @@ object IgnoreTests {
} }
if (!testIsEnabled) { if (!testIsEnabled) {
handleTestWithWrongDirective(testFile, directive, directivePosition, additionalFilesExtensions) handleTestWithWrongDirective(testFile, directive, directivePosition, additionalFiles)
} }
} }
@@ -99,17 +115,17 @@ object IgnoreTests {
testFile: Path, testFile: Path,
directive: EnableOrDisableTestDirective, directive: EnableOrDisableTestDirective,
directivePosition: DirectivePosition, directivePosition: DirectivePosition,
additionalFilesExtensions: List<String>, additionalFiles: List<Path>,
) { ) {
val verb = when (directive) { val verb = when (directive) {
is EnableOrDisableTestDirective.Disable -> "do not pass" is EnableOrDisableTestDirective.Disable -> "do not pass"
is EnableOrDisableTestDirective.Enable -> "passes" is EnableOrDisableTestDirective.Enable -> "passes"
} }
if (INSERT_DIRECTIVE_AUTOMATICALLY) { if (INSERT_DIRECTIVE_AUTOMATICALLY) {
testFile.insertDirectivesToFileAndAdditionalFile(directive, additionalFilesExtensions, directivePosition) testFile.insertDirectivesToFileAndAdditionalFile(directive, additionalFiles, directivePosition)
val filesWithDirectiveAdded = buildList { val filesWithDirectiveAdded = buildList {
add(testFile.fileName.toString()) add(testFile.fileName.toString())
additionalFilesExtensions.mapTo(this) { extension -> testFile.getSiblingFile(extension) } addAll(additionalFiles)
} }
throw AssertionError( throw AssertionError(
"Looks like the test $verb, ${directive.directiveText} was added to the ${filesWithDirectiveAdded.joinToString()}" "Looks like the test $verb, ${directive.directiveText} was added to the ${filesWithDirectiveAdded.joinToString()}"
@@ -122,15 +138,17 @@ object IgnoreTests {
} }
} }
private fun computeAdditionalFilesByExtensions(mainTestFile: Path, additionalFilesExtensions: List<String>): List<Path> {
return additionalFilesExtensions.mapNotNull { mainTestFile.getSiblingFile(it) }
}
private fun Path.insertDirectivesToFileAndAdditionalFile( private fun Path.insertDirectivesToFileAndAdditionalFile(
directive: EnableOrDisableTestDirective, directive: EnableOrDisableTestDirective,
additionalFilesExtensions: List<String>, additionalFiles: List<Path>,
directivePosition: DirectivePosition, directivePosition: DirectivePosition,
) { ) {
insertDirective(directive, directivePosition) insertDirective(directive, directivePosition)
additionalFilesExtensions.forEach { extension -> additionalFiles.forEach { it.insertDirective(directive, directivePosition) }
getSiblingFile(extension)?.insertDirective(directive, directivePosition)
}
} }
private fun Path.getSiblingFile(extension: String): Path? { private fun Path.getSiblingFile(extension: String): Path? {