From a3d45964f3536fa46d083b7d400ffb42f15de82a Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 26 Apr 2023 18:47:58 +0200 Subject: [PATCH] [Gradle, JS] Add test with webpack + es modules --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 38 ++++++++++++++++++- .../app/build.gradle.kts | 7 ++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 2b04d9d013d..28a45cb695e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -174,7 +174,7 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { assertEquals( setOf( - projectPath.resolve("build/js/packages/kotlin-js-browser-app/kotlin/kotlin-js-browser-base-js-ir.js").toFile(), + projectPath.resolve("build/js/packages/kotlin-js-browser-app/kotlin/kotlin-js-browser-base-js-ir.mjs").toFile(), projectPath.resolve("build/js/packages/kotlin-js-browser-app/kotlin/foo/foo.txt").toFile(), ), modified.toSet() @@ -487,6 +487,42 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { } } + @DisplayName("Webpack works with ES modules") + @GradleTest + fun testWebpackWorksWithEsModules(gradleVersion: GradleVersion) { + project("kotlin-js-browser-project", gradleVersion) { + buildGradleKts.modify(::transformBuildScriptWithPluginsDsl) + + subProject("app").buildGradleKts.modify { originalScript -> + buildString { + append(originalScript) + append( + """ + | + |tasks.named("compileDevelopmentExecutableKotlinJs") { + | kotlinOptions { + | moduleKind = "es" + | } + |} + | + |tasks.named("compileProductionExecutableKotlinJs") { + | kotlinOptions { + | moduleKind = "es" + | } + |} + | + """.trimMargin() + ) + } + } + + build("browserProductionWebpack") { + assertTasksExecuted(":app:browserProductionWebpack") + assertFileExists(subProject("app").projectPath.resolve("build/${Distribution.DIST}/js/productionExecutable/app.js")) + } + } + } + @DisplayName("Multiple targets works without clash") @GradleTest fun testMultipleJsTargets(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts index 1403ef6bc32..af7f9b38db2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts @@ -1,4 +1,5 @@ import org.jetbrains.kotlin.gradle.targets.js.NpmVersions +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink import javax.inject.Inject plugins { @@ -76,3 +77,9 @@ tasks.named("compileKotlinJs") tasks.named("compileTestKotlinJs") { kotlinOptions.freeCompilerArgs += "-Xforce-deprecated-legacy-compiler-usage" } + +tasks.withType().configureEach { + kotlinOptions { + moduleKind = "es" + } +}