From d360feb847c3f6c2f7246c7b7491805caab0c2d5 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Thu, 12 Jan 2023 13:59:20 +0100 Subject: [PATCH] [Gradle] Add tests for KT-52149, KT-55174, and KT-55741 --- .../gradle/BuildServiceDeclarationIT.kt | 90 +++++++++++++++++++ .../kotlin/gradle/testbase/testDsl.kt | 15 +++- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt new file mode 100644 index 00000000000..d7103572d09 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt @@ -0,0 +1,90 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.gradle.api.logging.configuration.WarningMode +import org.gradle.testkit.runner.BuildResult +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.* +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.DisplayName + +@DisplayName("Build services usages in tasks are declared with `usesService`") +@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_5) +class BuildServiceDeclarationIT : KGPBaseTest() { + override val defaultBuildOptions = super.defaultBuildOptions.copy( + warningMode = WarningMode.All // we currently have other warnings when `STABLE_CONFIGURATION_CACHE` is enabled unrelated to build services declaration, so we check for this kind of warnings in the build output + ) + + @Disabled + @DisplayName("Build services are registered for Kotlin/JVM projects") + @GradleTest + @JvmGradlePluginTests + fun testJvmProject(gradleVersion: GradleVersion) { + project("kotlinJavaProject", gradleVersion) { + enableStableConfigurationCachePreview() + build("build") { + assertOutputDoesNotContainBuildServiceDeclarationWarnings() + } + } + } + + @Disabled + @DisplayName("Build services are registered for Kotlin/JS nodejs projects") + @GradleTest + @JsGradlePluginTests + fun testJsNodeJsProject(gradleVersion: GradleVersion) { + project("kotlin-js-browser-project", gradleVersion) { + enableStableConfigurationCachePreview() + build("build") { + assertOutputDoesNotContainBuildServiceDeclarationWarnings() + } + } + } + + @Disabled + @DisplayName("Build services are registered for Kotlin/JS browser projects") + @GradleTest + @JsGradlePluginTests + fun testJsBrowserProject(gradleVersion: GradleVersion) { + project("kotlin-js-nodejs-project", gradleVersion) { + enableStableConfigurationCachePreview() + build("build") { + assertOutputDoesNotContainBuildServiceDeclarationWarnings() + } + } + } + + @Disabled + @DisplayName("Build services are registered for Kotlin/MPP projects") + @GradleTest + @MppGradlePluginTests + fun testMppProject(gradleVersion: GradleVersion) { + project("new-mpp-lib-with-tests", gradleVersion) { + enableStableConfigurationCachePreview() + build("build") { + assertOutputDoesNotContainBuildServiceDeclarationWarnings() + } + } + } + + @Disabled + @DisplayName("Build services are registered for Kapt projects") + @GradleTest + @OtherGradlePluginTests + fun testKaptProject(gradleVersion: GradleVersion) { + project("kapt2/simple", gradleVersion) { + enableStableConfigurationCachePreview() + build("build") { + assertOutputDoesNotContainBuildServiceDeclarationWarnings() + } + } + } + + private fun BuildResult.assertOutputDoesNotContainBuildServiceDeclarationWarnings() { + assertOutputDoesNotContain("without the corresponding declaration via 'Task#usesService'") + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index 3b731b3a176..913a2ac4d55 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -485,7 +485,6 @@ private fun TestProject.setupNonDefaultJdk(pathToJdk: File) { } } -@OptIn(ExperimentalPathApi::class) internal fun Path.enableAndroidSdk() { val androidSdk = KtTestUtil.findAndroidSdk() resolve("local.properties") @@ -610,3 +609,17 @@ private fun TestProject.configureLocalRepository(localRepoDir: Path) { } internal fun TestProject.disableKotlinNativeCaches() = gradleProperties.toFile().disableKotlinNativeCaches() + +internal fun TestProject.enableStableConfigurationCachePreview() { + val settingsFile = if (settingsGradleKts.exists()) { + settingsGradleKts + } else { + settingsGradle + } + settingsFile.append( + """ + | + |enableFeaturePreview("STABLE_CONFIGURATION_CACHE") + """.trimMargin() + ) +} \ No newline at end of file