aboutsummaryrefslogtreecommitdiff
path: root/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt
diff options
context:
space:
mode:
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.kt219
1 files changed, 219 insertions, 0 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
new file mode 100644
index 0000000..e95b091
--- /dev/null
+++ b/atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/MppProjectTest.kt
@@ -0,0 +1,219 @@
+package kotlinx.atomicfu.plugin.gradle.test
+
+import kotlinx.atomicfu.plugin.gradle.internal.*
+import org.junit.*
+
+/**
+ * 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")
+ }
+ settingsGradleKts {
+ resolve("projects/mpp-simple/settings.gradle.kts")
+ }
+ 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",
+ ":transformJvmMainAtomicfu",
+ ":transformJvmTestAtomicfu",
+ ":compileKotlinJs",
+ ":transformJsMainAtomicfu"
+ ),
+ excludedTasks = emptyList()
+ )
+
+ @Test
+ fun testClasspath() {
+ runner.build()
+ checkJvmCompilationClasspath(
+ originalClassFile = "build/classes/kotlin/jvm/main/IntArithmetic.class",
+ transformedClassFile = "build/classes/atomicfu/jvm/main/IntArithmetic.class"
+ )
+ checkJsCompilationClasspath()
+ }
+
+ @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")
+ }
+}