diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt index 31049ce3098..6d02ea2a79a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt @@ -5,18 +5,19 @@ package org.jetbrains.kotlin.gradle.testbase -import org.gradle.api.logging.LogLevel +import org.gradle.api.logging.configuration.WarningMode import org.gradle.testkit.runner.BuildResult /** * Asserts Gradle output contains [expectedSubString] string. */ fun BuildResult.assertOutputContains( - expectedSubString: String + expectedSubString: String, + message: String = "Build output does not contain \"$expectedSubString\"" ) { assert(output.contains(expectedSubString)) { printBuildOutput() - "Build output does not contain \"$expectedSubString\"" + message } } @@ -190,4 +191,24 @@ fun BuildResult.assertKotlinDaemonJvmOptions( fun BuildResult.assertBuildReportPathIsPrinted() { assertOutputContains("Kotlin build report is written to file://") +} + +/** + * Asserts that the build produced some deprecation warnings. + * + * Expected to be executed only for the case when [BuildOptions.warningMode] is not set to [WarningMode.Fail] + */ +fun BuildResult.assertDeprecationWarningsArePresent(warningMode: WarningMode) { + assertOutputContains( + "[GradleWarningsDetectorPlugin] The plugin is being applied", + """ + The build uses warning mode other than `${WarningMode.Fail}` and uses a non-default project settings file. + Please apply the `org.jetbrains.kotlin.test.gradle-warnings-detector` plugin to the settings. + + """.trimIndent() + ) + assertOutputContains( + "[GradleWarningsDetectorPlugin] Some deprecation warnings were found during this build.", + "Warning mode is set to `$warningMode`, but the build produced no deprecation warnings. Please set it to `${WarningMode.Fail}`" + ) } \ 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 913a2ac4d55..f39ad48ab06 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.testbase +import org.gradle.api.logging.configuration.WarningMode import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.gradle.tooling.GradleConnector @@ -151,6 +152,7 @@ fun TestProject.build( val buildResult = gradleRunnerForBuild.build() if (enableBuildScan) buildResult.printBuildScanUrl() assertions(buildResult) + buildResult.additionalAssertions(buildOptions) } } @@ -185,10 +187,17 @@ fun TestProject.buildAndFail( val buildResult = gradleRunnerForBuild.buildAndFail() if (enableBuildScan) buildResult.printBuildScanUrl() assertions(buildResult) + buildResult.additionalAssertions(buildOptions) } } +private fun BuildResult.additionalAssertions(buildOptions: BuildOptions) { + if (buildOptions.warningMode != WarningMode.Fail) { + assertDeprecationWarningsArePresent(buildOptions.warningMode) + } +} + internal inline fun TestProject.getModels( crossinline assertions: ModelContainer.() -> Unit ) {