From 6efba76a0617617ba4a910df25e45e68bf84d4c0 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 24 Sep 2021 15:41:45 +0700 Subject: [PATCH] [JS] Add test for KT-47811 --- .../semantics/IrBoxJsES6TestGenerated.java | 5 + .../ir/semantics/IrBoxJsTestGenerated.java | 5 + .../js/test/semantics/BoxJsTestGenerated.java | 5 + .../box/vararg/jsExternalVarargSuspend.kt | 140 ++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java index 5a3eb51a815..f9da4a232e9 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrBoxJsES6TestGenerated.java @@ -7968,5 +7968,10 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test { public void testJsExternalVarargFun() throws Exception { runTest("js/js.translator/testData/box/vararg/jsExternalVarargFun.kt"); } + + @TestMetadata("jsExternalVarargSuspend.kt") + public void testJsExternalVarargSuspend() throws Exception { + runTest("js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt"); + } } } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java index c74724a2fc1..a77444a463c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java @@ -7968,5 +7968,10 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { public void testJsExternalVarargFun() throws Exception { runTest("js/js.translator/testData/box/vararg/jsExternalVarargFun.kt"); } + + @TestMetadata("jsExternalVarargSuspend.kt") + public void testJsExternalVarargSuspend() throws Exception { + runTest("js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt"); + } } } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index df581b5ad26..99230958fb7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -7988,5 +7988,10 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { public void testJsExternalVarargFun() throws Exception { runTest("js/js.translator/testData/box/vararg/jsExternalVarargFun.kt"); } + + @TestMetadata("jsExternalVarargSuspend.kt") + public void testJsExternalVarargSuspend() throws Exception { + runTest("js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt"); + } } } diff --git a/js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt b/js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt new file mode 100644 index 00000000000..df026e456e6 --- /dev/null +++ b/js/js.translator/testData/box/vararg/jsExternalVarargSuspend.kt @@ -0,0 +1,140 @@ +// WITH_COROUTINES + +// FILE: main.kt + +import helpers.* +import kotlin.coroutines.* +import kotlin.coroutines.intrinsics.* + +external fun externalLog(vararg params: Any?): Array + +external fun externalLog( + arg: Int = definedExternally, + vararg args: String, + o: Long +) : Array + +suspend fun test1(p: String): String { + return "A" + p +} + +suspend fun test2(p: String): String { + return p +} + +suspend fun foo(): Array { + return externalLog(test1("B")) +} + +suspend fun bar(): Array { + return externalLog(test2("C"), "D", test2("E")) +} + +suspend fun qux(): Array { + return externalLog(test2("G"), test2("F")) +} + +suspend fun test3(s1: String, s2: String): Array { + return arrayOf(s1, "Y", s2) +} + +suspend fun tef(): Array { + return externalLog("H", *test3("I", "J"), "K") +} + +suspend fun bux(): Array { + return externalLog(*test3("L", "M")) +} + +suspend fun foo2(): Array { + return externalLog(1, test1("B"), 1000L) +} + +suspend fun bar2(): Array { + return externalLog(1, test2("C"), "D", test2("E"), 2000L) +} + +suspend fun qux2(): Array { + return externalLog(test2("G"), test2("F"), 3000L) +} + +suspend fun tef2(): Array { + return externalLog(4, "H", *test3("I", "J"), "K", 5000L) +} + +suspend fun bux2(): Array { + return externalLog(*test3("L", "M"), 6000L) +} + +fun builder(c: suspend () -> Unit) { + c.startCoroutine(EmptyContinuation) +} + +fun box(): String { + var result = "" + + builder { + result += foo()[0] + val b = bar() + result += b[0] + result += b[1] + result += b[2] + val q = qux() + result += q[0] + result += q[1] + val t = tef() + result += t[0] + result += t[1] + result += t[2] + result += t[3] + result += t[4] + val bx = bux() + result += bx[0] + result += bx[1] + result += bx[2] + } + + if (result != "ABCDEGFHIYJKLYM") return "FAIL1: $result" + + result = "" + + builder { + val f = foo2() + result += f[0] + result += f[1] + result += f[2] + val b = bar2() + result += b[0] + result += b[1] + result += b[2] + result += b[3] + result += b[4] + val q = qux2() + result += q[0] + result += q[1] + result += q[2] + val t = tef2() + result += t[0] + result += t[1] + result += t[2] + result += t[3] + result += t[4] + result += t[5] + result += t[6] + val bx = bux2() + result += bx[0] + result += bx[1] + result += bx[2] + result += bx[3] + } + + if (result != "1AB10001CDE2000GF30004HIYJK5000LYM6000") return "FAIL2: $result" + + return "OK" +} + +// FILE: main.js + +function externalLog() { + return arguments +} \ No newline at end of file