From 4c9b94330d737d19a36f3755438f351aa572033d Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 8 Jun 2023 13:18:06 +0000 Subject: [PATCH] [Gradle, Wasm] Use invariant path separator for wasm karma ^KT-58931 fixed --- .../targets/js/testing/karma/KotlinKarma.kt | 51 +++++++++---------- .../js/testing/karma/KotlinKarmaTest.kt | 36 +++++++++++++ 2 files changed, 60 insertions(+), 27 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarmaTest.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index a821a635639..b2e19b0effd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSetti import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.internal.MppTestReportHelper import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation @@ -31,13 +30,11 @@ import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir import org.jetbrains.kotlin.gradle.targets.js.dsl.WebpackRulesDsl.Companion.webpackRulesContainer import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm import org.jetbrains.kotlin.gradle.targets.js.jsQuoted -import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.* import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.tasks.KotlinTest -import org.jetbrains.kotlin.gradle.testing.internal.reportsDir import org.jetbrains.kotlin.gradle.utils.appendLine import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly @@ -47,7 +44,7 @@ import java.io.File class KotlinKarma( @Transient override val compilation: KotlinJsCompilation, private val services: () -> ServiceRegistry, - private val basePath: String + private val basePath: String, ) : KotlinJsTestFramework { @Transient private val project: Project = compilation.target.project @@ -328,7 +325,7 @@ class KotlinKarma( task: KotlinJsTest, forkOptions: ProcessForkOptions, nodeJsArgs: MutableList, - debug: Boolean + debug: Boolean, ): TCServiceMessagesTestExecutionSpec { val file = task.inputFileProperty.get().asFile val fileString = file.toString() @@ -347,7 +344,7 @@ class KotlinKarma( ) ) config.files.add( - createLoadWasm(file).normalize().absolutePath + createLoadWasm(npmProject.dir, file).normalize().absolutePath ) config.proxies["/${wasmFile.name}"] = wasmFileString @@ -591,27 +588,6 @@ class KotlinKarma( return adapterJs } - private fun createLoadWasm(file: File): File { - val static = npmProject.dir.resolve("static").also { - it.mkdirs() - } - val loadJs = static.resolve("load.js") - loadJs.printWriter().use { writer -> - val relativePath = file.toRelativeString(static) - writer.println( - """ - import exports from "$relativePath"; - - exports.startUnitTests(); - - window.__karma__.loaded(); - """.trimIndent() - ) - } - - return loadJs - } - private fun Appendable.appendFromConfigDir() { if (!configDirectory.isDirectory) { return @@ -623,5 +599,26 @@ class KotlinKarma( } } +internal fun createLoadWasm(npmProjectDir: File, file: File): File { + val static = npmProjectDir.resolve("static").also { + it.mkdirs() + } + val loadJs = static.resolve("load.js") + loadJs.printWriter().use { writer -> + val relativePath = file.relativeTo(static).invariantSeparatorsPath + writer.println( + """ + import exports from "$relativePath"; + + exports.startUnitTests(); + + window.__karma__.loaded(); + """.trimIndent() + ) + } + + return loadJs +} + private val KARMA_MESSAGE = "^.*\\d{2} \\d{2} \\d{4,} \\d{2}:\\d{2}:\\d{2}.\\d{3}:(ERROR|WARN|INFO|DEBUG|LOG) \\[.*]: ([\\w\\W]*)\$" .toRegex() diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarmaTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarmaTest.kt new file mode 100644 index 00000000000..79e900012b7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarmaTest.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.targets.js.testing.karma + +import org.junit.Test +import java.nio.file.Files.createTempDirectory +import kotlin.test.assertEquals + +class KotlinKarmaTest { + @Test + fun checkLoadWasm() { + val npmProjectDir = createTempDirectory("tmp") + val executableFile = npmProjectDir.resolve("kotlin/main.mjs") + + val loadWasm = createLoadWasm(npmProjectDir.toFile(), executableFile.toFile()) + + assertEquals( + "static/load.js", + loadWasm.relativeTo(npmProjectDir.toFile()).invariantSeparatorsPath + ) + + assertEquals( + """ + import exports from "../kotlin/main.mjs"; + + exports.startUnitTests(); + + window.__karma__.loaded(); + """.trimIndent(), + loadWasm.readText().trimIndent() + ) + } +} \ No newline at end of file