Files
kotlin-fork/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt
T
2022-10-18 20:48:12 +02:00

71 lines
1.4 KiB
Kotlin
Vendored

// TARGET_BACKEND: WASM
// WITH_STDLIB
// FILE: externals.js
function roundTrip(x) { return x; }
// FILE: externals.kt
external fun roundTrip(x: EI?): EI?
fun assertTrue(x: Boolean) {
if (!x) error("assertTrue fail")
}
fun assertFalse(x: Boolean) {
if (x) error("assertFalse fail")
}
external interface EI
@JsFun("() => null")
external fun getNull(): EI?
@JsFun("() => undefined")
external fun getUndefined(): EI?
@JsFun("(ref) => ref === null")
external fun isJsNull(ref: EI?): Boolean
@JsFun("(ref) => ref === undefined")
external fun isJsUndefined(ref: EI?): Boolean
@JsFun("() => null")
external fun getJsNullAsNonNullable(): EI
@JsFun("() => undefined")
external fun getJsUndefinedAsNonNullable(): EI
inline fun checkNPE(body: () -> Unit) {
var throwed = false
try {
body()
} catch (e: NullPointerException) {
throwed = true
}
assertTrue(throwed)
}
fun box(): String {
val jsNull = getNull()
val jsUndefined = getUndefined()
assertTrue(jsNull == null)
assertTrue((jsNull as Any?) == null)
assertTrue((jsNull as Any?) === null)
assertTrue(jsUndefined == null)
assertTrue(isJsNull(null))
assertTrue(isJsNull(null as EI?))
assertTrue(isJsNull(null as? EI?))
assertTrue(isJsNull(roundTrip(null)))
assertTrue(isJsNull(jsNull))
assertFalse(isJsUndefined(null))
checkNPE(::getJsNullAsNonNullable)
checkNPE(::getJsUndefinedAsNonNullable)
return "OK"
}