[Wasm] Support main function

This commit is contained in:
Svyatoslav Kuzmich
2021-10-13 12:08:54 +03:00
parent af18b10da9
commit 0f66f85cf9
22 changed files with 259 additions and 122 deletions
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.js.test.ir.semantics.*
import org.jetbrains.kotlin.js.test.semantics.*
import org.jetbrains.kotlin.js.test.wasm.semantics.AbstractIrCodegenBoxWasmTest
import org.jetbrains.kotlin.js.test.wasm.semantics.AbstractIrCodegenWasmJsInteropWasmTest
import org.jetbrains.kotlin.js.test.wasm.semantics.AbstractKotlinTestBoxWasmTest
import org.jetbrains.kotlin.js.test.wasm.semantics.AbstractJsTranslatorWasmTest
import org.jetbrains.kotlin.test.TargetBackend
fun main(args: Array<String>) {
@@ -32,14 +32,15 @@ fun main(args: Array<String>) {
model("box/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS)
}
testClass<AbstractKotlinTestBoxWasmTest> {
model("box/kotlin.test/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.WASM)
}
testClass<AbstractIrBoxJsTest> {
model("box/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR)
}
testClass<AbstractJsTranslatorWasmTest> {
model("box/main", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.WASM)
model("box/kotlin.test/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.WASM)
}
testClass<AbstractIrBoxJsES6Test> {
model("box/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR_ES6)
}
@@ -140,7 +140,7 @@ abstract class BasicBoxTest(
val actualMainCallParameters = if (CALL_MAIN_PATTERN.matcher(fileContent).find())
MainCallParameters.mainWithArguments(listOf("testArg"))
MainCallParameters.mainWithArguments(listOf())
else
mainCallParameters
@@ -189,9 +189,10 @@ abstract class BasicWasmBoxTest(
const wasmBinary = read(String.raw`${outputWasmFile.absoluteFile}`, 'binary');
const wasmModule = new WebAssembly.Module(wasmBinary);
wasmInstance = new WebAssembly.Instance(wasmModule, { runtime, js_code });
const ${sanitizeName(config.moduleId)} = wasmInstance.exports;
wasmInstance.exports.__init();
const ${sanitizeName(config.moduleId)} = wasmInstance.exports;
wasmInstance.exports.startUnitTests?.();
const actualResult = importStringFromWasm(wasmInstance.exports.$testFunction());
@@ -212,7 +213,9 @@ abstract class BasicWasmBoxTest(
const response = await fetch("index.wasm");
const wasmBinary = await response.arrayBuffer();
wasmInstance = (await WebAssembly.instantiate(wasmBinary, { runtime, js_code })).instance;
wasmInstance.exports.__init();
wasmInstance.exports.startUnitTests?.();
const actualResult = importStringFromWasm(wasmInstance.exports.box());
if (actualResult !== "OK")
throw `Wrong box result '${'$'}{actualResult}'; Expected "OK"`;
@@ -17,7 +17,7 @@ abstract class AbstractIrCodegenWasmJsInteropWasmTest : BasicWasmBoxTest(
"codegen/wasmJsInteropJs"
)
abstract class AbstractKotlinTestBoxWasmTest : BasicWasmBoxTest(
"js/js.translator/testData/box/kotlin.test",
"codegen/wasmBoxKotlinTest"
)
abstract class AbstractJsTranslatorWasmTest : BasicWasmBoxTest(
TEST_DATA_DIR_PATH + "box/",
"js.translator/wasmBox"
)