@@ -5,13 +5,15 @@ import kotlin.test.*
5
5
6
6
public fun verifyStackTrace (e : Throwable , vararg traces : String ) {
7
7
val stacktrace = toStackTrace(e)
8
+ val normalizedActual = stacktrace.normalizeStackTrace()
8
9
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
+ }
13
15
}
14
-
16
+ // Check "Caused by" counts
15
17
val causes = stacktrace.count(" Caused by" )
16
18
assertNotEquals(0 , causes)
17
19
assertEquals(traces.map { it.count(" Caused by" ) }.sum(), causes)
@@ -23,14 +25,16 @@ public fun toStackTrace(t: Throwable): String {
23
25
return sw.toString()
24
26
}
25
27
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
31
35
32
- public fun applyBackspace (line : String ): String {
33
- val array = line. toCharArray()
36
+ public fun String. applyBackspace (): String {
37
+ val array = toCharArray()
34
38
val stack = CharArray (array.size)
35
39
var stackSize = - 1
36
40
for (c in array) {
@@ -40,7 +44,6 @@ public fun applyBackspace(line: String): String {
40
44
-- stackSize
41
45
}
42
46
}
43
-
44
47
return String (stack, 0 , stackSize)
45
48
}
46
49
0 commit comments