Add parse of karma log to find browser's messages
- Log browser's message respects their log level
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.testing.karma
|
||||||
|
|
||||||
|
class KarmaBrowserLogParser {
|
||||||
|
private var overflowConsole: Boolean = false
|
||||||
|
private var previousType: BrowserLogType? = null
|
||||||
|
|
||||||
|
fun parseKarmaBrowserLog(text: String): BrowserLog? {
|
||||||
|
val logStartIndex = text.indexOf("$BROWSER_LOG_SURROUNDER[")
|
||||||
|
if (logStartIndex == -1 && !overflowConsole) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
var browser: String? = null
|
||||||
|
var type: String? = null
|
||||||
|
var log: String = text
|
||||||
|
|
||||||
|
if (logStartIndex != -1 && !overflowConsole) {
|
||||||
|
val afterPrefix = text.substring(logStartIndex)
|
||||||
|
browser = afterPrefix.substringAfter("browser='").substringBefore("'")
|
||||||
|
type = afterPrefix.substringAfter("type='").substringBefore("'")
|
||||||
|
|
||||||
|
log = afterPrefix.substringAfter("log=")
|
||||||
|
}
|
||||||
|
|
||||||
|
val logEndIndex = text.indexOf("]$BROWSER_LOG_SURROUNDER")
|
||||||
|
if (logEndIndex != -1) {
|
||||||
|
overflowConsole = false
|
||||||
|
log = log.substringBefore("]$BROWSER_LOG_SURROUNDER")
|
||||||
|
} else {
|
||||||
|
overflowConsole = true
|
||||||
|
}
|
||||||
|
|
||||||
|
val currentType = when (type) {
|
||||||
|
"log" -> BrowserLogType.LOG
|
||||||
|
"info" -> BrowserLogType.INFO
|
||||||
|
"warn" -> BrowserLogType.WARN
|
||||||
|
"error" -> BrowserLogType.ERROR
|
||||||
|
"debug" -> BrowserLogType.DEBUG
|
||||||
|
else -> previousType
|
||||||
|
}
|
||||||
|
|
||||||
|
previousType = currentType
|
||||||
|
|
||||||
|
return BrowserLog(
|
||||||
|
browser = browser,
|
||||||
|
type = currentType,
|
||||||
|
log = log
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val BROWSER_LOG_SURROUNDER = "##browser"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class BrowserLog(
|
||||||
|
val browser: String?,
|
||||||
|
val type: BrowserLogType?,
|
||||||
|
val log: String
|
||||||
|
)
|
||||||
|
|
||||||
|
enum class BrowserLogType(val value: String) {
|
||||||
|
LOG("log"),
|
||||||
|
INFO("info"),
|
||||||
|
WARN("warn"),
|
||||||
|
ERROR("error"),
|
||||||
|
DEBUG("debug")
|
||||||
|
}
|
||||||
+36
-22
@@ -24,6 +24,7 @@ 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.karma.KarmaBrowserLogParser.Companion.BROWSER_LOG_SURROUNDER
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
@@ -79,7 +80,13 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
|||||||
baseReporterDecorator(this);
|
baseReporterDecorator(this);
|
||||||
|
|
||||||
this.onBrowserLog = (browser, log, type) => {
|
this.onBrowserLog = (browser, log, type) => {
|
||||||
this.write("##browser[" + "browser='" + browser + "' " + "type='" + type + "' " + "log=" + log + "]##browser\n");
|
this.write(
|
||||||
|
"$BROWSER_LOG_SURROUNDER[" +
|
||||||
|
"browser='" + browser + "' " +
|
||||||
|
"type='" + type + "' " +
|
||||||
|
"log=" + log +
|
||||||
|
"]$BROWSER_LOG_SURROUNDER\n"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -338,18 +345,12 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
|||||||
val baseTestNameSuffix get() = settings.testNameSuffix
|
val baseTestNameSuffix get() = settings.testNameSuffix
|
||||||
override var testNameSuffix: String? = baseTestNameSuffix
|
override var testNameSuffix: String? = baseTestNameSuffix
|
||||||
|
|
||||||
lateinit var clientId: String
|
val browserLogParser = KarmaBrowserLogParser()
|
||||||
|
|
||||||
override fun printNonTestOutput(text: String) {
|
override fun printNonTestOutput(text: String) {
|
||||||
val value = text.trimEnd()
|
val value = text.trimEnd()
|
||||||
progressLogger.progress(value)
|
progressLogger.progress(value)
|
||||||
|
|
||||||
if (value.contains(CLIENT_ID_MARKER)) {
|
|
||||||
clientId = value
|
|
||||||
.substringBeforeLast("]")
|
|
||||||
.substringAfterLast("[")
|
|
||||||
}
|
|
||||||
|
|
||||||
parseConsole(value)
|
parseConsole(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,21 +387,34 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (::clientId.isInitialized && text.startsWith(clientId)) {
|
|
||||||
val logLevel = text
|
|
||||||
.substringAfter(clientId)
|
|
||||||
.substringBefore(":")
|
|
||||||
.trim()
|
|
||||||
|
|
||||||
when (logLevel) {
|
|
||||||
"WARN" -> log.warn(text)
|
|
||||||
"ERROR" -> log.error(text)
|
|
||||||
"DEBUG" -> log.debug(text)
|
|
||||||
else -> log.info(text)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suppressedOutput.appendln(text)
|
suppressedOutput.appendln(text)
|
||||||
|
|
||||||
|
val browserLog = browserLogParser.parseKarmaBrowserLog(text) ?: return
|
||||||
|
|
||||||
|
val formattedMessage = formatMessage(browserLog)
|
||||||
|
|
||||||
|
when (browserLog.type) {
|
||||||
|
BrowserLogType.LOG -> println(formattedMessage)
|
||||||
|
BrowserLogType.WARN -> log.warn(formattedMessage)
|
||||||
|
BrowserLogType.ERROR -> log.error(formattedMessage)
|
||||||
|
BrowserLogType.DEBUG -> log.debug(formattedMessage)
|
||||||
|
else -> log.info(formattedMessage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun formatMessage(browserLog: BrowserLog): String {
|
||||||
|
val browser = browserLog.browser
|
||||||
|
val browserPart = browser?.plus(" ") ?: ""
|
||||||
|
|
||||||
|
val type = browserLog.type
|
||||||
|
val typePart = if (browser != null && type != null) {
|
||||||
|
type
|
||||||
|
.value
|
||||||
|
.toUpperCase()
|
||||||
|
.plus(" ")
|
||||||
|
} else ""
|
||||||
|
|
||||||
|
return "$browserPart$typePart${browserLog.log}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user