@@ -5,13 +5,15 @@ import kotlin.test.*
55
66public fun verifyStackTrace (e : Throwable , vararg traces : String ) {
77 val stacktrace = toStackTrace(e)
8+ val normalizedActual = stacktrace.normalizeStackTrace()
89 traces.forEach {
9- assertTrue(
10- stacktrace.trimStackTrace().contains(it.trimStackTrace()),
11- " \n Expected trace element:\n $it \n\n Actual stacktrace:\n $stacktrace "
12- )
10+ val normalizedExpected = it.normalizeStackTrace()
11+ if (! normalizedActual.contains(normalizedExpected)) {
12+ // A more readable error message would be produced by assertEquals
13+ assertEquals(normalizedExpected, normalizedActual, " Actual trace does not contain expected one" )
14+ }
1315 }
14-
16+ // Check "Caused by" counts
1517 val causes = stacktrace.count(" Caused by" )
1618 assertNotEquals(0 , causes)
1719 assertEquals(traces.map { it.count(" Caused by" ) }.sum(), causes)
@@ -23,14 +25,16 @@ public fun toStackTrace(t: Throwable): String {
2325 return sw.toString()
2426}
2527
26- public fun String.trimStackTrace (): String {
27- return applyBackspace(trimIndent().replace(Regex (" :[0-9]+" ), " " )
28- .replace(" kotlinx_coroutines_core_main" , " " ) // yay source sets
29- .replace(" kotlinx_coroutines_core" , " " ))
30- }
28+ public fun String.normalizeStackTrace (): String =
29+ applyBackspace()
30+ .replace(Regex (" :[0-9]+" ), " " ) // remove line numbers
31+ .replace(" kotlinx_coroutines_core_main" , " " ) // yay source sets
32+ .replace(" kotlinx_coroutines_core" , " " )
33+ .replace(Regex (" @[0-9a-f]+" ), " " ) // remove hex addresses in debug toStrings
34+ .lines().joinToString(" \n " ) // normalize line separators
3135
32- public fun applyBackspace (line : String ): String {
33- val array = line. toCharArray()
36+ public fun String. applyBackspace (): String {
37+ val array = toCharArray()
3438 val stack = CharArray (array.size)
3539 var stackSize = - 1
3640 for (c in array) {
@@ -40,7 +44,6 @@ public fun applyBackspace(line: String): String {
4044 -- stackSize
4145 }
4246 }
43-
4447 return String (stack, 0 , stackSize)
4548}
4649
0 commit comments