From f5963ebfe9d21366b9a456cc9c82199c7f620b19 Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Wed, 27 Aug 2014 13:34:34 +0400 Subject: [PATCH] JS backend: test for KT-4225: Compiler to JavaScript produces semantically wrong code This issue was fixed in build 0.8.541 --- .../test/semantics/EvaluationOrderTest.java | 5 +++ ...literalFunctionAsArgumentWithSideEffect.kt | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 js/js.translator/testData/expression/evaluationOrder/cases/literalFunctionAsArgumentWithSideEffect.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/EvaluationOrderTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/EvaluationOrderTest.java index 3663a413e10..0bf7aa4bec7 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/EvaluationOrderTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/EvaluationOrderTest.java @@ -116,4 +116,9 @@ public class EvaluationOrderTest extends AbstractExpressionTest { public void testWhenJsLiteralWithSideEffect() throws Exception { checkFooBoxIsOk(); } + + public void testLiteralFunctionAsArgumentWithSideEffect() throws Exception { + checkFooBoxIsOk(); + } + } diff --git a/js/js.translator/testData/expression/evaluationOrder/cases/literalFunctionAsArgumentWithSideEffect.kt b/js/js.translator/testData/expression/evaluationOrder/cases/literalFunctionAsArgumentWithSideEffect.kt new file mode 100644 index 00000000000..f61d4911ec0 --- /dev/null +++ b/js/js.translator/testData/expression/evaluationOrder/cases/literalFunctionAsArgumentWithSideEffect.kt @@ -0,0 +1,35 @@ +// http://youtrack.jetbrains.com/issue/KT-4225 +// Compiler to JavaScript produces semantically wrong code + +package foo + +var i = 0 +var j = 0 + +var global: String = "" + +fun incI(){ + i++ +} + +fun incJ(a: Any){ + j++ +} + +fun foo(f: () -> Unit) = f + +fun box(): String { + val bar = 1 + + val f = foo { + incI() + incJ(if (bar == 2) "A" else "B") + } + + global +="i = $i, j = $j" + f() + global +=" : i = $i, j = $j" + assertEquals("i = 0, j = 0 : i = 1, j = 1", global) + + return "OK" +} \ No newline at end of file