Add tests for processing karma stack traces
This commit is contained in:
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
private const val WEBPACK_PROTOCOL = "webpack://"
|
||||
private const val KARMA_SOURCE_MAP_DELIMITER = " <-"
|
||||
|
||||
private const val STACK_TRACE_DELIMITER = "at "
|
||||
private const val WEBPACK_LOCAL_DELIMITER = ".."
|
||||
|
||||
fun processKarmaStackTrace(stackTrace: String): String {
|
||||
return stackTrace.lines()
|
||||
.map(::processWebpackName)
|
||||
.joinToString("\n") { line ->
|
||||
val index = line.indexOf(KARMA_SOURCE_MAP_DELIMITER)
|
||||
if (index == -1)
|
||||
line
|
||||
else
|
||||
line
|
||||
.removeRange(index, line.length - 1)
|
||||
.replace(WEBPACK_PROTOCOL, "")
|
||||
}
|
||||
}
|
||||
|
||||
fun processWebpackName(line: String): String {
|
||||
// example: "at MyTest../kotlin/check-js-test-test.js.MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)"
|
||||
// should be "at MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)"
|
||||
val stackTraceDelimiter = line.indexOf(STACK_TRACE_DELIMITER)
|
||||
val webpackLocalDelimiter = line.indexOf(WEBPACK_LOCAL_DELIMITER)
|
||||
if (stackTraceDelimiter == -1 || webpackLocalDelimiter == -1) {
|
||||
return line
|
||||
}
|
||||
|
||||
val traceStartIndex = stackTraceDelimiter + STACK_TRACE_DELIMITER.length
|
||||
val name = line.substring(
|
||||
traceStartIndex,
|
||||
webpackLocalDelimiter
|
||||
) // MyTest
|
||||
val fileStart = line.indexOf("(")
|
||||
val fullJsName = line.substring(webpackLocalDelimiter, fileStart) // ../kotlin/check-js-test-test.js.MyTest.foo
|
||||
|
||||
val nameIndex = fullJsName.indexOf(name)
|
||||
if (nameIndex == -1) {
|
||||
return line
|
||||
}
|
||||
|
||||
return line.replaceRange(traceStartIndex, fileStart, fullJsName.substring(nameIndex))
|
||||
}
|
||||
+2
-45
@@ -354,45 +354,8 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
parseConsole(value)
|
||||
}
|
||||
|
||||
override fun processStackTrace(stackTrace: String): String {
|
||||
return stackTrace.lines()
|
||||
.map(::processName)
|
||||
.joinToString("\n") { line ->
|
||||
val index = line.indexOf(KARMA_SOURCE_MAP_DELIMITER)
|
||||
if (index == -1)
|
||||
line
|
||||
else
|
||||
line
|
||||
.removeRange(index, line.length - 1)
|
||||
.replace(WEBPACK_PROTOCOL, "")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun processName(line: String): String {
|
||||
// example: "at MyTest../kotlin/check-js-test-test.js.MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)"
|
||||
// should be "at MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)"
|
||||
val stackTraceDelimiter = line.indexOf(STACK_TRACE_DELIMITER)
|
||||
val webpackLocalDelimiter = line.indexOf(WEBPACK_LOCAL_DELIMITER)
|
||||
if (stackTraceDelimiter == -1 || webpackLocalDelimiter == -1) {
|
||||
return line
|
||||
}
|
||||
|
||||
val traceStartIndex = stackTraceDelimiter + STACK_TRACE_DELIMITER.length
|
||||
val name = line.substring(
|
||||
traceStartIndex,
|
||||
webpackLocalDelimiter
|
||||
) // MyTest
|
||||
val fileStart = line.indexOf("(")
|
||||
val fullJsName = line.substring(webpackLocalDelimiter, fileStart) // ../kotlin/check-js-test-test.js.MyTest.foo
|
||||
|
||||
val nameIndex = fullJsName.indexOf(name)
|
||||
if (nameIndex == -1) {
|
||||
return line
|
||||
}
|
||||
|
||||
return line.replaceRange(traceStartIndex, fileStart, fullJsName.substring(nameIndex))
|
||||
}
|
||||
override fun processStackTrace(stackTrace: String): String =
|
||||
processKarmaStackTrace(stackTrace)
|
||||
|
||||
override fun getSuiteName(message: BaseTestSuiteMessage): String {
|
||||
val src = message.suiteName.trim()
|
||||
@@ -449,12 +412,6 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
const val CHROME_BIN = "CHROME_BIN"
|
||||
const val CHROME_CANARY_BIN = "CHROME_CANARY_BIN"
|
||||
|
||||
const val WEBPACK_PROTOCOL = "webpack://"
|
||||
const val KARMA_SOURCE_MAP_DELIMITER = " <-"
|
||||
|
||||
const val STACK_TRACE_DELIMITER = "at "
|
||||
const val WEBPACK_LOCAL_DELIMITER = ".."
|
||||
|
||||
val KARMA_PROBLEM = "(?m)^.*\\d{2} \\d{2} \\d{4,} \\d{2}:\\d{2}:\\d{2}.\\d{3}:(ERROR|WARN) \\[.*]: (.*)\$".toRegex()
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class KarmaStackTraceProcessorKtTest {
|
||||
|
||||
@Test
|
||||
fun processKarmaStackTrace() {
|
||||
val stackTrace = """AssertionError: Expected value to be true.
|
||||
at AssertionError_init_0 (webpack:///kotlin/exceptions.kt:102:36 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:33390:22)
|
||||
at DefaultJsAsserter.failWithMessage_0 (webpack:///src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:80:18 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:1569:13)
|
||||
at DefaultJsAsserter.assertTrue_o10pc4${'$'} (webpack:///src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:60:12 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:1536:12)
|
||||
at DefaultJsAsserter.assertTrue_4mavae${'$'} (webpack:///src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:67:8 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:1548:10)
|
||||
at assertTrue_0 (webpack:///Assertions.kt:37:20 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:1182:27)
|
||||
at assertTrue (webpack:///Assertions.kt:32:70 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:1177:5)
|
||||
at MyTest../kotlin/check-kotlin-js-test-test.js.MyTest.foo (webpack:///src/test/kotlin/MyTest.kt:7:8 <- /Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:53047:5)
|
||||
at Context.<anonymous> (/Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:53080:31)""".trimIndent()
|
||||
|
||||
val expected = """AssertionError: Expected value to be true.
|
||||
at AssertionError_init_0 (/kotlin/exceptions.kt:102:36)
|
||||
at DefaultJsAsserter.failWithMessage_0 (/src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:80:18)
|
||||
at DefaultJsAsserter.assertTrue_o10pc4${'$'} (/src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:60:12)
|
||||
at DefaultJsAsserter.assertTrue_4mavae${'$'} (/src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:67:8)
|
||||
at assertTrue_0 (/Assertions.kt:37:20)
|
||||
at assertTrue (/Assertions.kt:32:70)
|
||||
at MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)
|
||||
at Context.<anonymous> (/Users/ilya.goncharov/repos/check-kotlin-js-test/build/js/packages/check-kotlin-js-test-test/adapter.js:53080:31)""".trimIndent()
|
||||
|
||||
assertEquals(
|
||||
expected,
|
||||
processKarmaStackTrace(stackTrace)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun processWebpackName() {
|
||||
val processedLine = processWebpackName(
|
||||
"at MyTest../kotlin/check-js-test-test.js.MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)"
|
||||
)
|
||||
assertEquals(
|
||||
"at MyTest.foo (/src/test/kotlin/MyTest.kt:7:8)",
|
||||
processedLine
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun notProcessNotWebpackName() {
|
||||
val line = "at DefaultJsAsserter.assertTrue(/src/main/kotlin/kotlin/test/DefaultJsAsserter.kt:67)"
|
||||
assertEquals(
|
||||
line,
|
||||
processWebpackName(line)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun notProcessMessage() {
|
||||
val line = "AssertionError: Expected value to be true."
|
||||
assertEquals(
|
||||
line,
|
||||
processWebpackName(line)
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user