From a4db14eff582e3c88a5efd3d94c4cb9713509d70 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 18 Feb 2016 20:22:28 +0300 Subject: [PATCH] [KT-4124] Add tests for qualified labeled super access to functions and properties --- .../super/innerClassQualifiedFunctionCall.kt | 46 +++++++++++++++++++ .../innerClassQualifiedPropertyAccess.kt | 45 ++++++++++++++++++ .../BlackBoxCodegenTestGenerated.java | 12 +++++ .../js/test/semantics/SuperTestGenerated.java | 12 +++++ 4 files changed, 115 insertions(+) create mode 100644 compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt create mode 100644 compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt diff --git a/compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt b/compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt new file mode 100644 index 00000000000..557905cedbe --- /dev/null +++ b/compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt @@ -0,0 +1,46 @@ +interface T { + open fun baz(): String = "T.baz" +} + +open class A { + open val foo: String = "OK" + open fun bar(): String = "OK" + open fun boo(): String = "OK" +} + +open class B : A(), T { + override fun bar(): String = "B" + override fun baz(): String = "B.baz" + inner class E { + val foo: String = super@B.foo + fun bar() = super@B.bar() + super@B.bar() + super@B.baz() + } +} + +class C : B() { + override fun bar(): String = "C" + override fun boo(): String = "C" + inner class D { + val foo: String = super@C.foo + fun bar() = super@C.bar() + super@C.boo() + } +} + +fun box(): String { + var r = "" + + r = B().E().foo + if (r != "OK") return "fail 1; r = $r" + r = "" + r = B().E().bar() + if (r != "OKOKT.baz") return "fail 2; r = $r" + + r = "" + r = C().D().foo + if (r != "OK") return "fail 3; r = $r" + r = "" + r = C().D().bar() + if (r != "BOK") return "fail 4; r = $r" + + return "OK" +} diff --git a/compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt b/compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt new file mode 100644 index 00000000000..bdcd70ce962 --- /dev/null +++ b/compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt @@ -0,0 +1,45 @@ +interface T { + open val baz: String + get() = "T.baz" +} + +open class A { + open val bar: String + get() = "OK" + open val boo: String + get() = "OK" +} + +open class B : A(), T { + override val bar: String + get() = "B" + override val baz: String + get() = "B.baz" + inner class E { + val bar: String + get() = super@B.bar + super@B.bar + super@B.baz + } +} + +class C : B() { + override val bar: String + get() = "C" + override val boo: String + get() = "C" + inner class D { + val bar: String + get() = super@C.bar + super@C.boo + } +} + +fun box(): String { + var r = "" + + r = B().E().bar + if (r != "OKOKT.baz") return "fail 1; r = $r" + + r = C().D().bar + if (r != "BOK") return "fail 2; r = $r" + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index de1ec4e90a6..a50fb8e659a 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -7768,6 +7768,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("innerClassQualifiedFunctionCall.kt") + public void testInnerClassQualifiedFunctionCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt"); + doTest(fileName); + } + + @TestMetadata("innerClassQualifiedPropertyAccess.kt") + public void testInnerClassQualifiedPropertyAccess() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt"); + doTest(fileName); + } + @TestMetadata("kt3492ClassFun.kt") public void testKt3492ClassFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/kt3492ClassFun.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/SuperTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/SuperTestGenerated.java index e0406936bb4..f12e084b059 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/SuperTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/SuperTestGenerated.java @@ -95,6 +95,18 @@ public class SuperTestGenerated extends AbstractSuperTest { doTest(fileName); } + @TestMetadata("innerClassQualifiedFunctionCall.kt") + public void testInnerClassQualifiedFunctionCall() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/innerClassQualifiedFunctionCall.kt"); + doTest(fileName); + } + + @TestMetadata("innerClassQualifiedPropertyAccess.kt") + public void testInnerClassQualifiedPropertyAccess() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/innerClassQualifiedPropertyAccess.kt"); + doTest(fileName); + } + @TestMetadata("kt3492ClassFun.kt") public void testKt3492ClassFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/super/kt3492ClassFun.kt");