From 3424142b65c3d9ae5bf13b9f077fc433805d4be9 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 25 Sep 2014 17:52:44 +0400 Subject: [PATCH] KT-4773: added tests --- .../test/semantics/DelegatePropertyTest.java | 2 +- .../k2js/test/semantics/DelegationTest.java | 4 ++ .../cases/delegateByExtensionProperty.kt | 39 ++++++++++++++++++ .../cases/delegateForExtProperty.kt | 14 ------- .../delegationExtensionPropertyDelegated.kt | 40 +++++++++++++++++++ 5 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 js/js.translator/testData/delegateProperty/cases/delegateByExtensionProperty.kt delete mode 100644 js/js.translator/testData/delegateProperty/cases/delegateForExtProperty.kt create mode 100644 js/js.translator/testData/delegation/cases/delegationExtensionPropertyDelegated.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegatePropertyTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegatePropertyTest.java index e0b713cf01e..63c7b7bba0a 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegatePropertyTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegatePropertyTest.java @@ -47,7 +47,7 @@ public class DelegatePropertyTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } - public void testDelegateForExtProperty() throws Exception { + public void testDelegateByExtensionProperty() throws Exception { checkFooBoxIsOk(); } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegationTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegationTest.java index 4b40d9af614..622c0b76326 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegationTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DelegationTest.java @@ -91,4 +91,8 @@ public class DelegationTest extends SingleFileTranslationTest { public void testDelegationExtProp() throws Exception { checkFooBoxIsOk(); } + + public void testDelegationExtensionPropertyDelegated() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/testData/delegateProperty/cases/delegateByExtensionProperty.kt b/js/js.translator/testData/delegateProperty/cases/delegateByExtensionProperty.kt new file mode 100644 index 00000000000..e50af058cee --- /dev/null +++ b/js/js.translator/testData/delegateProperty/cases/delegateByExtensionProperty.kt @@ -0,0 +1,39 @@ +package foo + +class State(var realValue: Int) + +fun format(event: String, property: String, value: Int): String + = "${event}: ${property} = ${value}; " + +object LoggerDelegate { + var log = "" + + fun get(state: State, desc: PropertyMetadataImpl): Int { + log += format("get", desc.name, state.realValue) + return state.realValue + } + + fun set(state: State, desc: PropertyMetadataImpl, value: Int) { + log += format("set", desc.name, value) + state.realValue = value + } +} + +var State.value by LoggerDelegate + +fun box(): String { + val state = State(1) + var expectedLog = "" + + assertEquals(1, state.value) + expectedLog += format("get", "value", 1) + + state.value = 3 + expectedLog += format("set", "value", 3) + + assertEquals(3, state.value) + expectedLog += format("get", "value", 3) + + assertEquals(expectedLog, LoggerDelegate.log) + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/delegateProperty/cases/delegateForExtProperty.kt b/js/js.translator/testData/delegateProperty/cases/delegateForExtProperty.kt deleted file mode 100644 index 1a79bc00d9d..00000000000 --- a/js/js.translator/testData/delegateProperty/cases/delegateForExtProperty.kt +++ /dev/null @@ -1,14 +0,0 @@ -package foo - -class Delegate { - fun get(t: A, p: PropertyMetadata): Int = 1 -} - -val A.prop: Int by Delegate() - -class A { -} - -fun box(): String { - return if (A().prop == 1) "OK" else "fail" -} diff --git a/js/js.translator/testData/delegation/cases/delegationExtensionPropertyDelegated.kt b/js/js.translator/testData/delegation/cases/delegationExtensionPropertyDelegated.kt new file mode 100644 index 00000000000..a9db7607012 --- /dev/null +++ b/js/js.translator/testData/delegation/cases/delegationExtensionPropertyDelegated.kt @@ -0,0 +1,40 @@ +package foo + +class State(var value: Int) + +trait Base { + var State.multiplied: Int +} + +class Delegate(val multiplier: Int) { + fun get(state: State, desc: PropertyMetadataImpl): Int = multiplier * state.value + + fun set(state: State, desc: PropertyMetadataImpl, value: Int) { + state.value = value / multiplier + } + +} + +open class BaseImpl() : Base { + override var State.multiplied: Int by Delegate(2) +} + +class Derived() : Base by BaseImpl() { + fun getValueMultiplied(state: State): Int = state.multiplied + + fun setValueMultiplied(state: State, value: Int) { + state.multiplied = value + } +} + +fun box(): String { + val d = Derived() + + val state = State(2) + assertEquals(4, d.getValueMultiplied(state)) + + d.setValueMultiplied(state, 10) + assertEquals(10, d.getValueMultiplied(state)) + + return "OK" +} \ No newline at end of file