blob: d9bdabb96053d6922b1dc9c4bc840869c541d44e [file]
// TARGET_BACKEND: WASM
// WITH_STDLIB
private const val EXPECTED = "A\uD83D\uDE80\u0000e\u0301Z"
@JsFun("() => \"A\\uD83D\\uDE80\\u0000e\\u0301Z\"")
external fun jsCreateString(): String
@JsFun("""(s) => typeof s === "string" && !(s instanceof String)""")
external fun jsIsPrimitiveString(s: String): Boolean
private fun charArrayString(): String =
charArrayOf('A', '\uD83D', '\uDE80', '\u0000', 'e', '\u0301', 'Z').concatToString()
fun box(): String {
val literal = EXPECTED
val fromJs = jsCreateString()
val fromCharArray = charArrayString()
val fromJsString = literal.toJsString().toString()
val values = listOf(literal, fromJs, fromCharArray, fromJsString)
for ((index, value) in values.withIndex()) {
if (value != EXPECTED) return "Fail value $index: <$value>"
if (value != literal) return "Fail equals $index"
if (value.hashCode() != literal.hashCode()) return "Fail hash $index"
if (!jsIsPrimitiveString(value)) return "Fail primitive $index"
}
val map = hashMapOf(literal to "OK")
if (map[fromJs] != "OK") return "Fail map from JS"
if (map[fromCharArray] != "OK") return "Fail map from char array"
if (map[fromJsString] != "OK") return "Fail map from JsString"
return "OK"
}