| // LANGUAGE: +ContextParameters | |
| // TARGET_BACKEND: WASM | |
| // ^^ KT-83093 | |
| // FILE: jsExport.kt | |
| external interface ContextA { fun value(): String } | |
| external interface ContextB { fun value(): String } | |
| context(a: ContextA) | |
| fun resolveValue(): String = a.value() | |
| @JsExport | |
| fun useAContextBlock(ctxA: ContextA): String = context(ctxA) { resolveValue() } | |
| @JsExport | |
| fun useAWith(ctxA: ContextA): String = with(ctxA) { resolveValue() } | |
| context(a: ContextA) | |
| private fun nestedInternal(): String = resolveValue() | |
| @JsExport | |
| fun useANested(ctxA: ContextA): String = context(ctxA) { nestedInternal() } | |
| //EXPORT_DECLARATION_WITH_CONTEXT_PARAMETERS | |
| //@JsExport | |
| //context(a: ContextA) | |
| //fun callValue(): String = resolveValue() | |
| // | |
| //@JsExport | |
| //context(a: ContextA) | |
| //fun callValueWithPrefix(prefix: String): String = prefix + resolveValue() | |
| // | |
| //@JsExport | |
| //context(a: ContextA, b: ContextB) | |
| //fun combineValues(): String = a.value() + b.value() | |
| @JsExport | |
| fun runAll(ctxA: ContextA): String = | |
| if (useAContextBlock(ctxA) == "OK" && useAWith(ctxA) == "OK" && useANested(ctxA) == "OK") "OK" | |
| else "FAIL" | |
| fun box(): String = "OK" | |
| // FILE: entry.mjs | |
| import { | |
| useAContextBlock, | |
| useAWith, | |
| useANested, | |
| runAll | |
| //callValue, | |
| //callValueWithPrefix, | |
| //combineValues | |
| } from "./index.mjs"; | |
| const ctxA = { value: () => "OK" }; | |
| if (useAContextBlock(ctxA) !== "OK") throw "Fail 1"; | |
| if (useAWith(ctxA) !== "OK") throw "Fail 2"; | |
| if (useANested(ctxA) !== "OK") throw "Fail 3"; | |
| if (runAll(ctxA) !== "OK") throw "Fail 4"; | |
| // | |
| //if (callValue(ctxA) !== "OK") throw "Fail 5"; | |
| //if (callValueWithPrefix(ctxA, "->") !== "->OK") throw "Fail 6"; | |
| // | |
| //const a = { value: () => "OK" }; | |
| //const b = { value: () => "B" }; | |
| //if (combineValues(a, b) !== "OKB") throw "Fail 7"; |