unit-tests: Add TeamCity logger

This commit is contained in:
Ilya Matveev
2017-09-25 13:59:58 +03:00
committed by ilmat192
parent 3e02eab4c9
commit 9cd5e86dd9
2 changed files with 46 additions and 1 deletions
@@ -0,0 +1,45 @@
package konan.test
import kotlin.text.StringBuilder
class TeamCityLogger : BaseTestLogger() {
private fun String.escapeForTC(): String = StringBuilder(length).apply {
for(char in this@escapeForTC) {
append(when(char) {
'|' -> "||"
'\'' -> "|'"
'\n' -> "|n"
'\r' -> "|r"
'[' -> "|["
']' -> "|]"
else -> char
})
}
}.toString()
private val TestCase.tcName
get() = name.escapeForTC()
private val TestSuite.tcName
get() = name.escapeForTC()
private fun finish(testCase: TestCase, durationMs: Long) =
report("testFinished name='${testCase.tcName}' duration='$durationMs'")
private fun report(msg: String) = println("##teamcity[$msg]")
override fun start(testCase: TestCase) = report("testStarted name='${testCase.tcName}'")
override fun startSuite(suite: TestSuite) = report("testSuiteStarted name='${suite.tcName}'")
override fun endSuite(suite: TestSuite, timeMillis: Long) = report("testSuiteFinished name='${suite.tcName}'")
override fun pass(testCase: TestCase, timeMillis: Long) = finish(testCase, timeMillis)
override fun fail(testCase: TestCase, e: Throwable, timeMillis: Long) {
// TODO: Add 'details=...' command with the stack trace (need to implement stacktrace dumping as a string)
e.printStackTrace()
report("testFailed name='${testCase.tcName}' message='${e.message?.escapeForTC()}'")
finish(testCase, timeMillis)
}
override fun ignore(testCase: TestCase) = report("testIgnored name='${testCase.tcName}'")
}
@@ -143,7 +143,7 @@ object TestRunner {
private fun setLoggerFromArg(logger: String) {
when(logger.toUpperCase()) {
"GTEST" -> this.logger = GTestLogger()
"TEAMCITY" -> TODO() //this.logger = TeamCityLogger()
"TEAMCITY" -> this.logger = TeamCityLogger()
"SIMPLE" -> this.logger = SimpleTestLogger()
"SILENT" -> this.logger = SilentTestLogger()
else -> throw IllegalArgumentException("Unknown logger type. Available types: GTEST, TEAMCITY, SIMPLE")