177 lines
3.9 KiB
Kotlin
Vendored
177 lines
3.9 KiB
Kotlin
Vendored
// FILE: externals.js
|
|
function createObject() {
|
|
return {
|
|
getXmethod() { return this.x; },
|
|
setXmethod(v) { this.x = v; }
|
|
};
|
|
}
|
|
|
|
function setX(obj, x) {
|
|
obj.x = x;
|
|
}
|
|
|
|
function getX(obj) {
|
|
return obj.x;
|
|
}
|
|
|
|
const readOnlyProp = 123;
|
|
var mutableProp = "20";
|
|
|
|
class C1 {
|
|
constructor(a, b) {
|
|
this.a = a;
|
|
this.b = b;
|
|
}
|
|
|
|
getA() { return this.a; }
|
|
setA(v) { this.a = v; }
|
|
|
|
getB() { return this.b; }
|
|
}
|
|
|
|
C1.Nested1 = class {}
|
|
C1.Nested1.Nested2 = class {}
|
|
C1.Nested1.Nested2.Nested3 = class {
|
|
constructor(x) {
|
|
this.x = x;
|
|
}
|
|
|
|
foo() { return this.x + " from Nested 3"; }
|
|
}
|
|
|
|
class C2 extends C1 {
|
|
constructor(a, b) {
|
|
super(a, b);
|
|
this.c = "C";
|
|
}
|
|
}
|
|
|
|
|
|
C2.Object1 = { Object2: { Object3: { x: "C2.Object1.Object2.Object3.x" } } }
|
|
|
|
const externalObj = {
|
|
x: "externalObj.x",
|
|
y: { x: "externalObj.y.x" },
|
|
c: class { x = "(new externalObj.c()).x" }
|
|
}
|
|
|
|
function jsRenamed() {
|
|
return 'renamed'
|
|
}
|
|
|
|
// FILE: externals.kt
|
|
external interface Obj {
|
|
var x: Int
|
|
fun getXmethod(): Int
|
|
fun setXmethod(v: Int)
|
|
}
|
|
external fun createObject(): Obj
|
|
external fun setX(obj: Obj, x: Int)
|
|
external fun getX(obj: Obj): Int
|
|
|
|
external val readOnlyProp: Int
|
|
external var mutableProp: String
|
|
|
|
open external class C1 {
|
|
constructor(a: String, b: String)
|
|
var a: String
|
|
val b: String
|
|
|
|
fun getA(): String
|
|
fun setA(x: String)
|
|
fun getB(): String
|
|
|
|
class Nested1 {
|
|
class Nested2 {
|
|
class Nested3 {
|
|
constructor(x: String)
|
|
fun foo(): String
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
external class C2 : C1 {
|
|
constructor(a: String, b: String)
|
|
|
|
val c: String
|
|
|
|
object Object1 {
|
|
object Object2 {
|
|
object Object3 {
|
|
val x: String
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
external object externalObj {
|
|
val x: String
|
|
object y {
|
|
val x: String
|
|
}
|
|
class c {
|
|
val x: String
|
|
}
|
|
}
|
|
|
|
@JsName("jsRenamed")
|
|
external fun testJsName(): String
|
|
|
|
fun box(): String {
|
|
val obj = createObject()
|
|
setX(obj, 100)
|
|
if (getX(obj) != 100) return "Fail 2"
|
|
|
|
if (obj.x != 100) return "Fail 2.1"
|
|
obj.x = 200
|
|
if (getX(obj) != 200) return "Fail 2.2"
|
|
val objXRef = obj::x
|
|
objXRef.set(300)
|
|
if (getX(obj) != 300 || obj.x != 300 || objXRef.get() != 300) return "Fail 2.3"
|
|
|
|
if (obj.getXmethod() != 300) return "Fail 2.4"
|
|
obj.setXmethod(400)
|
|
if (obj.getXmethod() != 400 || getX(obj) != 400) return "Fail 2.5"
|
|
|
|
if (readOnlyProp != 123) return "Fail 3"
|
|
if (::readOnlyProp.get() != 123) return "Fail 4"
|
|
if (mutableProp != "20") return "Fail 5"
|
|
mutableProp = "30"
|
|
if (mutableProp != "30") return "Fail 6"
|
|
(::mutableProp).set("40")
|
|
if (mutableProp != "40") return "Fail 7"
|
|
|
|
val c1 = C1("A", "B")
|
|
if (c1.a != "A" || c1.b != "B") return "Fail 8"
|
|
if (c1.getA() != "A" || c1.getB() != "B") return "Fail 9"
|
|
c1.setA("A2")
|
|
if (c1.a != "A2") return "Fail 10"
|
|
c1.a = "A3"
|
|
if (c1.getA() != "A3") return "Fail 11"
|
|
val c2 = C2("A", "B")
|
|
if (c2.a != "A" || c2.b != "B" || c2.c != "C") return "Fail 12"
|
|
val c2_as_c1: C1 = c2
|
|
if (c2_as_c1.a != "A" || c2_as_c1.b != "B") return "Fail 13"
|
|
|
|
val nested3 = C1.Nested1.Nested2.Nested3("example")
|
|
if (nested3.foo() != "example from Nested 3") return "Fail 14"
|
|
|
|
if (C2.Object1.Object2.Object3.x != "C2.Object1.Object2.Object3.x") return "Fail 15"
|
|
if (externalObj.x != "externalObj.x") return "Fail 16"
|
|
if (externalObj.y.x != "externalObj.y.x") return "Fail 17"
|
|
if (externalObj.c().x != "(new externalObj.c()).x") return "Fail 18"
|
|
|
|
|
|
if (c1 as Any !is C1) return "Fail 19"
|
|
if (c2 as Any !is C1) return "Fail 20"
|
|
if (c2 as Any !is C2) return "Fail 21"
|
|
if (externalObj.c() as Any !is externalObj.c) return "Fail 22"
|
|
if (10 as Any is C1) return "Fail 23"
|
|
if (c1 as Any is C2) return "Fail 24"
|
|
|
|
if (testJsName() != "renamed") return "Fail 25"
|
|
|
|
return "OK"
|
|
}
|