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.testing.KotlinJsTest
|
||||
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.testing.internal.reportsDir
|
||||
import org.slf4j.Logger
|
||||
@@ -79,7 +80,13 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
baseReporterDecorator(this);
|
||||
|
||||
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
|
||||
override var testNameSuffix: String? = baseTestNameSuffix
|
||||
|
||||
lateinit var clientId: String
|
||||
val browserLogParser = KarmaBrowserLogParser()
|
||||
|
||||
override fun printNonTestOutput(text: String) {
|
||||
val value = text.trimEnd()
|
||||
progressLogger.progress(value)
|
||||
|
||||
if (value.contains(CLIENT_ID_MARKER)) {
|
||||
clientId = value
|
||||
.substringBeforeLast("]")
|
||||
.substringAfterLast("[")
|
||||
}
|
||||
|
||||
parseConsole(value)
|
||||
}
|
||||
|
||||
@@ -386,21 +387,34 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
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)
|
||||
|
||||
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