diff --git a/libraries/kotlin.test/js/src/main/kotlin/kotlin/test/TestApi.kt b/libraries/kotlin.test/js/src/main/kotlin/kotlin/test/TestApi.kt index 05a4f4c74bd..04843dfef58 100644 --- a/libraries/kotlin.test/js/src/main/kotlin/kotlin/test/TestApi.kt +++ b/libraries/kotlin.test/js/src/main/kotlin/kotlin/test/TestApi.kt @@ -65,11 +65,26 @@ internal fun adapter(): FrameworkAdapter { return result } +@JsName("kotlinTest") +external val kotlinTestNamespace: KotlinTestNamespace -internal fun detectAdapter() = when { - isQUnit() -> QUnitAdapter() - isJasmine() -> JasmineLikeAdapter() - else -> BareAdapter() +external interface KotlinTestNamespace { + val adapterTransformer: ((FrameworkAdapter) -> FrameworkAdapter)? +} + +internal fun detectAdapter(): FrameworkAdapter { + val frameworkAdapter = when { + isQUnit() -> QUnitAdapter() + isJasmine() -> JasmineLikeAdapter() + else -> BareAdapter() + } + return if (jsTypeOf(kotlinTestNamespace) != "undefined") { + val adapterTransform = kotlinTestNamespace + .adapterTransformer + if (adapterTransform !== null) { + adapterTransform(frameworkAdapter) + } else frameworkAdapter + } else frameworkAdapter } internal val NAME_TO_ADAPTER: Map FrameworkAdapter> = mapOf( diff --git a/libraries/tools/kotlin-test-js-runner/karma.ts b/libraries/tools/kotlin-test-js-runner/karma.ts index e3766c61956..220a373f08b 100755 --- a/libraries/tools/kotlin-test-js-runner/karma.ts +++ b/libraries/tools/kotlin-test-js-runner/karma.ts @@ -5,28 +5,25 @@ import {CliArgsParser, getDefaultCliDescription} from "./src/CliArgsParser"; import {runWithFilteringAndConsoleAdapters} from "./src/Adapter"; +import {KotlinTestRunner} from "./src/KotlinTestRunner"; -let kotlin_test -try { - kotlin_test = require('kotlin-test'); -} catch { +const parser = new CliArgsParser( + getDefaultCliDescription(), + (exitCode) => { + throw new Error(`Exit with ${exitCode}`) + } +); +const untypedArgs = parser.parse(window.__karma__.config.args); + +const adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner = current => + runWithFilteringAndConsoleAdapters(current, untypedArgs); + +window.kotlinTest = { + adapterTransformer: adapterTransformer } -if (kotlin_test) { - const parser = new CliArgsParser( - getDefaultCliDescription(), - (exitCode) => { - throw new Error(`Exit with ${exitCode}`) - } - ); - const untypedArgs = parser.parse(window.__karma__.config.args); - - const initialAdapter = kotlin_test.kotlin.test.detectAdapter_8be2vx$(); - kotlin_test.setAdapter(runWithFilteringAndConsoleAdapters(initialAdapter, untypedArgs)); - - const resultFun = window.__karma__.result; - window.__karma__.result = function (result) { - console.log(`--END_KOTLIN_TEST--\n${JSON.stringify(result)}`); - resultFun(result) - }; -} \ No newline at end of file +const resultFun = window.__karma__.result; +window.__karma__.result = function (result) { + console.log(`--END_KOTLIN_TEST--\n${JSON.stringify(result)}`); + resultFun(result) +}; \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/nodejs.ts b/libraries/tools/kotlin-test-js-runner/nodejs.ts index ee9c8477a65..4433ed07157 100755 --- a/libraries/tools/kotlin-test-js-runner/nodejs.ts +++ b/libraries/tools/kotlin-test-js-runner/nodejs.ts @@ -1,19 +1,16 @@ import {CliArgsParser, getDefaultCliDescription} from "./src/CliArgsParser"; import {runWithFilteringAndConsoleAdapters} from "./src/Adapter"; +import {KotlinTestRunner} from "./src/KotlinTestRunner"; -let kotlin_test -try { - kotlin_test = require('kotlin-test'); -} catch { -} +const parser = new CliArgsParser( + getDefaultCliDescription(), + process.exit +); +const untypedArgs = parser.parse(process.argv); -if (kotlin_test) { - const parser = new CliArgsParser( - getDefaultCliDescription(), - process.exit - ); - const untypedArgs = parser.parse(process.argv); +const adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner = current => + runWithFilteringAndConsoleAdapters(current, untypedArgs); - const initialAdapter = kotlin_test.kotlin.test.detectAdapter_8be2vx$(); - kotlin_test.setAdapter(runWithFilteringAndConsoleAdapters(initialAdapter, untypedArgs)); +(globalThis as any).kotlinTest = { + adapterTransformer: adapterTransformer } \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/window.d.ts b/libraries/tools/kotlin-test-js-runner/window.d.ts index 78af8f20fe0..29f8cca6ee9 100644 --- a/libraries/tools/kotlin-test-js-runner/window.d.ts +++ b/libraries/tools/kotlin-test-js-runner/window.d.ts @@ -3,12 +3,20 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -interface Window { - __karma__: { - config: { - args: string[] - }, - result: (result: BrowserResult) => void +import {KotlinTestRunner} from "./src/KotlinTestRunner"; + +declare global { + interface Window { + __karma__: { + config: { + args: string[] + }, + result: (result: BrowserResult) => void + } + + kotlinTest: { + adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner + } } }