From 66519d99733c495559eec9257724c7fe3ce758b5 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 21 Oct 2014 20:20:11 +0400 Subject: [PATCH] Added regression tests for KT-1906 Support invoke() convention is js-backend (including classes implementing Function trait) #KT-1906 Fixed --- .../test/semantics/InvokeConventionTest.java | 4 ++ .../invoke/cases/inheritFromFunctionTraits.kt | 49 +++++++++++++++++++ jslib_files.xml | 2 + 3 files changed, 55 insertions(+) create mode 100644 js/js.translator/testData/expression/invoke/cases/inheritFromFunctionTraits.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/InvokeConventionTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/InvokeConventionTest.java index 7a8b930a537..bfb64e236ec 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/InvokeConventionTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/InvokeConventionTest.java @@ -57,4 +57,8 @@ public final class InvokeConventionTest extends AbstractExpressionTest { public void testInfixCall() throws Exception { checkFooBoxIsOk(); } + + public void testInheritFromFunctionTraits() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/testData/expression/invoke/cases/inheritFromFunctionTraits.kt b/js/js.translator/testData/expression/invoke/cases/inheritFromFunctionTraits.kt new file mode 100644 index 00000000000..81b6bb60977 --- /dev/null +++ b/js/js.translator/testData/expression/invoke/cases/inheritFromFunctionTraits.kt @@ -0,0 +1,49 @@ +package foo + +class Bar : Function0 { + override fun invoke() = "Bar.invoke()" +} + +class Baz : Function2 { + override fun invoke(i: Int, b: Boolean) = "Baz.invoke($i, $b)" +} + +class ExtBar : ExtensionFunction0 { + override fun String.invoke() = "ExtBar.invoke($this)" +} + +class ExtBaz : ExtensionFunction2 { + override fun String.invoke(i: Int, b: Boolean) = "ExtBaz.invoke($this, $i, $b)" +} + +class Mixed : + Function1, + Function2, + ExtensionFunction1, + ExtensionFunction2 +{ + override fun invoke(i: Int) = "Mixed.invoke($i)" + override fun invoke(i: Int, b: Boolean) = "Mixed.invoke($i, $b)" + override fun Int.invoke(b: Boolean) = "ext Mixed.invoke($this, $b)" + override fun Int.invoke(i: Int, b: Boolean) = "ext Mixed.invoke($this, $i, $b)" +} + +fun box(): String { + val bar = Bar() + val baz = Baz() + val extBar = ExtBar() + val extBaz = ExtBaz() + val mixed = Mixed() + + assertEquals("Bar.invoke()", bar()) + assertEquals("Baz.invoke(2, false)", baz(2, false)) + assertEquals("ExtBar.invoke(2e2)", "2e2".extBar()) + assertEquals("ExtBaz.invoke(29, 34, true)", "29".extBaz(34, true)) + + assertEquals("Mixed.invoke(45)", mixed(45)) + assertEquals("Mixed.invoke(552, true)", mixed(552, true)) + assertEquals("ext Mixed.invoke(21, true)", 21.mixed(true)) + assertEquals("ext Mixed.invoke(29, 304, false)", 29.mixed(304, false)) + + return "OK" +} \ No newline at end of file diff --git a/jslib_files.xml b/jslib_files.xml index 55e9ed0cc30..ed5a5b8299a 100644 --- a/jslib_files.xml +++ b/jslib_files.xml @@ -2,6 +2,8 @@ + +