From 480a9c16fb84b4c4f0d8c45d611c5f34f58b539d Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 14 Apr 2020 19:45:49 +0300 Subject: [PATCH] [Gradle, JS] Stack trace processor #KT-38109 fixed #KT-38286 fixed --- .../js/TeamCityMessageStackTraceProcessor.kt | 19 +++++++++++++++++++ .../targets/js/testing/karma/KotlinKarma.kt | 19 ++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/TeamCityMessageStackTraceProcessor.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/TeamCityMessageStackTraceProcessor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/TeamCityMessageStackTraceProcessor.kt new file mode 100644 index 0000000000000..675abba564158 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/TeamCityMessageStackTraceProcessor.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2020 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. + */ + +package org.jetbrains.kotlin.gradle.targets.js + +internal class TeamCityMessageStackTraceProcessor { + private var firstLine: String? = null + + fun process(text: String, firstLineAction: (String?) -> Unit) { + firstLine = if (text.trim().startsWith("at ")) { + firstLineAction(firstLine) + null + } else { + text + } + } +} \ No newline at end of file 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 3e0c90c927e8a..bfebc887f4030 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 @@ -425,7 +425,7 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : private val failedBrowsers: MutableList = mutableListOf() - private var previousLine: String = "" + private var stackTraceProcessor = TeamCityMessageStackTraceProcessor() override fun printNonTestOutput(text: String, type: String?) { val value = text.trimEnd() @@ -436,19 +436,16 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : private fun parseConsole(text: String, type: String?) { - val actualType = if (text.trim().startsWith("at ")) { - parseConsole(previousLine, ERROR) - previousLine = "" - ERROR - } else { - previousLine = text - type + var actualType = type + stackTraceProcessor.process(text) { line -> + actualType = ERROR + line?.let { parseConsole(it, actualType) } } - val launcherMessage = KARMA_LAUNCHER_MESSAGE.matchEntire(text) + val launcherMessage = KARMA_MESSAGE.matchEntire(text) val actualText = if (launcherMessage != null) { - val (message) = launcherMessage.destructured + val (_, message) = launcherMessage.destructured when (actualType?.toLowerCase()) { WARN, ERROR -> { processFailedBrowsers(text) @@ -542,5 +539,5 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : } } -private val KARMA_LAUNCHER_MESSAGE = "^.*\\[launcher]: ([\\w\\W]*)\$" +private val KARMA_MESSAGE = "^.*\\d{2} \\d{2} \\d{4,} \\d{2}:\\d{2}:\\d{2}.\\d{3}:(ERROR|WARN|INFO|DEBUG|LOG) \\[.*]: ([\\w\\W]*)\$" .toRegex() \ No newline at end of file