| // TARGET_BACKEND: JS_IR, JS_IR_ES6 | |
| // FILE: lib.kt | |
| import kotlin.js.Console | |
| external val consoleAccessCounter: Int | |
| external fun resetConsoleAccessCounter(): Unit | |
| inline fun resetCounter(): Unit { resetConsoleAccessCounter() } | |
| fun logHelloWorld(c: Console) { | |
| c.log("Hello") | |
| c.log("world") | |
| c.log("!") | |
| } | |
| inline fun logHelloWorldInline(c: Console) { | |
| c.log("Hello") | |
| c.log("world") | |
| c.log("!") | |
| } | |
| // FILE: main.kt | |
| import kotlin.js.Console | |
| fun box(): String { | |
| js(""" | |
| var consoleAccessCounter = 0; | |
| function resetConsoleAccessCounter() { | |
| consoleAccessCounter = 0; | |
| } | |
| Object.defineProperty(globalThis, 'console', { | |
| get: function () { | |
| ++consoleAccessCounter; | |
| return { log: function () {} }; | |
| } | |
| }); | |
| """) | |
| logHelloWorld(console) | |
| if (consoleAccessCounter != 1) return "Fail 1" | |
| logHelloWorldInline(console) | |
| if (consoleAccessCounter != 2) return "Fail 2" | |
| console.also { | |
| it.log("foo") | |
| it.log("bar") | |
| } | |
| if (consoleAccessCounter != 3) return "Fail 3" | |
| console.apply { | |
| log("foo") | |
| log("bar") | |
| } | |
| if (consoleAccessCounter != 4) return "Fail 4" | |
| console.log(resetCounter()) | |
| if (consoleAccessCounter != 0) return "Fail 5" | |
| return "OK" | |
| } |