kotlin.test: Make inline methods 'todo' and 'currentStackTrace' @InlineOnly not to loose stack trace.
Move related tests to separate file and verify the line numbers. #KT-11348 Fixed
This commit is contained in:
@@ -36,11 +36,18 @@ inline fun <reified T : Throwable> assertFailsWith(message: String? = null, noin
|
|||||||
* Comments out a [block] of test code until it is implemented while keeping a link to the code
|
* Comments out a [block] of test code until it is implemented while keeping a link to the code
|
||||||
* to implement in your unit test output
|
* to implement in your unit test output
|
||||||
*/
|
*/
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
inline fun todo(@Suppress("UNUSED_PARAMETER") block: () -> Unit) {
|
inline fun todo(@Suppress("UNUSED_PARAMETER") block: () -> Unit) {
|
||||||
System.out.println("TODO at " + currentStackTrace()[1])
|
System.out.println("TODO at " + currentStackTrace()[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "NOTHING_TO_INLINE")
|
/**
|
||||||
|
* Returns an array of stack trace elements, each representing one stack frame.
|
||||||
|
* The first element of the array (assuming the array is not empty) represents the top of the
|
||||||
|
* stack, which is the place where [currentStackTrace] function was called from.
|
||||||
|
*/
|
||||||
|
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||||
|
@kotlin.internal.InlineOnly
|
||||||
inline fun currentStackTrace() = (java.lang.Exception() as java.lang.Throwable).stackTrace
|
inline fun currentStackTrace() = (java.lang.Exception() as java.lang.Throwable).stackTrace
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package kotlinx.testing.tests
|
package kotlin.test.tests
|
||||||
|
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
import org.junit.*
|
import org.junit.*
|
||||||
@@ -31,16 +31,4 @@ class BasicAssertionsJVMTest {
|
|||||||
throw IllegalArgumentException()
|
throw IllegalArgumentException()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testToDo() {
|
|
||||||
todo {
|
|
||||||
fail("Shouldn't pass here")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCurrentStackTrace() {
|
|
||||||
assertEquals("BasicAssertionsJVMTest.kt", currentStackTrace()[0].fileName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package kotlin.test.tests
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
// NOTE: These tests verify line numbers of stack frames, so they might be quite fragile to reordering etc
|
||||||
|
|
||||||
|
class StackTraceJVMTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCurrentStackTrace() {
|
||||||
|
/* <-- line number */ val topFrame = currentStackTrace()[0]
|
||||||
|
assertEquals("StackTraceJVMTest.kt", topFrame.fileName)
|
||||||
|
assertEquals(12, topFrame.lineNumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testToDo() {
|
||||||
|
todo {
|
||||||
|
fail("Shouldn't pass here")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user