| // 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" |
| } |