From bea80f8b5462aa0fa12d5b5817e7b249f8370396 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 8 Feb 2023 12:50:29 +0000 Subject: [PATCH] [Gradle, JS] Add debugger.js with debugger statement to stop on the first line in a browser ^KT-56488 fixed --- .../targets/js/testing/karma/KotlinKarma.kt | 31 ++++++++++++++++--- .../kotlin-test-js-runner/build.gradle.kts | 1 + .../karma-debug-framework.js | 4 +-- .../karma-kotlin-debug-plugin.js | 8 +++++ .../kotlin-test-js-runner/rollup.config.js | 7 +++++ 5 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 libraries/tools/kotlin-test-js-runner/karma-kotlin-debug-plugin.js 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 8e573a1d96a..90648ba4bbc 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 @@ -24,9 +24,12 @@ 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 -import org.jetbrains.kotlin.gradle.targets.js.* +import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion +import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency +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.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.* @@ -36,6 +39,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Compan 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.isParentOf import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.slf4j.Logger @@ -54,6 +58,7 @@ class KotlinKarma( private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) private val nodeRootPackageDir by lazy { nodeJs.rootPackageDir } private val versions = nodeJs.versions + private val nodeModulesCacheDir = nodeJs.nodeModulesGradleCacheDir private val config: KarmaConfig = KarmaConfig() private val requiredDependencies = mutableSetOf() @@ -369,11 +374,13 @@ class KotlinKarma( val file = task.inputFileProperty.get().asFile.toString() config.files.add(npmProject.require("kotlin-test-js-runner/kotlin-test-karma-runner.js")) - config.files.add(file) - - if (debug) { + if (!debug) { + config.files.add(file) + } else { config.singleRun = false + config.files.add(createDebuggerJs(file).normalize().absolutePath) + confJsWriters.add { //language=ES6 it.appendLine( @@ -383,7 +390,7 @@ class KotlinKarma( config.plugins.push('karma-*'); // default } - config.plugins.push('kotlin-test-js-runner/karma-debug-framework.js'); + config.plugins.push('kotlin-test-js-runner/karma-kotlin-debug-plugin.js'); """.trimIndent() ) } @@ -589,6 +596,20 @@ class KotlinKarma( } } + private fun createDebuggerJs( + file: String, + ): File { + val adapterJs = npmProject.dir.resolve("debugger.js") + adapterJs.printWriter().use { writer -> + // It is necessary for debugger attaching (--inspect-brk analogue) + writer.println("debugger;") + + writer.println("module.exports = require(${file.jsQuoted()})") + } + + return adapterJs + } + private fun Appendable.appendFromConfigDir() { if (!configDirectory.isDirectory) { return diff --git a/libraries/tools/kotlin-test-js-runner/build.gradle.kts b/libraries/tools/kotlin-test-js-runner/build.gradle.kts index 1ca401257ca..b81f485b0c9 100644 --- a/libraries/tools/kotlin-test-js-runner/build.gradle.kts +++ b/libraries/tools/kotlin-test-js-runner/build.gradle.kts @@ -44,6 +44,7 @@ tasks { "nodejs-idle.ts", "karma.ts", "karma-kotlin-reporter.js", + "karma-kotlin-debug-plugin.js", "karma-debug-runner.js", "karma-debug-framework.js", "mocha-kotlin-reporter.js", diff --git a/libraries/tools/kotlin-test-js-runner/karma-debug-framework.js b/libraries/tools/kotlin-test-js-runner/karma-debug-framework.js index 771eae5ea90..f805c2ba784 100644 --- a/libraries/tools/kotlin-test-js-runner/karma-debug-framework.js +++ b/libraries/tools/kotlin-test-js-runner/karma-debug-framework.js @@ -31,6 +31,4 @@ function configureTimeouts(injector) { initDebug.$inject = ['injector']; -module.exports = { - 'framework:karma-kotlin-debug': ['factory', initDebug] -}; \ No newline at end of file +module.exports = initDebug; \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/karma-kotlin-debug-plugin.js b/libraries/tools/kotlin-test-js-runner/karma-kotlin-debug-plugin.js new file mode 100644 index 00000000000..644432f07e6 --- /dev/null +++ b/libraries/tools/kotlin-test-js-runner/karma-kotlin-debug-plugin.js @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2023 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. + */ + +module.exports = { + 'framework:karma-kotlin-debug': ['factory', require("./karma-debug-framework")], +}; \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/rollup.config.js b/libraries/tools/kotlin-test-js-runner/rollup.config.js index ad1434e12f8..30957bc3abc 100644 --- a/libraries/tools/kotlin-test-js-runner/rollup.config.js +++ b/libraries/tools/kotlin-test-js-runner/rollup.config.js @@ -40,6 +40,13 @@ export default [ }, plugins: plugins() }, + { + input: './karma-kotlin-debug-plugin.js', + output: { + file: 'lib/karma-kotlin-debug-plugin.js', + format: 'esm' + } + }, { input: './karma-debug-runner.js', output: {