diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ObjectTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ObjectTest.java index f1a2f0d9cc8..2b5e4b88d6f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ObjectTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ObjectTest.java @@ -59,4 +59,8 @@ public final class ObjectTest extends SingleFileTranslationTest { public void testLambdaInObjectInsideObject() throws Exception { checkFooBoxIsOk(); } + + public void testDontPolluteObject() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/testData/kotlin_lib_ecma5.js b/js/js.translator/testData/kotlin_lib_ecma5.js index e0c62d82ba2..fd799ac5cd8 100644 --- a/js/js.translator/testData/kotlin_lib_ecma5.js +++ b/js/js.translator/testData/kotlin_lib_ecma5.js @@ -175,9 +175,7 @@ var Kotlin = {}; Kotlin.createObjectNow = function (bases, constructor, functions) { var noNameClass = Kotlin.createClassNow(bases, constructor, functions); var obj = new noNameClass(); - obj.$metadata$ = { - type: Kotlin.TYPE.OBJECT - }; + noNameClass.$metadata$.type = Kotlin.TYPE.OBJECT; return obj; }; diff --git a/js/js.translator/testData/object/cases/dontPolluteObject.kt b/js/js.translator/testData/object/cases/dontPolluteObject.kt new file mode 100644 index 00000000000..9349125a2b6 --- /dev/null +++ b/js/js.translator/testData/object/cases/dontPolluteObject.kt @@ -0,0 +1,45 @@ +package foo + +object EmptyObject {} + +object SomeObject { + val foo = 1 + var bar = "t" + fun baz() {} +} + +val emptyObjectExpr = object {} + +val someObjectExpr = object { + val foo = 1 + var bar = "t" + fun baz() {} +} + +val o = js("Object") + +fun keys(a: Any): List { + val arr: Array = o.keys(a) + return arr.toList() +} + +fun getOwnPropertyNames(a: Any): List { + val arr: Array = o.getOwnPropertyNames(a) + return arr.toList() +} + +fun box(): String { + assertEquals(listOf(), getOwnPropertyNames(EmptyObject)) + assertEquals(listOf(), keys(EmptyObject)) + + assertEquals(listOf("foo", "bar"), getOwnPropertyNames(SomeObject)) + assertEquals(listOf("foo", "bar"), keys(SomeObject)) + + assertEquals(listOf(), getOwnPropertyNames(emptyObjectExpr)) + assertEquals(listOf(), keys(emptyObjectExpr)) + + assertEquals(listOf("foo", "bar"), getOwnPropertyNames(someObjectExpr)) + assertEquals(listOf("foo", "bar"), keys(someObjectExpr)) + + return "OK" +}