diff --git a/kotest-runner/kotest-runner-junit5/src/jvmMain/kotlin/io/kotest/runner/junit/platform/gradle/GradlePostDiscoveryFilterExtractor.kt b/kotest-runner/kotest-runner-junit5/src/jvmMain/kotlin/io/kotest/runner/junit/platform/gradle/GradlePostDiscoveryFilterExtractor.kt index aee7b46acb4..1b94edc164c 100644 --- a/kotest-runner/kotest-runner-junit5/src/jvmMain/kotlin/io/kotest/runner/junit/platform/gradle/GradlePostDiscoveryFilterExtractor.kt +++ b/kotest-runner/kotest-runner-junit5/src/jvmMain/kotlin/io/kotest/runner/junit/platform/gradle/GradlePostDiscoveryFilterExtractor.kt @@ -15,7 +15,7 @@ import java.util.regex.Pattern * * Since ClassMethodNameFilter is private, we can't get access to the underlying patterns, so we resort * to this reflection bullshit to get the raw strings out, so we can parse and apply the patterns ourselves, - * thus allowing kotest to properly support the --tests options. + * thus allowing kotest to properly support the --tests options as well as filter { } block defined in build.gradle.kts. * */ object GradlePostDiscoveryFilterExtractor { @@ -32,10 +32,13 @@ object GradlePostDiscoveryFilterExtractor { val matcher = testMatcher(filter) logger.log { Pair(null, "TestMatcher [$matcher]") } + val buildScriptIncludePatterns = buildScriptIncludePatterns(matcher) + logger.log { Pair(null, "buildScriptIncludePatterns [$buildScriptIncludePatterns]") } + val commandLineIncludePatterns = commandLineIncludePatterns(matcher) logger.log { Pair(null, "commandLineIncludePatterns [$commandLineIncludePatterns]") } - val regexes = commandLineIncludePatterns.map { pattern(it) } + val regexes = (buildScriptIncludePatterns + commandLineIncludePatterns).map { pattern(it) } logger.log { Pair(null, "ClassMethodNameFilter regexes [$regexes]") } regexes }.getOrElse { emptyList() } @@ -46,6 +49,12 @@ object GradlePostDiscoveryFilterExtractor { return field.get(obj) } + private fun buildScriptIncludePatterns(obj: Any): List { + val field = obj::class.java.getDeclaredField("buildScriptIncludePatterns") + field.isAccessible = true + return field.get(obj) as List + } + private fun commandLineIncludePatterns(obj: Any): List { val field = obj::class.java.getDeclaredField("commandLineIncludePatterns") field.isAccessible = true