From ccea2b73dad6890f1f3539efe790e086ae06c24b Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 11 Dec 2019 13:56:29 +0300 Subject: [PATCH] [Gradle, JS] Add using Debuggable non headless chrome --- .../targets/js/subtargets/KotlinBrowserJs.kt | 4 +-- .../js/subtargets/KotlinJsSubTarget.kt | 2 +- .../targets/js/subtargets/KotlinNodeJs.kt | 4 +-- .../targets/js/testing/karma/KotlinKarma.kt | 26 ++++++++++++++++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index ee411ecc0c7..d971f2192c8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -43,8 +43,8 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : override val testTaskDescription: String get() = "Run all ${target.name} tests inside browser using karma and webpack" - override fun configureDefaultTestFramework(it: KotlinJsTest) { - it.useKarma { + override fun configureDefaultTestFramework(testTask: KotlinJsTest) { + testTask.useKarma { useChromeHeadless() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 20a3e819c47..c689280e661 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -120,7 +120,7 @@ abstract class KotlinJsSubTarget( } } - protected abstract fun configureDefaultTestFramework(it: KotlinJsTest) + protected abstract fun configureDefaultTestFramework(testTask: KotlinJsTest) private fun configureMain() { target.compilations.all { compilation -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt index da807ef8192..5b1c40c5a4a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt @@ -24,8 +24,8 @@ open class KotlinNodeJs @Inject constructor(target: KotlinJsTarget) : (project.tasks.getByName(runTaskName) as NodeJsExec).body() } - override fun configureDefaultTestFramework(it: KotlinJsTest) { - it.useMocha { } + override fun configureDefaultTestFramework(testTask: KotlinJsTest) { + testTask.useMocha { } } override fun configureMain(compilation: KotlinJsCompilation) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 16a08a75d87..a52859899e7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -56,6 +56,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF useMocha() useWebpack() useSourceMapSupport() + + // necessary for debug as a fallback when no debuggable browsers found + addChromeLauncher() } private fun useKotlinReporter() { @@ -98,6 +101,19 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF ) } + fun useDebuggableChrome() { + val debuggableChrome = "DebuggableChrome" + + config.customLaunchers[debuggableChrome] = CustomLauncher("Chrome").apply { + flags.add("--remote-debugging-port=9222") + } + + useBrowser( + id = debuggableChrome, + dependency = versions.karmaChromeLauncher + ) + } + fun useChromeHeadless() { useBrowser( id = "ChromeHeadless", @@ -120,6 +136,10 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF requiredDependencies.add(dependency) } + private fun addChromeLauncher() { + requiredDependencies.add(versions.karmaChromeLauncher) + } + private fun useMocha() { requiredDependencies.add(versions.karmaMocha) requiredDependencies.add(versions.mocha) @@ -322,7 +342,11 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF confWriter.println() confWriter.print("config.set(") - GsonBuilder().setPrettyPrinting().create().toJson(config, confWriter) + GsonBuilder() + .setPrettyPrinting() + .disableHtmlEscaping() + .create() + .toJson(config, confWriter) confWriter.println(");") confJsWriters.forEach { it(confWriter) }