tmp
diff --git a/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt b/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
index f5a7639..c549046 100644
--- a/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
+++ b/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
@@ -46,18 +46,18 @@
private val qunitAsserter = QUnitAsserter()
-internal var assertHook: (Boolean, String?, Any?, Any?) -> Unit = { _,_,_,_ -> }
+internal var assertHook: (result: Boolean, expected: Any?, actual: Any?, lazyMessage: () -> String?) -> Unit = { _, _, _, _ -> }
// TODO: make object in 1.2
class QUnitAsserter : Asserter {
- val innerAsserter = object: Asserter {
+ private var expected: Any? = undefined
+ private var actual: Any? = undefined
+ private var msg: () -> String? = { null }
+ private val innerAsserter = object : Asserter {
override fun fail(message: String?): Nothing {
- failWithMessage(message)
- }
-
- private fun failWithMessage(message: String?): Nothing {
+ assertHook(false, expected, actual, msg)
if (message == null)
throw AssertionError()
else
@@ -65,33 +65,58 @@
}
}
+ private inline fun <T> withInfo(noinline msgFn: () -> String?,
+ e: Any? = undefined,
+ a: Any? = undefined,
+ fn: Asserter.() -> T): T {
+ msg = msgFn
+ expected = e
+ actual = a
+ innerAsserter.fn()
+ // If no exception was thrown
+ assertHook(true, expected, actual, msg)
+ // No need to clean up
+ }
+
override fun assertEquals(message: String?, expected: Any?, actual: Any?) {
- innerAsserter.assertEquals(message, expected, actual)
+ withInfo({ message }, expected, actual) {
+ assertEquals(message, expected, actual)
+ }
}
override fun assertNotEquals(message: String?, illegal: Any?, actual: Any?) {
- super.assertNotEquals(message, illegal, actual)
+ withInfo({ message }, expected, actual) {
+ assertNotEquals(message, illegal, actual)
+ }
}
override fun assertNull(message: String?, actual: Any?) {
- super.assertNull(message, actual)
+ withInfo({ message }, null, actual) {
+ assertNull(message, actual)
+ }
}
override fun assertNotNull(message: String?, actual: Any?) {
- super.assertNotNull(message, actual)
+ withInfo({ message }, a = actual) {
+ assertNotNull(message, actual)
+ }
}
override fun assertTrue(lazyMessage: () -> String?, actual: Boolean) {
- assertTrue(actual, lazyMessage())
+ withInfo(lazyMessage, true, actual) {
+ assertTrue(lazyMessage, actual)
+ }
}
override fun assertTrue(message: String?, actual: Boolean) {
- okFun(actual, message)
- if (!actual) failWithMessage(message)
+ withInfo({ message }, true, actual) {
+ assertTrue(message, actual)
+ }
}
override fun fail(message: String?): Nothing {
- okFun(false, message)
- failWithMessage(message)
+ withInfo({message}) {
+ fail(message)
+ }
}
}
\ No newline at end of file