[Wasm] Teach gradle plugin to run wasm unit tests for nodejs and Mocha

This commit is contained in:
Igor Laevsky
2021-10-28 15:41:09 +03:00
parent 46b56c7642
commit 36d9001d54
4 changed files with 38 additions and 0 deletions
@@ -10,6 +10,7 @@ import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
@@ -269,6 +270,20 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
KotlinJsBinaryMode.DEVELOPMENT -> debugValue
}
override fun addLinkOptions(compilation: KotlinJsIrCompilation) {
if (compilation.platformType != KotlinPlatformType.wasm)
return
// Wasm requires different kinds of launchers for browser and nodejs. This might change in the future.
compilation.binaries
.withType(JsIrBinary::class.java)
.all {
it.linkTask.configure { linkTask ->
linkTask.kotlinOptions.freeCompilerArgs += "-Xwasm-launcher=esm"
}
}
}
companion object {
private const val WEBPACK_TASK_NAME = "webpack"
}
@@ -107,6 +107,8 @@ abstract class KotlinJsIrSubTarget(
}
}
abstract fun addLinkOptions(compilation: KotlinJsIrCompilation)
private fun configureTestsRun(testRun: KotlinJsPlatformTestRun, compilation: KotlinJsIrCompilation) {
fun KotlinJsPlatformTestRun.subtargetTestTaskName(): String = disambiguateCamelCased(
lowerCamelCaseName(
@@ -115,6 +117,8 @@ abstract class KotlinJsIrSubTarget(
)
)
addLinkOptions(compilation)
val testJs = project.registerTask<KotlinJsTest>(
testRun.subtargetTestTaskName(),
listOf(compilation)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
@@ -100,4 +101,18 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
configureRun(binary)
}
}
override fun addLinkOptions(compilation: KotlinJsIrCompilation) {
if (compilation.platformType != KotlinPlatformType.wasm)
return
// Wasm requires different kinds of launchers for browser and nodejs. This might change in the future.
compilation.binaries
.withType(JsIrBinary::class.java)
.all {
it.linkTask.configure { linkTask ->
linkTask.kotlinOptions.freeCompilerArgs += "-Xwasm-launcher=nodejs"
}
}
}
}
@@ -10,6 +10,7 @@ import org.gradle.process.ProcessForkOptions
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor.Companion.TC_PROJECT_PROPERTY
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
@@ -94,6 +95,9 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv
} else {
addAll(cliArg(TIMEOUT_ARG, timeout))
}
if (compilation.platformType == KotlinPlatformType.wasm) {
addAll(cliArg("-n", "experimental-wasm-typed-funcref,experimental-wasm-gc,experimental-wasm-eh"))
}
}
return TCServiceMessagesTestExecutionSpec(