From 34ac3a818ac340b836f3940463bffcf6404a530e Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 6 Sep 2017 01:23:18 +0300 Subject: [PATCH] Optimize run tests --- buildSrc/src/main/kotlin/tasks.kt | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/kotlin/tasks.kt b/buildSrc/src/main/kotlin/tasks.kt index 29e92251780..beceb747dd7 100644 --- a/buildSrc/src/main/kotlin/tasks.kt +++ b/buildSrc/src/main/kotlin/tasks.kt @@ -1,10 +1,34 @@ @file:Suppress("unused") // usages in build scripts are not tracked properly import org.gradle.api.* +import org.gradle.api.internal.tasks.testing.filter.DefaultTestFilter import org.gradle.kotlin.dsl.* import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.extra -fun Project.projectTest(body: Test.() -> Unit = {}): Test = getOrCreateTask("test") { +fun Project.projectTest(body: Test.() -> Unit = {}): Test = (tasks.findByName("test") as Test).apply { + doFirst { + val patterns = filter.includePatterns + ((filter as? DefaultTestFilter)?.commandLineIncludePatterns ?: emptySet()) + if (!patterns.isEmpty()) { + patterns.forEach { pattern -> + val maybeMethodName = pattern.substringAfterLast('.') + val className = if (maybeMethodName.isNotEmpty() && maybeMethodName[0].isLowerCase()) + pattern.substringBeforeLast('.') + else + pattern + + val matchPattern = className.replace('.', '/') + ".class" + + include { + if (it.isDirectory) { + matchPattern.startsWith(it.path) + } else { + it.path.endsWith(matchPattern) + } + } + } + } + } jvmArgs("-ea", "-XX:+HeapDumpOnOutOfMemoryError", "-Xmx1200m", "-XX:+UseCodeCacheFlushing", "-XX:ReservedCodeCacheSize=128m", "-Djna.nosys=true") maxHeapSize = "1200m" systemProperty("idea.is.unit.test", "true") @@ -15,5 +39,5 @@ fun Project.projectTest(body: Test.() -> Unit = {}): Test = getOrCreateTask("tes body() } -inline fun Project.getOrCreateTask(taskName: String, body: T.() -> Unit): T = - (tasks.findByName(taskName)?.let { it as T } ?: task(taskName)).apply{ body() } +inline fun Project.getOrCreateTask(taskName: String, body: T.() -> Unit): T = + (tasks.findByName(taskName)?.let { it as T } ?: task(taskName)).apply { body() }