@@ -17,21 +17,23 @@ fun Project.addAllMultiplatformTargets(
1717 plugins.withId(" org.jetbrains.kotlin.multiplatform" ) {
1818 extensions.configure<KotlinMultiplatformExtension > {
1919 applyCoilHierarchyTemplate()
20+ val sharedKarmaConfigDirectory = rootProject.projectDir.resolve(" karma.config.d" )
2021
2122 jvm()
2223
2324 js {
2425 browser {
2526 testTask {
26- useKarma { useChromeHeadless() }
27+ useKarma {
28+ useChromeHeadless()
29+ useConfigDirectory(sharedKarmaConfigDirectory)
30+ }
2731 }
2832 }
2933 nodejs {
3034 testTask {
35+ // Compose Multiplatform is not supported on nodejs.
3136 enabled = false
32- useMocha {
33- timeout = " 60s"
34- }
3537 }
3638 }
3739 binaries.executable()
@@ -45,33 +47,40 @@ fun Project.addAllMultiplatformTargets(
4547 .buildDirectory
4648 .dir(" wasm/packages/coil-root${path.replace(" :" , " -" )} -test/kotlin" )
4749 .map { it.asFile }
50+ val wasmTestModuleProvider = skikoDirProvider.map {
51+ it.resolve(" coil-root${path.replace(" :" , " -" )} -test.uninstantiated.mjs" )
52+ }
4853
4954 browser {
5055 testTask {
51- useKarma { useChromeHeadless() }
52- }
53- }
54- nodejs {
55- testTask {
56- enabled = false
56+ useKarma {
57+ useChromeHeadless()
58+ useConfigDirectory(sharedKarmaConfigDirectory)
59+ }
5760 doFirst {
58- val skikoModule = skikoDirProvider .get().resolve( " skiko.mjs " )
59- if (skikoModule .isFile) {
60- // The generated Skiko module disables its Node-specific loader
61- // with `if (false)`. Rewrite it so the Node path runs and the
62- // tests can load `skiko.wasm` .
63- val original = skikoModule .readText()
64- val patched = original.replaceFirst (
65- " if (false) { " ,
66- " if (ENVIRONMENT_IS_NODE) { "
61+ val wasmTestModule = wasmTestModuleProvider .get()
62+ if (wasmTestModule .isFile) {
63+ // Kotlin/Wasm checks `process.release.name` to detect Node.js.
64+ // When webpack injects a browser `process` shim without `release`,
65+ // this throws and leaves Karma browser tests stuck idle .
66+ val original = wasmTestModule .readText()
67+ val patched = original.replace (
68+ " (process.release.name === 'node') " ,
69+ " (process.release && process.release.name === 'node') " ,
6770 )
6871 if (patched != original) {
69- skikoModule .writeText(patched)
72+ wasmTestModule .writeText(patched)
7073 }
7174 }
7275 }
7376 }
7477 }
78+ nodejs {
79+ testTask {
80+ // Compose Multiplatform is not supported on nodejs.
81+ enabled = false
82+ }
83+ }
7584 binaries.executable()
7685 binaries.library()
7786 }
0 commit comments