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 0983ec907d9..3496cf2b1e2 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 @@ -146,7 +146,7 @@ class KotlinKarma( { type: 'kotlin-test-js-runner/tc-log-appender.js', //default layout - layout: { type: 'pattern', pattern: '%[%d{DATE}:%p [%c]: %]%m' } + layout: { type: 'pattern', pattern: '%[%d{DATETIME}:%p [%c]: %]%m' } } ] """.trimIndent() @@ -241,6 +241,7 @@ class KotlinKarma( } private fun useWebpack() { + config.frameworks.add("webpack") requiredDependencies.add(versions.karmaWebpack) requiredDependencies.add( webpackMajorVersion.choose( @@ -353,26 +354,6 @@ class KotlinKarma( } } - private fun createAdapterJs( - file: String, - debug: Boolean - ): File { - val adapterJs = npmProject.dir.resolve("adapter-browser.js") - adapterJs.printWriter().use { writer -> - val karmaRunner = npmProject.require("kotlin-test-js-runner/kotlin-test-karma-runner.js") - // It is necessary for debugger attaching (--inspect-brk analogue) - if (debug) { - writer.println("debugger;") - } - - writer.println("require(${karmaRunner.jsQuoted()})") - - writer.println("module.exports = require(${file.jsQuoted()})") - } - - return adapterJs - } - override fun createTestExecutionSpec( task: KotlinJsTest, forkOptions: ProcessForkOptions, @@ -381,9 +362,8 @@ class KotlinKarma( ): TCServiceMessagesTestExecutionSpec { val file = task.inputFileProperty.get().asFile.toString() - val adapterJs = createAdapterJs(file, debug) - - config.files.add(adapterJs.canonicalPath) + config.files.add(npmProject.require("kotlin-test-js-runner/kotlin-test-karma-runner.js")) + config.files.add(file) if (debug) { config.singleRun = false diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt index 66d71561b99..40af18b3fe7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt @@ -14,13 +14,11 @@ 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 -import org.jetbrains.kotlin.gradle.targets.js.jsQuoted import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs -import java.io.File class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, private val basePath: String) : KotlinJsTestFramework { @@ -72,7 +70,6 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv val file = task.inputFileProperty.get().asFile.toString() - val adapter = createAdapterJs(file, "kotlin-test-nodejs-runner", ADAPTER_NODEJS) val args = mutableListOf( "--require", npmProject.require("source-map-support/register.js") @@ -81,9 +78,10 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv add("--inspect-brk") } add(mocha) - add(adapter.canonicalPath) + add(file) addAll(cliArgs.toList()) addAll(cliArg("--reporter", "kotlin-test-js-runner/mocha-kotlin-reporter.js")) + addAll(cliArg("--require", npmProject.require("kotlin-test-js-runner/kotlin-test-nodejs-runner.js"))) if (debug) { add(NO_TIMEOUT_ARG) } else { @@ -102,8 +100,9 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv npmProject.require("source-map-support/register.js") ).apply { add(mocha) - add(createAdapterJs(file, "kotlin-test-nodejs-empty-runner", ADAPTER_EMPTY_NODEJS).canonicalPath) + add(file) addAll(cliArgs.toList()) + addAll(cliArg("--require", npmProject.require("kotlin-test-js-runner/kotlin-test-nodejs-empty-runner.js"))) addAll(cliArg("-n", "experimental-wasm-typed-funcref,experimental-wasm-gc,experimental-wasm-eh")) } @@ -122,28 +121,7 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv return value?.let { listOf(cli, it) } ?: emptyList() } - private fun createAdapterJs( - file: String, - adapter: String, - adapterName: String - ): File { - val adapterJs = npmProject.dir.resolve(adapterName) - adapterJs.printWriter().use { writer -> - val adapterFile = npmProject.require("kotlin-test-js-runner/$adapter.js") - val escapedFile = file.jsQuoted() - - writer.println("require(${adapterFile.jsQuoted()})") - - writer.println("module.exports = require($escapedFile)") - } - - return adapterJs - } - companion object { - const val ADAPTER_NODEJS = "adapter-nodejs.js" - const val ADAPTER_EMPTY_NODEJS = "adapter-empty-nodejs.js" - private const val DEFAULT_TIMEOUT = "2s" } } diff --git a/libraries/tools/kotlin-test-js-runner/karma.ts b/libraries/tools/kotlin-test-js-runner/karma.ts index 220a373f08b..4b7646d4c6b 100755 --- a/libraries/tools/kotlin-test-js-runner/karma.ts +++ b/libraries/tools/kotlin-test-js-runner/karma.ts @@ -13,10 +13,18 @@ const parser = new CliArgsParser( throw new Error(`Exit with ${exitCode}`) } ); + const untypedArgs = parser.parse(window.__karma__.config.args); -const adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner = current => - runWithFilteringAndConsoleAdapters(current, untypedArgs); +let adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner +if (window.kotlinTest) { + const currentAdapterTransformer = window.kotlinTest.adapterTransformer; + adapterTransformer = current => + runWithFilteringAndConsoleAdapters(currentAdapterTransformer(current), untypedArgs); +} else { + adapterTransformer = current => + runWithFilteringAndConsoleAdapters(current, untypedArgs); +} window.kotlinTest = { adapterTransformer: adapterTransformer diff --git a/libraries/tools/kotlin-test-js-runner/src/KotlinTestTeamCityConsoleAdapter.ts b/libraries/tools/kotlin-test-js-runner/src/KotlinTestTeamCityConsoleAdapter.ts index c79a92b8b31..e122e6e4081 100644 --- a/libraries/tools/kotlin-test-js-runner/src/KotlinTestTeamCityConsoleAdapter.ts +++ b/libraries/tools/kotlin-test-js-runner/src/KotlinTestTeamCityConsoleAdapter.ts @@ -36,8 +36,6 @@ export function runWithTeamCityConsoleAdapter( runner.suite(name, isIgnored, fn) }, test: function (name: string, isIgnored: boolean, fn: () => void) { - let revertLogMethods: CallableFunction[] = []; - runner.test(name, isIgnored, () => { const log = (type: LogType) => function (message?: any, ...optionalParams: any[]) { let messageType: 'testStdOut' | 'testStdErr' @@ -62,7 +60,7 @@ export function runWithTeamCityConsoleAdapter( [method: string]: (message?: any, ...optionalParams: any[]) => void }; - revertLogMethods = logTypes + const revertLogMethods = logTypes .map(method => { const realMethod = globalConsole[method]; globalConsole[method] = log(method);