From 8ee00b70ee36b77c084aade30ab6daa995176d05 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 24 Nov 2014 15:24:43 +0300 Subject: [PATCH] Tests for extensions properties on dynamic types --- .../tests/dynamicTypes/extensionVals.kt | 49 ++++++++++++++ .../tests/dynamicTypes/extensionVals.txt | 17 +++++ .../tests/dynamicTypes/extensionVars.kt | 64 +++++++++++++++++++ .../tests/dynamicTypes/extensionVars.txt | 17 +++++ .../checkers/JetDiagnosticsTestGenerated.java | 12 ++++ 5 files changed, 159 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.kt create mode 100644 compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.txt create mode 100644 compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.kt create mode 100644 compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.txt diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.kt b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.kt new file mode 100644 index 00000000000..e59b97c98a1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.kt @@ -0,0 +1,49 @@ +// !MARK_DYNAMIC_CALLS + +// MODULE[js]: m1 +// FILE: k.kt + +fun test(d: dynamic) { + d.onAnyVal + d.onAnyVal = 1 + + d?.onAnyVal + d?.onAnyVal = 1 + + d!!.onAnyVal + d!!.onAnyVal = 1 + + d.onNullableAnyVal = 1 + + d.onStringVal = 1 + + d.onDynamicVal = 1 + + d?.onDynamicVal = 1 + + (d: String).onStringVal + (d: Any).onAnyVal + (d: Any?).onNullableAnyVal + (d: Any).onDynamicVal + + (d: String).onStringVal = 1 + (d: Any).onAnyVal = 1 + (d: Any?).onNullableAnyVal = 1 + (d: Any).onDynamicVal = 1 +} + +val Any.onAnyVal: Int get() = 1 +val Any?.onNullableAnyVal: Int get() = 1 +val String.onStringVal: Int get() = 1 +val dynamic.onDynamicVal: Int get() = 1 + +class C { + fun test(d: dynamic) { + d.memberVal + d.memberExtensionVal + } + + val memberVal = 1 + val Any.memberExtensionVal: Int + get() = 1 +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.txt b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.txt new file mode 100644 index 00000000000..d3562145463 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.txt @@ -0,0 +1,17 @@ +package + +internal val kotlin.Any.onAnyVal: kotlin.Int +internal val dynamic.onDynamicVal: kotlin.Int +internal val kotlin.Any?.onNullableAnyVal: kotlin.Int +internal val kotlin.String.onStringVal: kotlin.Int +internal fun test(/*0*/ d: dynamic): kotlin.Unit + +internal final class C { + public constructor C() + internal final val memberVal: kotlin.Int = 1 + internal final val kotlin.Any.memberExtensionVal: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun test(/*0*/ d: dynamic): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.kt b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.kt new file mode 100644 index 00000000000..c3bb179b07e --- /dev/null +++ b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.kt @@ -0,0 +1,64 @@ +// !MARK_DYNAMIC_CALLS + +// MODULE[js]: m1 +// FILE: k.kt + +fun test(d: dynamic) { + d.onAnyVar + d.onAnyVar = 1 + + d?.onAnyVar + d?.onAnyVar = 1 + + d!!.onAnyVar + d!!.onAnyVar = 1 + + d.onNullableAnyVar = 1 + + d.onStringVar = 1 + + d.onDynamicVar = 1 + + d?.onDynamicVar = 1 + + (d: String).onStringVar + (d: Any).onAnyVar + (d: Any?).onNullableAnyVar + (d: Any).onDynamicVar + + (d: String).onStringVar = 1 + (d: Any).onAnyVar = 1 + (d: Any?).onNullableAnyVar = 1 + (d: Any).onDynamicVar = 1 +} + +var Any.onAnyVar: Int + get() = 1 + set(v) {} + +var Any?.onNullableAnyVar: Int + get() = 1 + set(v) {} + +var String.onStringVar: Int + get() = 1 + set(v) {} + +var dynamic.onDynamicVar: Int + get() = 1 + set(v) {} + +class C { + fun test(d: dynamic) { + d.memberVar + d.memberExtensionVar + + d.memberVar = 1 + d.memberExtensionVar = 1 + } + + var memberVar = 1 + var Any.memberExtensionVar: Int + get() = 1 + set(v) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.txt b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.txt new file mode 100644 index 00000000000..caf0014fdf9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.txt @@ -0,0 +1,17 @@ +package + +internal var kotlin.Any.onAnyVar: kotlin.Int +internal var dynamic.onDynamicVar: kotlin.Int +internal var kotlin.Any?.onNullableAnyVar: kotlin.Int +internal var kotlin.String.onStringVar: kotlin.Int +internal fun test(/*0*/ d: dynamic): kotlin.Unit + +internal final class C { + public constructor C() + internal final var memberVar: kotlin.Int + internal final var kotlin.Any.memberExtensionVar: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun test(/*0*/ d: dynamic): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 57f70aae4e3..e4c02d6be48 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -3764,6 +3764,18 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("extensionVals.kt") + public void testExtensionVals() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dynamicTypes/extensionVals.kt"); + doTest(fileName); + } + + @TestMetadata("extensionVars.kt") + public void testExtensionVars() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dynamicTypes/extensionVars.kt"); + doTest(fileName); + } + @TestMetadata("extensions.kt") public void testExtensions() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dynamicTypes/extensions.kt");