KT-2752: fix JsName with explicit use target. Add some tests for JsName with use targets
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package foo
|
||||
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class A {
|
||||
@JsName("xx") val x: Int by B(23)
|
||||
|
||||
@get:JsName("getYY") val y: Int by B(42)
|
||||
}
|
||||
|
||||
class B(val value: Int) {
|
||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = value
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
assertEquals(23, a.x)
|
||||
assertEquals(42, a.y)
|
||||
|
||||
val d: dynamic = a
|
||||
assertEquals(23, d.xx)
|
||||
assertEquals(42, d.getYY())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+2
-2
@@ -3,10 +3,10 @@ package foo
|
||||
|
||||
fun bar(x: Int) = x
|
||||
|
||||
fun box(): Boolean {
|
||||
fun box(): String {
|
||||
assertEquals(23, bar(23))
|
||||
assertEquals(42, foo.bar.x)
|
||||
return true
|
||||
return "OK"
|
||||
}
|
||||
|
||||
// FILE: foobar.kt
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@ private fun bar() = 23
|
||||
|
||||
private val bar = 42
|
||||
|
||||
fun box(): Boolean {
|
||||
fun box(): String {
|
||||
assertEquals(23, bar())
|
||||
assertEquals(42, bar)
|
||||
assertEquals(32, foo.bar.x)
|
||||
|
||||
return true
|
||||
return "OK"
|
||||
}
|
||||
|
||||
// FILE: foobar.kt
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
function A() {
|
||||
this.y_ = 0;
|
||||
}
|
||||
A.prototype.getX = function() {
|
||||
return 23;
|
||||
};
|
||||
A.prototype.getY = function() {
|
||||
return this.y_;
|
||||
};
|
||||
A.prototype.setY = function(y) {
|
||||
return this.y_ = y;
|
||||
};
|
||||
|
||||
var z_ = 32;
|
||||
function getZ() {
|
||||
return z_;
|
||||
}
|
||||
function setZ(z) {
|
||||
z_ = z;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package foo
|
||||
|
||||
@native class A {
|
||||
val xx: Int
|
||||
@JsName("getX") get
|
||||
|
||||
var yy: Int
|
||||
@JsName("getY") get
|
||||
@JsName("setY") set
|
||||
}
|
||||
|
||||
@native var zz: Int
|
||||
@JsName("getZ") get
|
||||
@JsName("setZ") set
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
|
||||
assertEquals(23, a.xx)
|
||||
assertEquals(0, a.yy)
|
||||
a.yy = 42
|
||||
assertEquals(42, a.yy)
|
||||
|
||||
assertEquals(32, zz)
|
||||
zz = 232
|
||||
assertEquals(232, zz)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
val x: Int
|
||||
@JsName("getX_") get() = 23
|
||||
|
||||
var y: Int = 0
|
||||
@JsName("getY_") get() = field + 10
|
||||
@JsName("setY_") set(value) {
|
||||
field = value
|
||||
}
|
||||
}
|
||||
|
||||
val A.z: Int
|
||||
@JsName("getZ_") get() = 42
|
||||
|
||||
fun getPackage() = js("return Kotlin.modules.JS_TESTS.foo")
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
|
||||
assertEquals(23, a.x)
|
||||
assertEquals(10, a.y)
|
||||
a.y = 13
|
||||
assertEquals(23, a.y)
|
||||
assertEquals(42, a.z)
|
||||
|
||||
val d: dynamic = A()
|
||||
|
||||
assertEquals(23, d.getX_())
|
||||
assertEquals(10, d.getY_())
|
||||
d.setY_(13)
|
||||
assertEquals(23, d.getY_())
|
||||
assertEquals(42, getPackage().getZ_(d))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package foo
|
||||
|
||||
class A {
|
||||
@get:JsName("getX_") val x = 23
|
||||
|
||||
@get:JsName("getY_") @set:JsName("setY_") var y = 0
|
||||
|
||||
@JsName("z_") var z = 0
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
|
||||
assertEquals(23, a.x)
|
||||
assertEquals(0, a.y)
|
||||
a.y = 42
|
||||
assertEquals(42, a.y)
|
||||
a.z = 99
|
||||
assertEquals(99, a.z)
|
||||
|
||||
val d: dynamic = A()
|
||||
|
||||
assertEquals(23, d.getX_())
|
||||
assertEquals(0, d.getY_())
|
||||
d.setY_(42)
|
||||
assertEquals(42, d.getY_())
|
||||
d.z_ = 99
|
||||
assertEquals(99, d.z_)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// ONLY_THIS_QUALIFIED_REFERENCES: foo_qltb3l$
|
||||
// ONLY_THIS_QUALIFIED_REFERENCES: foo_0
|
||||
|
||||
package foo
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package foo
|
||||
|
||||
val x: Int
|
||||
@JsName("getX_") get() = 23
|
||||
|
||||
var y: Int = 0
|
||||
@JsName("getY_") get() = field + 10
|
||||
@JsName("setY_") set(value) {
|
||||
field = value
|
||||
}
|
||||
|
||||
|
||||
fun getPackage() = js("return Kotlin.modules.JS_TESTS.foo")
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(23, x)
|
||||
assertEquals(10, y)
|
||||
y = 13
|
||||
assertEquals(23, y)
|
||||
|
||||
y = 0
|
||||
val d = getPackage()
|
||||
|
||||
assertEquals(23, d.getX_())
|
||||
assertEquals(10, d.getY_())
|
||||
d.setY_(13)
|
||||
assertEquals(23, d.getY_())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package foo
|
||||
|
||||
open class A {
|
||||
open val x: Int
|
||||
@JsName("getX_") get() = 23
|
||||
|
||||
open var y: Int = 0
|
||||
@JsName("getY_") get() = field + 10
|
||||
@JsName("setY_") set(value) {
|
||||
field = value
|
||||
}
|
||||
}
|
||||
|
||||
interface C {
|
||||
@get:JsName("getZ_") val z: Int
|
||||
}
|
||||
|
||||
class B : A(), C {
|
||||
override val x: Int
|
||||
get() = 42
|
||||
|
||||
override var y: Int
|
||||
get() = super.y + 5
|
||||
set(value) {
|
||||
super.y = value + 2
|
||||
}
|
||||
|
||||
override val z = 55
|
||||
}
|
||||
|
||||
fun getPackage() = js("return Kotlin.modules.JS_TESTS.foo")
|
||||
|
||||
fun box(): String {
|
||||
val a = B()
|
||||
|
||||
assertEquals(42, a.x)
|
||||
assertEquals(15, a.y)
|
||||
a.y = 13
|
||||
assertEquals(30, a.y)
|
||||
assertEquals(55, a.z)
|
||||
|
||||
val d: dynamic = B()
|
||||
|
||||
assertEquals(42, d.getX_())
|
||||
assertEquals(15, d.getY_())
|
||||
d.setY_(13)
|
||||
assertEquals(30, d.getY_())
|
||||
assertEquals(55, d.getZ_())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user