Files
kotlin-fork/compiler/testData/codegen/boxWasmJsInterop/nullableExternRefs.kt
T
Svyatoslav Kuzmich 4fc461a2ff [Wasm] Imporove external interface support
* Support boxing/unboxing when casting to Any
* Support ===, equals, hashCode, toString

* Support adapting String in interop boundary
2021-10-23 01:26:12 +03:00

65 lines
1.4 KiB
Kotlin
Vendored

// TARGET_BACKEND: WASM
// WITH_RUNTIME
// 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"
}