[JS] Add test for KT-47811

This commit is contained in:
Roman Artemev
2021-09-24 15:41:45 +07:00
committed by TeamCityServer
parent 3d9966818d
commit 6efba76a06
4 changed files with 155 additions and 0 deletions
@@ -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");
}
}
}
@@ -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");
}
}
}
@@ -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");
}
}
}
@@ -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<String>
external fun externalLog(
arg: Int = definedExternally,
vararg args: String,
o: Long
) : Array<String>
suspend fun test1(p: String): String {
return "A" + p
}
suspend fun test2(p: String): String {
return p
}
suspend fun foo(): Array<String> {
return externalLog(test1("B"))
}
suspend fun bar(): Array<String> {
return externalLog(test2("C"), "D", test2("E"))
}
suspend fun qux(): Array<String> {
return externalLog(test2("G"), test2("F"))
}
suspend fun test3(s1: String, s2: String): Array<Any?> {
return arrayOf(s1, "Y", s2)
}
suspend fun tef(): Array<String> {
return externalLog("H", *test3("I", "J"), "K")
}
suspend fun bux(): Array<String> {
return externalLog(*test3("L", "M"))
}
suspend fun foo2(): Array<String> {
return externalLog(1, test1("B"), 1000L)
}
suspend fun bar2(): Array<String> {
return externalLog(1, test2("C"), "D", test2("E"), 2000L)
}
suspend fun qux2(): Array<String> {
return externalLog(test2("G"), test2("F"), 3000L)
}
suspend fun tef2(): Array<String> {
return externalLog(4, "H", *test3("I", "J"), "K", 5000L)
}
suspend fun bux2(): Array<String> {
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
}