From 68cb28d76f13c4e060bb6658df4add78ae5dc553 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Fri, 17 May 2019 09:27:50 +0300 Subject: [PATCH] Gradle, js, karma: source maps support #KT-31478 #KT-31011 #KT-30573 --- .../kotlin/gradle/targets/js/NpmVersions.kt | 1 + .../targets/js/subtargets/KotlinNodeJs.kt | 1 - .../gradle/targets/js/testing/KotlinJsTest.kt | 5 +++++ .../targets/js/testing/karma/KotlinKarma.kt | 22 ++++++++++++++----- .../targets/js/testing/karma/KramaConfig.kt | 6 +++++ 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt index fb991d5d7fe..a1504f20836 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt @@ -38,6 +38,7 @@ class NpmVersions { val karmaWebpack = NpmPackageVersion("karma-webpack", "*") val karmaCoverage = NpmPackageVersion("karma-coverage", "*") + val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "*") val karmaSourceMapSupport = NpmPackageVersion("karma-source-map-support", "1.4.0") val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner") 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 08e5869ac8c..b72cbe9f279 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 @@ -34,7 +34,6 @@ class KotlinNodeJs(target: KotlinJsTarget) : val compileKotlinTask = compilation.compileKotlinTask runTask.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask) - val npmProject = compilation.npmProject runTask.args(compileKotlinTask.outputFile) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt index 79b6868f370..120fcc7f2db 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.testing import groovy.lang.Closure import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.Internal import org.gradle.api.tasks.SkipWhenEmpty import org.gradle.process.internal.DefaultProcessForkOptions @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha import org.jetbrains.kotlin.gradle.targets.js.testing.nodejs.KotlinNodeJsTestRunner import org.jetbrains.kotlin.gradle.tasks.KotlinTest +import java.io.File open class KotlinJsTest : KotlinTest(), RequiresNpmDependencies { @Internal @@ -37,6 +39,9 @@ open class KotlinJsTest : KotlinTest(), RequiresNpmDependencies { @Internal override lateinit var compilation: KotlinJsCompilation + val entry: File + @InputFile get() = compilation.compileKotlinTask.outputFile + val compilationId: String @Input get() = compilation.let { val target = it.target 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 85be8b53fdf..8f58b2a5f1c 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 @@ -55,8 +55,10 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF useTeamcityReporter() useMocha() useWebpack() + useSourceMapSupport() config.singleRun = true + config.autoWatch = false } private fun useTeamcityReporter() { @@ -64,6 +66,11 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF config.reporters.add("teamcity") } + internal fun watch() { + config.singleRun = false + config.autoWatch = true + } + fun useConfigDirectory(dir: File) { configDirectory = dir } @@ -157,11 +164,13 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF } fun useSourceMapSupport() { - config.frameworks.add("source-map-support") - requiredDependencies.add(versions.karmaSourceMapSupport) - + requiredDependencies.add(versions.karmaSourceMapLoader) sourceMaps = true addPreprocessor("sourcemap") + + // stacktraces with sourcemaps + requiredDependencies.add(versions.karmaSourceMapSupport) + config.frameworks.add("source-map-support") } private fun addPreprocessor(name: String, predicate: (String) -> Boolean = { true }) { @@ -219,7 +228,7 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF val args = nodeJsArgs + nodeModules.map { npmProject.require(it) } + - listOf("start", karmaConfJs.absolutePath) + listOf("start", karmaConfJs.absolutePath, "--debug") return object : TCServiceMessagesTestExecutionSpec( forkOptions, @@ -244,8 +253,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF override fun createClient(testResultProcessor: TestResultProcessor, log: Logger) = object : TCServiceMessagesClient(testResultProcessor, clientSettings, log) { override fun printNonTestOutput(actualText: String) { - suppressedOutput.appendln(actualText) - progressLogger.progress(actualText) + val value = actualText.trimEnd() + suppressedOutput.appendln(value) + progressLogger.progress(value) } val baseTestNameSuffix get() = settings.testNameSuffix diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KramaConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KramaConfig.kt index d825d25134d..a5304b39ab4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KramaConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KramaConfig.kt @@ -13,6 +13,7 @@ class KarmaConfig { val files: MutableList = mutableListOf() val frameworks: MutableList = mutableListOf() val browsers: MutableList = mutableListOf() + val customLaunchers: MutableMap = mutableMapOf() val reporters: MutableList = mutableListOf() val preprocessors: MutableMap> = mutableMapOf() var coverageReporter: CoverageReporter? = null @@ -35,6 +36,11 @@ class KarmaConfig { } } + class CustomLauncher(var base: String) { + val flags = mutableListOf() + var debug: Boolean? = null + } + override fun toString(): String { return "KarmaConfig(singleRun=$singleRun, autoWatch=$autoWatch, basePath=$basePath, files=$files, frameworks=$frameworks, browsers=$browsers, reporters=$reporters, preprocessors=$preprocessors, coverageReporter=$coverageReporter)" }