[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',
|
type: 'kotlin-test-js-runner/tc-log-appender.js',
|
||||||
//default layout
|
//default layout
|
||||||
layout: { type: 'pattern', pattern: '%[%d{DATE}:%p [%c]: %]%m' }
|
layout: { type: 'pattern', pattern: '%[%d{DATETIME}:%p [%c]: %]%m' }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
@@ -241,6 +241,7 @@ class KotlinKarma(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun useWebpack() {
|
private fun useWebpack() {
|
||||||
|
config.frameworks.add("webpack")
|
||||||
requiredDependencies.add(versions.karmaWebpack)
|
requiredDependencies.add(versions.karmaWebpack)
|
||||||
requiredDependencies.add(
|
requiredDependencies.add(
|
||||||
webpackMajorVersion.choose(
|
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(
|
override fun createTestExecutionSpec(
|
||||||
task: KotlinJsTest,
|
task: KotlinJsTest,
|
||||||
forkOptions: ProcessForkOptions,
|
forkOptions: ProcessForkOptions,
|
||||||
@@ -381,9 +362,8 @@ class KotlinKarma(
|
|||||||
): TCServiceMessagesTestExecutionSpec {
|
): TCServiceMessagesTestExecutionSpec {
|
||||||
val file = task.inputFileProperty.get().asFile.toString()
|
val file = task.inputFileProperty.get().asFile.toString()
|
||||||
|
|
||||||
val adapterJs = createAdapterJs(file, debug)
|
config.files.add(npmProject.require("kotlin-test-js-runner/kotlin-test-karma-runner.js"))
|
||||||
|
config.files.add(file)
|
||||||
config.files.add(adapterJs.canonicalPath)
|
|
||||||
|
|
||||||
if (debug) {
|
if (debug) {
|
||||||
config.singleRun = false
|
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.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
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
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
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.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, private val basePath: String) :
|
class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, private val basePath: String) :
|
||||||
KotlinJsTestFramework {
|
KotlinJsTestFramework {
|
||||||
@@ -72,7 +70,6 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv
|
|||||||
|
|
||||||
val file = task.inputFileProperty.get().asFile.toString()
|
val file = task.inputFileProperty.get().asFile.toString()
|
||||||
|
|
||||||
val adapter = createAdapterJs(file, "kotlin-test-nodejs-runner", ADAPTER_NODEJS)
|
|
||||||
val args = mutableListOf(
|
val args = mutableListOf(
|
||||||
"--require",
|
"--require",
|
||||||
npmProject.require("source-map-support/register.js")
|
npmProject.require("source-map-support/register.js")
|
||||||
@@ -81,9 +78,10 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv
|
|||||||
add("--inspect-brk")
|
add("--inspect-brk")
|
||||||
}
|
}
|
||||||
add(mocha)
|
add(mocha)
|
||||||
add(adapter.canonicalPath)
|
add(file)
|
||||||
addAll(cliArgs.toList())
|
addAll(cliArgs.toList())
|
||||||
addAll(cliArg("--reporter", "kotlin-test-js-runner/mocha-kotlin-reporter.js"))
|
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) {
|
if (debug) {
|
||||||
add(NO_TIMEOUT_ARG)
|
add(NO_TIMEOUT_ARG)
|
||||||
} else {
|
} else {
|
||||||
@@ -102,8 +100,9 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv
|
|||||||
npmProject.require("source-map-support/register.js")
|
npmProject.require("source-map-support/register.js")
|
||||||
).apply {
|
).apply {
|
||||||
add(mocha)
|
add(mocha)
|
||||||
add(createAdapterJs(file, "kotlin-test-nodejs-empty-runner", ADAPTER_EMPTY_NODEJS).canonicalPath)
|
add(file)
|
||||||
addAll(cliArgs.toList())
|
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"))
|
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()
|
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 {
|
companion object {
|
||||||
const val ADAPTER_NODEJS = "adapter-nodejs.js"
|
|
||||||
const val ADAPTER_EMPTY_NODEJS = "adapter-empty-nodejs.js"
|
|
||||||
|
|
||||||
private const val DEFAULT_TIMEOUT = "2s"
|
private const val DEFAULT_TIMEOUT = "2s"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,18 @@ const parser = new CliArgsParser(
|
|||||||
throw new Error(`Exit with ${exitCode}`)
|
throw new Error(`Exit with ${exitCode}`)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const untypedArgs = parser.parse(window.__karma__.config.args);
|
const untypedArgs = parser.parse(window.__karma__.config.args);
|
||||||
|
|
||||||
const adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner = current =>
|
let adapterTransformer: (current: KotlinTestRunner) => KotlinTestRunner
|
||||||
runWithFilteringAndConsoleAdapters(current, untypedArgs);
|
if (window.kotlinTest) {
|
||||||
|
const currentAdapterTransformer = window.kotlinTest.adapterTransformer;
|
||||||
|
adapterTransformer = current =>
|
||||||
|
runWithFilteringAndConsoleAdapters(currentAdapterTransformer(current), untypedArgs);
|
||||||
|
} else {
|
||||||
|
adapterTransformer = current =>
|
||||||
|
runWithFilteringAndConsoleAdapters(current, untypedArgs);
|
||||||
|
}
|
||||||
|
|
||||||
window.kotlinTest = {
|
window.kotlinTest = {
|
||||||
adapterTransformer: adapterTransformer
|
adapterTransformer: adapterTransformer
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ export function runWithTeamCityConsoleAdapter(
|
|||||||
runner.suite(name, isIgnored, fn)
|
runner.suite(name, isIgnored, fn)
|
||||||
},
|
},
|
||||||
test: function (name: string, isIgnored: boolean, fn: () => void) {
|
test: function (name: string, isIgnored: boolean, fn: () => void) {
|
||||||
let revertLogMethods: CallableFunction[] = [];
|
|
||||||
|
|
||||||
runner.test(name, isIgnored, () => {
|
runner.test(name, isIgnored, () => {
|
||||||
const log = (type: LogType) => function (message?: any, ...optionalParams: any[]) {
|
const log = (type: LogType) => function (message?: any, ...optionalParams: any[]) {
|
||||||
let messageType: 'testStdOut' | 'testStdErr'
|
let messageType: 'testStdOut' | 'testStdErr'
|
||||||
@@ -62,7 +60,7 @@ export function runWithTeamCityConsoleAdapter(
|
|||||||
[method: string]: (message?: any, ...optionalParams: any[]) => void
|
[method: string]: (message?: any, ...optionalParams: any[]) => void
|
||||||
};
|
};
|
||||||
|
|
||||||
revertLogMethods = logTypes
|
const revertLogMethods = logTypes
|
||||||
.map(method => {
|
.map(method => {
|
||||||
const realMethod = globalConsole[method];
|
const realMethod = globalConsole[method];
|
||||||
globalConsole[method] = log(method);
|
globalConsole[method] = log(method);
|
||||||
|
|||||||
Reference in New Issue
Block a user