From 451c732b8fcb700e71c2303c1f9e539400f24c30 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 5 Jun 2018 19:25:14 +0300 Subject: [PATCH] Test: speed up tests by minimizing number of tasks to run E.g. avoid building release variants for Android (extremely slow due to proguard minification, optimization) --- .../kotlin/gradle/BuildCacheRelocationIT.kt | 23 +++++--- .../jetbrains/kotlin/gradle/Kapt3AndroidIT.kt | 54 +++++++++---------- .../org/jetbrains/kotlin/gradle/UpToDateIT.kt | 6 +-- 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt index e8940cf4f5e..76a18f419d7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt @@ -58,14 +58,14 @@ class BuildCacheRelocationIT : BaseGradleIT() { lateinit var firstOutputHashes: List> workingDir = workingDirs[0] - firstProject.build("build") { + firstProject.build(*testCase.taskToExecute) { assertSuccessful() firstOutputHashes = hashOutputFiles(outputRoots) cacheableTaskNames.forEach { assertContains("Packing task ':$it") } } workingDir = workingDirs[1] - secondProject.build("build") { + secondProject.build(*testCase.taskToExecute) { assertSuccessful() val secondOutputHashes = hashOutputFiles(outputRoots) assertEquals(firstOutputHashes, secondOutputHashes) @@ -82,7 +82,8 @@ class BuildCacheRelocationIT : BaseGradleIT() { val cacheableTaskNames: List, val projectDirectoryPrefix: String? = null, val outputRootPaths: List = listOf("build"), - val initProject: Project.() -> Unit = { } + val initProject: Project.() -> Unit = { }, + val taskToExecute: Array ) { override fun toString(): String = (projectDirectoryPrefix?.plus("/") ?: "") + projectName @@ -99,15 +100,19 @@ class BuildCacheRelocationIT : BaseGradleIT() { fun testCases(): List> = listOf( TestCase( "simpleProject", + taskToExecute = arrayOf("classes", "testClasses"), cacheableTaskNames = listOf("compileKotlin", "compileTestKotlin") ), - TestCase("simple", projectDirectoryPrefix = "kapt2", + TestCase("simple", + projectDirectoryPrefix = "kapt2", + taskToExecute = arrayOf("classes", "testClasses"), cacheableTaskNames = listOf( "kaptKotlin", "kaptGenerateStubsKotlin", "compileKotlin", "compileTestKotlin", "compileJava" ), initProject = { File(projectDir, "build.gradle").appendText("\nkapt.useBuildCache = true") } ), TestCase("kotlin2JsDceProject", + taskToExecute = arrayOf("assemble", "runDceKotlinJs"), cacheableTaskNames = listOf("mainProject", "libraryProject").map { "$it:compileKotlin2Js" } + "mainProject:runDceKotlinJs", initProject = { @@ -121,6 +126,7 @@ class BuildCacheRelocationIT : BaseGradleIT() { } ), TestCase("multiplatformProject", + taskToExecute = arrayOf("classes", "testClasses"), cacheableTaskNames = listOf( "lib:compileKotlinCommon", "libJvm:compileKotlin", "libJvm:compileTestKotlin", "libJs:compileKotlin2Js", "libJs:compileTestKotlin2Js" @@ -128,17 +134,20 @@ class BuildCacheRelocationIT : BaseGradleIT() { outputRootPaths = listOf("lib", "libJvm", "libJs").map { "$it/build" } ), TestCase("AndroidProject", + taskToExecute = arrayOf("assembleDebug"), cacheableTaskNames = listOf("Lib", "Android").flatMap { module -> listOf("Flavor1", "Flavor2").flatMap { flavor -> - listOf("Debug", "Release").map { buildType -> + listOf("Debug").map { buildType -> "$module:compile$flavor${buildType}Kotlin" } } }, outputRootPaths = listOf("Lib", "Android", "Test").map { "$it/build" } ), - TestCase("android-dagger", projectDirectoryPrefix = "kapt2", - cacheableTaskNames = listOf("Debug", "Release").flatMap { buildType -> + TestCase("android-dagger", + taskToExecute = arrayOf("assembleDebug"), + projectDirectoryPrefix = "kapt2", + cacheableTaskNames = listOf("Debug").flatMap { buildType -> listOf("kapt", "kaptGenerateStubs", "compile").map { kotlinTask -> "app:$kotlinTask${buildType}Kotlin" } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt index f8ce038c675..a75e2283d2e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt @@ -33,21 +33,21 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("android-butterknife", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("build", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() - assertFileExists("app/build/generated/source/kapt/release/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.java") - assertFileExists("app/build/intermediates/classes/release/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.class") - assertFileExists("app/build/tmp/kotlin-classes/release/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class") + assertFileExists("app/build/generated/source/kapt/debug/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.java") + assertFileExists("app/build/intermediates/classes/debug/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.class") + assertFileExists("app/build/tmp/kotlin-classes/debug/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class") if (isLegacyAndroidGradleVersion(androidGradlePluginVersion)) { // we don't copy classes with new AGP - assertFileExists("app/build/intermediates/classes/release/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class") + assertFileExists("app/build/intermediates/classes/debug/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class") } } - project.build("build", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() - assertTasksUpToDate(":compileReleaseKotlin", ":compileReleaseJavaWithJavac") + assertTasksUpToDate(":compileDebugKotlin", ":compileDebugJavaWithJavac") } } @@ -56,16 +56,16 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("android-dagger", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("build", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() - assertFileExists("app/build/generated/source/kapt/release/com/example/dagger/kotlin/DaggerApplicationComponent.java") - assertFileExists("app/build/generated/source/kapt/release/com/example/dagger/kotlin/ui/HomeActivity_MembersInjector.java") - assertFileExists("app/build/intermediates/classes/release/com/example/dagger/kotlin/DaggerApplicationComponent.class") - assertFileExists("app/build/tmp/kotlin-classes/release/com/example/dagger/kotlin/AndroidModule.class") + assertFileExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/DaggerApplicationComponent.java") + assertFileExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/ui/HomeActivity_MembersInjector.java") + assertFileExists("app/build/intermediates/classes/debug/com/example/dagger/kotlin/DaggerApplicationComponent.class") + assertFileExists("app/build/tmp/kotlin-classes/debug/com/example/dagger/kotlin/AndroidModule.class") if (isLegacyAndroidGradleVersion(androidGradlePluginVersion)) { // we don't copy classes with new AGP - assertFileExists("app/build/intermediates/classes/release/com/example/dagger/kotlin/AndroidModule.class") + assertFileExists("app/build/intermediates/classes/debug/com/example/dagger/kotlin/AndroidModule.class") } } } @@ -75,7 +75,7 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("kt15001", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("compileReleaseSources", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() } @@ -86,13 +86,13 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("android-dbflow", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("compileReleaseSources", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() - assertFileExists("app/build/generated/source/kapt/release/com/raizlabs/android/dbflow/config/GeneratedDatabaseHolder.java") - assertFileExists("app/build/generated/source/kapt/release/com/raizlabs/android/dbflow/config/AppDatabaseapp_Database.java") - assertFileExists("app/build/generated/source/kapt/release/mobi/porquenao/poc/kotlin/core/Item_Table.java") - assertFileExists("app/build/generated/source/kapt/release/mobi/porquenao/poc/kotlin/core/Item_Adapter.java") + assertFileExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/GeneratedDatabaseHolder.java") + assertFileExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/AppDatabaseapp_Database.java") + assertFileExists("app/build/generated/source/kapt/debug/mobi/porquenao/poc/kotlin/core/Item_Table.java") + assertFileExists("app/build/generated/source/kapt/debug/mobi/porquenao/poc/kotlin/core/Item_Adapter.java") } } @@ -101,13 +101,13 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("android-realm", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("compileReleaseSources", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() - assertFileExists("build/generated/source/kapt/release/io/realm/CatRealmProxy.java") - assertFileExists("build/generated/source/kapt/release/io/realm/CatRealmProxyInterface.java") - assertFileExists("build/generated/source/kapt/release/io/realm/DefaultRealmModule.java") - assertFileExists("build/generated/source/kapt/release/io/realm/DefaultRealmModuleMediator.java") + assertFileExists("build/generated/source/kapt/debug/io/realm/CatRealmProxy.java") + assertFileExists("build/generated/source/kapt/debug/io/realm/CatRealmProxyInterface.java") + assertFileExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModule.java") + assertFileExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModuleMediator.java") } } @@ -116,11 +116,11 @@ open class Kapt3AndroidIT : Kapt3BaseIT() { val project = Project("android-databinding", GRADLE_VERSION, directoryPrefix = "kapt2") val options = androidBuildOptions() - project.build("compileReleaseSources", options = options) { + project.build("assembleDebug", options = options) { assertSuccessful() assertKaptSuccessful() - assertFileExists("app/build/generated/source/kapt/release/com/example/databinding/BR.java") - assertFileExists("app/build/generated/source/kapt/release/com/example/databinding/databinding/ActivityTestBinding.java") + assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java") + assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBinding.java") } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt index d8250d1ce48..84ae086b5ec 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/UpToDateIT.kt @@ -42,14 +42,14 @@ class UpToDateIT : BaseGradleIT() { } private fun testMutations(vararg mutations: ProjectMutation) { - val project = Project("simpleProject") + val project = Project("kotlinProject") project.setupWorkingDir() mutations.forEach { it.initProject(project) - project.build("build") { assertSuccessful() } + project.build("classes") { assertSuccessful() } it.mutateProject(project) - project.build("build") { + project.build("classes") { try { assertSuccessful() it.checkAfterRebuild(this)