Files
kotlin-fork/libraries/stdlib/wasm/test/js/AsyncTest.kt
T
Svyatoslav Kuzmich 7ec6608e29 [Wasm] Add Promise and support tests that return Promise
Co-authored-by: Ilya Gorbunov <Ilya.Gorbunov@jetbrains.com>

Merge-request: KT-MR-7717
Merged-by: Svyatoslav Kuzmich <svyatoslav.kuzmich@jetbrains.com>
2022-11-25 20:56:47 +00:00

63 lines
1.4 KiB
Kotlin

package test.js
import kotlin.js.*
import kotlin.test.*
@JsFun("async () => 'foo'")
internal external fun jsAsyncFoo(): Promise<Dynamic?>
@JsFun("() => 'foo'")
internal external fun jsFoo(): Dynamic
var state: Dynamic? = null
class MyThrowable : Throwable()
class AsyncTest {
@Test
fun test1(): Promise<Dynamic?> {
var thenExecuted = false
val p = jsAsyncFoo().then { value ->
state = value
thenExecuted = true
null
}
assertFalse(thenExecuted)
return p
}
@Test
fun test2(): Promise<Dynamic?> {
assertEquals(state, jsFoo())
var thenExecuted = false
val p = jsAsyncFoo().then {
assertEquals(state, jsFoo())
thenExecuted = true
null
}.then {
assertEquals(state, jsFoo())
thenExecuted = true
null
}
assertFalse(thenExecuted)
return p
}
@Test
fun testJsValueToThrowableOrNull1(): Promise<Dynamic?> {
val p = jsAsyncFoo().then {
throw MyThrowable()
null
}.catch { e ->
assert(e.toThrowableOrNull() is MyThrowable)
null
}
return p
}
@Test
fun testJsValueToThrowableOrNull2() {
val e = MyThrowable()
assertEquals((e as Dynamic).toThrowableOrNull(), e)
}
}