diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClosureTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClosureTest.java index 78bc7bac66d..fb9e0d8798f 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClosureTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ClosureTest.java @@ -36,11 +36,11 @@ public final class ClosureTest extends SingleFileTranslationTest { fooBoxTest(); } - public void testLocalParameterInLocalNamedFunction() throws Exception { - fooBoxTest(); + public void testClosureInNestedFunctions() throws Exception { + checkFooBoxIsOk(); } - public void testObjectAsConstructorParameter() throws Exception { + public void testClosureInNestedFunctionsWhichMixedWithObject() throws Exception { fooBoxTest(); } } diff --git a/js/js.translator/testFiles/closure/cases/closureInNestedFunctions.kt b/js/js.translator/testFiles/closure/cases/closureInNestedFunctions.kt new file mode 100644 index 00000000000..ba2b384830a --- /dev/null +++ b/js/js.translator/testFiles/closure/cases/closureInNestedFunctions.kt @@ -0,0 +1,50 @@ +package foo + +fun run(f: ()->T) = f() + +fun funfun(): Boolean { + val result = true + + fun foo(): Boolean { + fun bar() = result + return bar() + } + + return foo() +} + +fun litlit(): Boolean { + val result = true + + return run { + run { result } + } +} + +fun funlit(): Boolean { + val result = true + + fun foo(): Boolean { + return run { result } + } + + return foo() +} + +fun litfun(): Boolean { + val result = true + + return run { + fun bar() = result + bar() + } +} + +fun box(): String { + if (!funfun()) "funfun failed" + if (!litlit()) "litlit failed" + if (!funlit()) "funlit failed" + if (!litfun()) "litfun failed" + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testFiles/closure/cases/closureInNestedFunctionsWhichMixedWithObject.kt b/js/js.translator/testFiles/closure/cases/closureInNestedFunctionsWhichMixedWithObject.kt new file mode 100644 index 00000000000..ca79c958bef --- /dev/null +++ b/js/js.translator/testFiles/closure/cases/closureInNestedFunctionsWhichMixedWithObject.kt @@ -0,0 +1,15 @@ +package foo + +fun run(f: ()->T) = f() + +fun box(): Boolean { + val t = run { + object { + fun boo(param: String): String { + return run { param } + } + } + } + + return t.boo("OK") == "OK" +} diff --git a/js/js.translator/testFiles/closure/cases/localParameterInLocalNamedFunction.kt b/js/js.translator/testFiles/closure/cases/localParameterInLocalNamedFunction.kt deleted file mode 100644 index 1fbd4546d46..00000000000 --- a/js/js.translator/testFiles/closure/cases/localParameterInLocalNamedFunction.kt +++ /dev/null @@ -1,27 +0,0 @@ -package foo - -fun getLastFocused(callback:(window:Any?)->Unit) { - callback(null) -} - -fun box(): Boolean { - var result = "no" - createTab(true) { - result = it - } - return result == "yes" -} - -fun createTab(focusWindow:Boolean, callback:((String)->Unit)?) { - getLastFocused { - fun createTab() { - if (focusWindow && callback != null) { - callback("yes") - } - } - - if (it == null) { - createTab() - } - } -} diff --git a/js/js.translator/testFiles/closure/cases/objectAsConstructorParameter.kt b/js/js.translator/testFiles/closure/cases/objectAsConstructorParameter.kt deleted file mode 100644 index f07c97c0d3c..00000000000 --- a/js/js.translator/testFiles/closure/cases/objectAsConstructorParameter.kt +++ /dev/null @@ -1,28 +0,0 @@ -package foo - -fun getLastFocused(callback: (window: Any?)->Unit) { - callback(null) -} - -abstract class TabService(val ctorParam: String) { - abstract fun query(callback: (tabs: String)->Unit) -} - -abstract class PageManager(val tabService: TabService) - -class ChromePageManager(val expected: String) : PageManager(object : TabService(expected) { - override fun query(callback: (tabs: String)->Unit) { - getLastFocused { - callback(expected) - } - } -}) - -fun box(): Boolean { - var result = "" - val tabService = ChromePageManager("result").tabService - tabService.query { - result = it - } - return result == "result" && tabService.ctorParam == "result" -}