[Gradle, JS] Improvements of kotlin test adapters
- divide adapter.js into different files, which frameworks could load separately - possibility to inject something to kotlin-test adapter by user ^KT-54418 fixed
This commit is contained in:
committed by
Space Team
parent
d423782fac
commit
b01411544a
+4
-24
@@ -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
|
||||
|
||||
+4
-26
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user