diff --git a/gradle-plugin/plugin/build.gradle.kts b/gradle-plugin/plugin/build.gradle.kts index edd6c493..7bfbbbfc 100644 --- a/gradle-plugin/plugin/build.gradle.kts +++ b/gradle-plugin/plugin/build.gradle.kts @@ -7,6 +7,7 @@ plugins { alias(libs.plugins.kotlin.serialization) alias(libs.plugins.buildconfig) alias(libs.plugins.detekt) + alias(libs.plugins.autonomousapps.testkit) `java-gradle-plugin` `maven-publish` @@ -72,24 +73,17 @@ val writeSupportedVersionsFiles = tasks.register("writeSupportedVersionsFiles") } } } - -val functionalTest: SourceSet by sourceSets.creating { - // The classpath files are added as resources so that the test code can access them. - resources { - srcDir(writeSupportedVersionsFiles) +sourceSets { + functionalTest { + // The classpath files are added as resources so that the test code can access them. + resources { + srcDir(writeSupportedVersionsFiles) + } } } -val functionalTestTask = - tasks.register("functionalTest") { - description = "Runs the functional tests." - group = "verification" - testClassesDirs = functionalTest.output.classesDirs - classpath = functionalTest.runtimeClasspath - } - tasks.check { - dependsOn(functionalTestTask, tasks.validatePlugins) + dependsOn(tasks.validatePlugins) } val perfProjectTemplateResDir = project.layout.buildDirectory.dir("generated/performance-project-template/") @@ -111,6 +105,11 @@ detekt { baseline = rootProject.layout.projectDirectory.file("detekt/baseline.xml").asFile } +gradleTestKitSupport { + withSupportLibrary() + withTruthLibrary() +} + dependencies { compileOnly(gradleApi()) compileOnly(libs.android.gradle.plugin) @@ -154,7 +153,6 @@ gradlePlugin { tags = listOf("emerge", "emergetools", "android", "upload") } } - testSourceSets(functionalTest) } val emergeBaseUrl: String? by project diff --git a/gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/base/EmergeGradleRunner.kt b/gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/base/EmergeGradleRunner.kt index 0e595bdf..16bc6165 100644 --- a/gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/base/EmergeGradleRunner.kt +++ b/gradle-plugin/plugin/src/functionalTest/kotlin/com/emergetools/android/gradle/base/EmergeGradleRunner.kt @@ -1,11 +1,13 @@ package com.emergetools.android.gradle.base +import com.autonomousapps.kit.GradleBuilder import com.emergetools.android.gradle.EmergePluginTest import okhttp3.HttpUrl import okhttp3.mockwebserver.MockWebServer import org.gradle.internal.impldep.com.google.common.io.Files import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner +import org.gradle.util.GradleVersion import org.gradle.util.internal.VersionNumber import java.io.File @@ -38,8 +40,6 @@ class EmergeGradleRunner private constructor( fun create(projectDir: String): EmergeGradleRunner = EmergeGradleRunner(projectDir) } - private val gradleRunner = GradleRunner.create() - private val baseUrl: HttpUrl get() = server.url("/") // Starts the server @@ -56,6 +56,10 @@ class EmergeGradleRunner private constructor( private var environment: Map = emptyMap() + private var gradleVersion: GradleVersion? = null + + private var withDebug = false + fun withArguments(vararg arguments: String) = apply { this.arguments = arguments.toList() @@ -68,14 +72,13 @@ class EmergeGradleRunner private constructor( fun withGradleVersion(version: String) = apply { - gradleRunner.withGradleVersion(version) + gradleVersion = GradleVersion.version(version) } @Suppress("unused") - fun withDebug(flag: Boolean) = - apply { - gradleRunner.withDebug(flag) - } + fun withDebug(flag: Boolean) { + withDebug = flag + } fun withAndroidGradlePluginVersion(version: String) = apply { @@ -115,7 +118,7 @@ class EmergeGradleRunner private constructor( this.environment = mapOf(*pairs) } - private fun preBuild() { + private fun preBuild(): GradleRunner { @Suppress("DEPRECATION") tempProjectDir = Files.createTempDir() testProjectDir(projectDir).copyRecursively(tempProjectDir!!) @@ -137,14 +140,18 @@ class EmergeGradleRunner private constructor( // Turns off repository discovery to test projects that don't use Git "GIT_DIR" to tempProjectDir!!.path, ) - gradleRunner - .withProjectDir(tempProjectDir) + if (gradleVersion == null) { + gradleVersion = GradleVersion.current() + } + val runner = GradleBuilder.runner(gradleVersion!!, tempProjectDir!!) + return runner + .withDebug(withDebug) .withArguments(arguments) .withEnvironment(System.getenv() + customEnvironment) // Must be called first in order to set the default plugin classpath. .withPluginClasspath() .withPluginClasspath( - gradleRunner.pluginClasspath + + runner.pluginClasspath + androidGradlePluginClasspath(androidGradlePluginVersion) + kotlinAndroidGradlePluginClasspath(kotlinAndroidGradlePluginVersion), ) @@ -186,8 +193,7 @@ class EmergeGradleRunner private constructor( } private fun gradleRunnerBuild(buildReceiver: GradleRunner.() -> BuildResult): BuildResult { - preBuild() - val result = gradleRunner.buildReceiver() + val result = preBuild().buildReceiver() assertions?.invoke(result, server) postBuild() return result diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6d5381ec..a30a4f24 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -49,6 +49,7 @@ kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } gradle-publish = { id = "com.gradle.plugin-publish", version = "1.3.1" } grgit = { id = "org.ajoberstar.grgit", version = "5.3.0" } +autonomousapps-testkit = { id = "com.autonomousapps.testkit", version = "0.12" } [libraries] android-gradle-plugin = "com.android.tools.build:gradle:7.4.2"