KT-34770 JS. Configurable properties. Test

This commit is contained in:
Victor Turansky
2020-03-26 19:07:36 +03:00
committed by Zalim Bashorov
parent 103fd093e1
commit 79bec82430
3 changed files with 56 additions and 2 deletions
@@ -6479,7 +6479,9 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
}
public void testAllFilesPresentInPropertyAccess() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/box/propertyAccess"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.JS_IR, true);
KotlinTestUtils
.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/box/propertyAccess"),
Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.JS_IR, true);
}
@TestMetadata("classUsesPackageProperties.kt")
@@ -6487,6 +6489,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/propertyAccess/classUsesPackageProperties.kt");
}
@TestMetadata("configurable.kt")
public void testConfigurable() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/configurable.kt");
}
@TestMetadata("customGetter.kt")
public void testCustomGetter() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/customGetter.kt");
@@ -6504,7 +6504,9 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
}
public void testAllFilesPresentInPropertyAccess() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/box/propertyAccess"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.JS, true);
KotlinTestUtils
.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/box/propertyAccess"),
Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.JS, true);
}
@TestMetadata("classUsesPackageProperties.kt")
@@ -6512,6 +6514,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
runTest("js/js.translator/testData/box/propertyAccess/classUsesPackageProperties.kt");
}
@TestMetadata("configurable.kt")
public void testConfigurable() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/configurable.kt");
}
@TestMetadata("customGetter.kt")
public void testCustomGetter() throws Exception {
runTest("js/js.translator/testData/box/propertyAccess/customGetter.kt");
@@ -0,0 +1,40 @@
// EXPECTED_REACHABLE_NODES: 1325
// KJS_WITH_FULL_RUNTIME
package foo
external interface EP {
val simpleProp: Int
val anotherProp: String
val propWithGetter: Boolean
}
class P : EP {
override val simpleProp = 13
override val anotherProp = "42"
override val propWithGetter: Boolean
get() = true
}
fun usages() {
val p = P()
assertEquals(13, p.simpleProp)
assertEquals("42", p.anotherProp)
assertEquals(true, p.propWithGetter)
}
fun box(): String {
usages()
val prototype = P::class.js.asDynamic().prototype
assertTrue(isConfigurable(prototype, "simpleProp"))
assertTrue(isConfigurable(prototype, "anotherProp"))
assertTrue(isConfigurable(prototype, "propWithGetter"))
return "OK"
}
fun isConfigurable(obj: Any, prop: String): Boolean =
js("Object")
.getOwnPropertyDescriptor(obj, prop)
.configurable