From f0ef5a90b3a4b4b0b8699adb7a7e92175f0360d9 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 26 Aug 2019 22:48:53 +0300 Subject: [PATCH] Add an integration test for the test runs API Issue #KT-32679 --- .../kotlin/gradle/NewMultiplatformIT.kt | 45 ++++++++++++++++++- .../build.gradle | 44 ++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 32e8c0bd619..0a157b3a0e3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -2043,7 +2043,7 @@ class NewMultiplatformIT : BaseGradleIT() { } @Test - fun testAssociateCompilations() = with(Project("new-mpp-associate-compilations")) { + fun testAssociateCompilations() = with(Project("new-mpp-associate-compilations", GradleVersionRequired.AtLeast("5.0"))) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) @@ -2068,4 +2068,47 @@ class NewMultiplatformIT : BaseGradleIT() { assertFileExists("build/classes/kotlin/$nativeHostTargetName/integrationTest/integrationTest.klib") } } + + @Test + fun testTestRunsApi() = with(Project("new-mpp-associate-compilations", GradleVersionRequired.AtLeast("5.0"))) { + setupWorkingDir() + gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) + + // TOOD: add Kotlin/JS tests once they can be tested without much performance overhead + val testTasks = + arrayOf(":jvmTest", ":${nativeHostTargetName}Test", ":jvmIntegrationTest", ":${nativeHostTargetName}IntegrationTest") + + build(*testTasks) { + assertSuccessful() + + assertTasksExecuted( + *testTasks, + ":compileIntegrationTestKotlinJvm", + ":linkIntegrationDebugTest${nativeHostTargetName.capitalize()}" + ) + + fun checkUnitTestOutput(targetName: String) { + val classReportHtml = projectDir + .resolve("build/reports/tests/${targetName}Test/classes/com.example.HelloTest.html") + .readText() + + if (targetName != nativeHostTargetName) // TODO: fix exclude patterns for the Kotlin/Native test tasks + assertTrue("secondTest" !in classReportHtml, "Test report should not contain 'secondTest':\n$classReportHtml") + } + checkUnitTestOutput("jvm") + checkUnitTestOutput(nativeHostTargetName) + + fun checkIntegrationTestOutput(targetName: String) { + val classReportHtml = projectDir + .resolve("build/reports/tests/${targetName}IntegrationTest/classes/com.example.HelloIntegrationTest.html") + .readText() + + assertTrue("test[$targetName]" in classReportHtml, "Test report should contain 'test[$targetName]':\n$classReportHtml") + assertTrue("secondTest" !in classReportHtml, "Test report should not contain 'secondTest':\n$classReportHtml") + assertTrue("thirdTest" !in classReportHtml, "Test report should not contain 'thirdTest':\n$classReportHtml") + } + checkIntegrationTestOutput("jvm") + checkIntegrationTestOutput(nativeHostTargetName) + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-associate-compilations/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-associate-compilations/build.gradle index e7a75c43b7d..af24737161d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-associate-compilations/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-associate-compilations/build.gradle @@ -53,4 +53,48 @@ kotlin { defaultSourceSet.dependsOn(sourceSets["commonIntegrationTest"]) } } +} + +kotlin { + testableTargets.all { + testRuns { + getByName("test") { + filter { + excludeTestsMatching("*.secondTest") + } + } + create("integration") { + filter { + includeTestsMatching("com.example.HelloIntegrationTest.test") + } + } + } + } + + jvm { + testRuns { + getByName("test").filter { + excludeTestsMatching("com.example.HelloTest.secondTest") + } + + getByName("integration") { + setExecutionSourceFrom(compilations["integrationTest"]) + } + } + } + + targets.matching { it.name == "mingw64" || it.name == "linux64" || it.name == "macos64" }.all { + testRuns { + getByName("test").filter { excludeTestsMatching("*.secondTest") } + + getByName("integration") { + binaries { + test("integration") { + compilation = compilations["integrationTest"] + } + } + setExecutionSourceFrom(binaries.getTest("integration", "DEBUG")) + } + } + } } \ No newline at end of file