diff options
Diffstat (limited to 'atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt')
-rw-r--r-- | atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt | 217 |
1 files changed, 189 insertions, 28 deletions
diff --git a/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt b/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt index cbeefa2..e95b091 100644 --- a/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt +++ b/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt @@ -3,8 +3,16 @@ package kotlinx.atomicfu.plugin.gradle.test import kotlinx.atomicfu.plugin.gradle.internal.* import org.junit.* -class MppProjectTest : BaseKotlinGradleTest("mpp-simple") { - private fun BaseKotlinScope.createProject() { +/** + * Test that ensures correctness of `atomicfu-gradle-plugin` application to the MPP project: + * - post-compilation bytecode transformation tasks are created + * (legacy transformation is tested here, compiler plugin is not applied). + * - original non-transformed classes are not left in compile/runtime classpath. + * - no `kotlinx/atomicfu` references are left in the transformed bytecode. + */ +class MppLegacyTransformationTest : BaseKotlinGradleTest("mpp-simple") { + + override fun BaseKotlinScope.createProject() { buildGradleKts { resolve("projects/mpp-simple/mpp-simple.gradle.kts") } @@ -22,37 +30,190 @@ class MppProjectTest : BaseKotlinGradleTest("mpp-simple") { } @Test - fun testPlugin() { - val runner = test { - createProject() - runner { - arguments.add(":build") - } - } - val tasksToCheck = arrayOf( - ":compileKotlinJvm", - ":compileTestKotlinJvm", - ":transformJvmMainAtomicfu", - ":transformJvmTestAtomicfu", - ":compileKotlinJs", - ":transformJsMainAtomicfu" + fun testPluginApplication() = + checkTaskOutcomes( + executedTasks = listOf( + ":compileKotlinJvm", + ":compileTestKotlinJvm", + ":transformJvmMainAtomicfu", + ":transformJvmTestAtomicfu", + ":compileKotlinJs", + ":transformJsMainAtomicfu" + ), + excludedTasks = emptyList() ) - runner.build().apply { - tasksToCheck.forEach { - assertTaskSuccess(it) - } - } - // check that task outcomes are cached for the second build - runner.build().apply { - tasksToCheck.forEach { - assertTaskUpToDate(it) - } - } + @Test + fun testClasspath() { + runner.build() checkJvmCompilationClasspath( originalClassFile = "build/classes/kotlin/jvm/main/IntArithmetic.class", transformedClassFile = "build/classes/atomicfu/jvm/main/IntArithmetic.class" ) checkJsCompilationClasspath() } -}
\ No newline at end of file + + @Test + fun testAtomicfuReferences() { + runner.build() + checkBytecode("build/classes/atomicfu/jvm/main/IntArithmetic.class") + } +} + +/** + * Test that ensures correctness of `atomicfu-gradle-plugin` application to the MPP project, + * - JVM IR compiler plugin transformation (kotlinx.atomicfu.enableJvmIrTransformation=true) + * - no post-compilation bytecode transformation tasks are created + * - post-compilation js file transformation task created (as only JVM IR transformation applied, js is transformed in legacy mode) + * - no `kotlinx/atomicfu` references are left in the transformed bytecode. + */ +class MppJvmIrTransformationTest : BaseKotlinGradleTest("mpp-simple") { + + override fun BaseKotlinScope.createProject() { + buildGradleKts { + resolve("projects/mpp-simple/mpp-simple.gradle.kts") + } + settingsGradleKts { + resolve("projects/mpp-simple/settings.gradle.kts") + } + gradleProperties { + resolve("projects/mpp-simple/gradle.properties_jvm") + } + dir("src/commonMain/kotlin") {} + kotlin("IntArithmetic.kt", "commonMain") { + resolve("projects/mpp-simple/src/commonMain/kotlin/IntArithmetic.kt") + } + dir("src/commonTest/kotlin") {} + kotlin("ArithmeticTest.kt", "commonTest") { + resolve("projects/mpp-simple/src/commonTest/kotlin/ArithmeticTest.kt") + } + } + + @Test + fun testPluginApplication() = + checkTaskOutcomes( + executedTasks = listOf( + ":compileKotlinJvm", + ":compileTestKotlinJvm", + ":compileKotlinJs", + // legacy JS transformation + ":transformJsMainAtomicfu", + ":transformJsTestAtomicfu" + ), + excludedTasks = listOf( + ":transformJvmMainAtomicfu", + ":transformJvmTestAtomicfu" + ) + ) + + @Test + fun testAtomicfuReferences() { + runner.build() + checkBytecode("build/classes/kotlin/jvm/main/IntArithmetic.class") + } +} + +/** + * Test that ensures correctness of `atomicfu-gradle-plugin` application to the MPP project, + * - JS IR compiler plugin transformation (kotlinx.atomicfu.enableJsIrTransformation=true) + * - post-compilation bytecode transformation tasks are created (only JS IR transformation is applied, jvm is transformed in legacy mode) + * - no post-compilation js file transformation tasks are created + * - no `kotlinx/atomicfu` references are left in the transformed bytecode. + */ +class MppJsIrTransformationTest : BaseKotlinGradleTest("mpp-simple") { + + override fun BaseKotlinScope.createProject() { + buildGradleKts { + resolve("projects/mpp-simple/mpp-simple.gradle.kts") + } + settingsGradleKts { + resolve("projects/mpp-simple/settings.gradle.kts") + } + gradleProperties { + resolve("projects/mpp-simple/gradle.properties_js") + } + dir("src/commonMain/kotlin") {} + kotlin("IntArithmetic.kt", "commonMain") { + resolve("projects/mpp-simple/src/commonMain/kotlin/IntArithmetic.kt") + } + dir("src/commonTest/kotlin") {} + kotlin("ArithmeticTest.kt", "commonTest") { + resolve("projects/mpp-simple/src/commonTest/kotlin/ArithmeticTest.kt") + } + } + + @Test + fun testPluginApplication() = + checkTaskOutcomes( + executedTasks = listOf( + ":compileKotlinJvm", + ":compileTestKotlinJvm", + ":compileKotlinJs", + // legacy JVM transformation + ":transformJvmMainAtomicfu", + ":transformJvmTestAtomicfu" + ), + excludedTasks = listOf( + ":transformJsMainAtomicfu", + ":transformJsTestAtomicfu" + ) + ) + + @Test + fun testAtomicfuReferences() { + runner.build() + checkBytecode("build/classes/atomicfu/jvm/main/IntArithmetic.class") + } +} + +/** + * Test that ensures correctness of `atomicfu-gradle-plugin` application to the MPP project, + * - JS IR and JVM IR compiler plugin transformation + * - no post-compilation bytecode transformation tasks are created (only JS IR transformation is applied, jvm is transformed in legacy mode) + * - no post-compilation js file transformation tasks are created + * - no `kotlinx/atomicfu` references are left in the transformed bytecode. + */ +class MppBothIrTransformationTest : BaseKotlinGradleTest("mpp-simple") { + + override fun BaseKotlinScope.createProject() { + buildGradleKts { + resolve("projects/mpp-simple/mpp-simple.gradle.kts") + } + settingsGradleKts { + resolve("projects/mpp-simple/settings.gradle.kts") + } + gradleProperties { + resolve("projects/mpp-simple/gradle.properties_both") + } + dir("src/commonMain/kotlin") {} + kotlin("IntArithmetic.kt", "commonMain") { + resolve("projects/mpp-simple/src/commonMain/kotlin/IntArithmetic.kt") + } + dir("src/commonTest/kotlin") {} + kotlin("ArithmeticTest.kt", "commonTest") { + resolve("projects/mpp-simple/src/commonTest/kotlin/ArithmeticTest.kt") + } + } + + @Test + fun testPluginApplication() = + checkTaskOutcomes( + executedTasks = listOf( + ":compileKotlinJvm", + ":compileTestKotlinJvm", + ":compileKotlinJs" + ), + excludedTasks = listOf( + ":transformJvmMainAtomicfu", + ":transformJvmTestAtomicfu", + ":transformJsMainAtomicfu", + ":transformJsTestAtomicfu" + ) + ) + + @Test + fun testAtomicfuReferences() { + runner.build() + checkBytecode("build/classes/kotlin/jvm/main/IntArithmetic.class") + } +} |