From 0f88565b93f367d3269187192f0d7b07d247f855 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 18 Jun 2018 17:09:40 +0300 Subject: [PATCH] Auto-add pattern for running inner tests in Gradle (KT-24961) Since Gradle 4.7 there's a more strict pattern check. Simple include trick doesn't work anymore. Probably modification of TestSelectionMatcher.java in https://github.com/gradle/gradle/commit/c2067eaa129af4c9c29ad08da39d1c853eec4c59#diff-e92afe807d7ea74cc9ab0dcef30efc93 is responsible for the new behaviour. #KT-24961 Fixed --- buildSrc/src/main/kotlin/tasks.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/tasks.kt b/buildSrc/src/main/kotlin/tasks.kt index 600d4468b48..a150f8fa89c 100644 --- a/buildSrc/src/main/kotlin/tasks.kt +++ b/buildSrc/src/main/kotlin/tasks.kt @@ -33,11 +33,14 @@ fun Project.projectTest(taskName: String = "test", body: Test.() -> Unit = {}): val patterns = filter.includePatterns + ((filter as? DefaultTestFilter)?.commandLineIncludePatterns ?: emptySet()) if (patterns.isEmpty() || patterns.any { '*' in it }) return@doFirst patterns.forEach { pattern -> + var isClassPattern = false val maybeMethodName = pattern.substringAfterLast('.') - val maybeClassFqName = if (maybeMethodName.isFirstChar(::isLowerCase)) + val maybeClassFqName = if (maybeMethodName.isFirstChar(::isLowerCase)) { pattern.substringBeforeLast('.') - else + } else { + isClassPattern = true pattern + } if (!maybeClassFqName.substringAfterLast('.').isFirstChar(::isUpperCase)) { return@forEach @@ -46,6 +49,10 @@ fun Project.projectTest(taskName: String = "test", body: Test.() -> Unit = {}): val classFileNameWithoutExtension = maybeClassFqName.replace('.', '/') val classFileName = "$classFileNameWithoutExtension.class" + if (isClassPattern) { + filter.includePatterns.add("$pattern$*") + } + include { val path = it.path if (it.isDirectory) {