/
StackTraceLineNumberTest.kt
67 lines (56 loc) · 1.76 KB
/
StackTraceLineNumberTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@file:Suppress("UNUSED_VALUE")
package io.mockk.it
import io.mockk.every
import io.mockk.verify
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
import kotlin.test.fail
/**
* Test related to GitHub issue #102
*/
class StackTraceLineNumberTest {
@Test
fun everyLineNumberIsCorrect() {
var stackTrace: Array<StackTraceElement>? = null
val ex = try {
stackTrace = Thread.currentThread().stackTrace; every { throw RuntimeException("failure") }
fail("No exception thrown")
} catch (ex: Exception) {
ex
}
checkLineNumber(ex, stackTrace, "everyLineNumberIsCorrect")
}
@Suppress("UNUSED_VALUE")
@Test
fun verifyLineNumberIsCorrect() {
var stackTrace: Array<StackTraceElement>? = null
val ex = try {
stackTrace = Thread.currentThread().stackTrace; verify { throw RuntimeException("failure") }
fail("No exception thrown")
} catch (ex: Exception) {
ex
}
checkLineNumber(ex, stackTrace, "verifyLineNumberIsCorrect")
}
private fun Array<StackTraceElement>.lineNumber(test: String, methodName: String): Int {
return first {
it.className == test &&
it.methodName == methodName
}.lineNumber
}
private fun checkLineNumber(
ex: Exception,
stackTrace: Array<StackTraceElement>?,
methodName: String
) {
val actualLN = ex.stackTrace.lineNumber(
"io.mockk.it.StackTraceLineNumberTest",
methodName
)
val expectedLN = stackTrace!!.lineNumber(
"io.mockk.it.StackTraceLineNumberTest",
methodName
)
assertEquals(expectedLN, actualLN)
}
}