Files
kotlin-fork/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt
T
Ivan Kylchik c7435ba760 Replace all occurrences of WITH_RUNTIME with WITH_STDLIB
We are going to deprecate `WITH_RUNTIME` directive. The main reason
behind this change is that `WITH_STDLIB` directive better describes
its meaning, specifically it will add kotlin stdlib to test's classpath.
2021-11-17 15:26:38 +03:00

65 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
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))
assertTrue(isJsUndefined(jsUndefined))
// TODO: Should these fail?
val n2 = getJsNullAsNonNullable()
val ud2 = getJsUndefinedAsNonNullable()
assertTrue(isJsNull(n2))
assertTrue(isJsUndefined(ud2))
return "OK"
}