[Gradle] Add integration test for associated 'functionalTest' style sources

Experiments with the DefaultKotlinCompilationAssociator where made
during KT-60937. One experiment broke running functionalTests in
kotlin.git in bootstrap mode. This case was not yet covered by
CI.

^KT-60937 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-08-07 12:06:25 +02:00
committed by Space Team
parent 6c6200a9c5
commit d2bd749861
21 changed files with 201 additions and 0 deletions
@@ -94,6 +94,35 @@ class TestFixturesIT : KGPBaseTest() {
}
}
@DisplayName("Test associated 'functionalTest' compilation can compile and run with test and testFixtures in JVM project")
@MppGradlePluginTests
@GradleTest
fun testTestFixturesAndFunctionalTestsInJvmProject(gradleVersion: GradleVersion) {
project("jvm-test-fixtures-functionalTest", gradleVersion) {
build("functionalTest") {
assertOutputContains("src/main OK!")
assertOutputContains("src/test OK!")
assertOutputContains("src/testFixtures OK!")
assertOutputContains("src/functionalTest OK!")
}
}
}
@DisplayName("Test associated 'functionalTest' compilation can compile and run with test and testFixtures in Multiplatform project")
@MppGradlePluginTests
@GradleTest
fun testTestFixturesAndFunctionalTestsInMppProject(gradleVersion: GradleVersion) {
project("mpp-test-fixtures-functionalTest", gradleVersion) {
build("functionalTest") {
assertOutputContains("src/main OK!")
assertOutputContains("src/test OK!")
assertOutputContains("src/testFixtures OK!")
assertOutputContains("src/functionalTest OK!")
}
}
}
companion object {
private const val JVM_TEST_FIXTURES_PROJECT_NAME = "jvm-test-fixtures"
private const val MPP_TEST_FIXTURES_PROJECT_NAME = "mpp-test-fixtures"
@@ -0,0 +1,32 @@
@file:Suppress("HasPlatformType")
plugins {
kotlin("jvm")
`java-test-fixtures`
}
repositories {
mavenLocal()
mavenCentral()
}
/* Create functionalTest (java) source set */
val functionalTestSourceSet = sourceSets.create("functionalTest")
val functionalTestCompilation = kotlin.target.compilations.getByName("functionalTest")
/* Associate 'functionalTest' with 'test' */
functionalTestCompilation.associateWith(kotlin.target.compilations.getByName("test"))
/* Create test task */
val functionalTest = tasks.register<Test>("functionalTest") {
testClassesDirs = functionalTestSourceSet.output.classesDirs
classpath = functionalTestSourceSet.runtimeClasspath
testLogging {
events("passed", "skipped", "failed")
showStandardStreams = true
}
}
dependencies {
testImplementation(kotlin("test-junit"))
}
@@ -0,0 +1,25 @@
import kotlin.test.Test
class Executable {
@Test
fun runTest() {
MainJava()
MainKotlin()
MainKotlinInternal()
println("src/main OK!")
TestJava()
TestKotlin()
TestKotlinInternal()
println("src/test OK!")
TestFixturesJava()
TestFixturesKotlin()
TestFixturesKotlinInternal()
println("src/testFixtures OK!")
FunctionalTestKotlin()
FunctionalTestJava()
println("src/functionalTest OK!")
}
}
@@ -0,0 +1,9 @@
public class TestJava {
public TestJava() {
new MainJava();
new MainKotlin();
new TestFixturesJava();
new TestFixturesKotlin();
}
}
@@ -0,0 +1,6 @@
public class TestFixturesJava {
public TestFixturesJava() {
new MainJava();
new MainKotlin();
}
}
@@ -0,0 +1,2 @@
class TestFixturesKotlin
internal class TestFixturesKotlinInternal
@@ -0,0 +1,36 @@
plugins {
kotlin("multiplatform")
java
`java-test-fixtures`
}
repositories {
mavenLocal()
mavenCentral()
}
kotlin {
jvm { withJava() }
val testCompilation = jvm().compilations.getByName("test")
testCompilation.associateWith(jvm().compilations.getByName("testFixtures"))
val functionalTestCompilation = jvm().compilations.create("functionalTest")
functionalTestCompilation.associateWith(testCompilation)
sourceSets.getByName("jvmTest").dependencies {
implementation(kotlin("test-junit"))
}
}
/* Create test task */
val functionalTest = tasks.register<Test>("functionalTest") {
val compilation = kotlin.jvm().compilations.getByName("functionalTest")
testClassesDirs = compilation.output.classesDirs
classpath = compilation.output.classesDirs +
project.files({ kotlin.jvm().compilations.getByName("functionalTest").runtimeDependencyFiles })
testLogging {
events("passed", "skipped", "failed")
showStandardStreams = true
}
}
@@ -0,0 +1,25 @@
import kotlin.test.Test
class Executable {
@Test
fun runTest() {
MainJava()
MainKotlin()
MainKotlinInternal()
println("src/main OK!")
TestJava()
TestKotlin()
TestKotlinInternal()
println("src/test OK!")
TestFixturesJava()
TestFixturesKotlin()
TestFixturesKotlinInternal()
println("src/testFixtures OK!")
FunctionalTestKotlin()
FunctionalTestJava()
println("src/functionalTest OK!")
}
}
@@ -0,0 +1,9 @@
public class TestJava {
public TestJava() {
new MainJava();
new MainKotlin();
new TestFixturesJava();
new TestFixturesKotlin();
}
}
@@ -0,0 +1,6 @@
public class TestFixturesJava {
public TestFixturesJava() {
new MainJava();
new MainKotlin();
}
}