From 3bd0ea6b07288913f7393beb7101f629ce101c37 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Sat, 9 Oct 2021 15:16:07 +0300 Subject: [PATCH] [Wasm] Support generating browser-compatible directory --- .../kotlin/js/test/BasicWasmBoxTest.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicWasmBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicWasmBoxTest.kt index d507d3623ee..0c532a6ab3b 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicWasmBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicWasmBoxTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.js.test import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap +import org.jetbrains.kotlin.backend.wasm.WasmCompilerResult import org.jetbrains.kotlin.backend.wasm.compileWasm import org.jetbrains.kotlin.backend.wasm.wasmPhases import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings @@ -64,6 +65,7 @@ abstract class BasicWasmBoxTest( val outputWatFile = outputFileBase + ".wat" val outputWasmFile = outputFileBase + ".wasm" val outputJsFile = outputFileBase + ".js" + val outputBrowserDir = outputFileBase + ".browser" val languageVersionSettings = inputFiles.mapNotNull { it.languageVersionSettings }.firstOrNull() val kotlinFiles = mutableListOf() @@ -92,6 +94,7 @@ abstract class BasicWasmBoxTest( File(outputWatFile), File(outputWasmFile), File(outputJsFile), + File(outputBrowserDir), config, testPackage, TEST_FUNCTION @@ -124,6 +127,7 @@ abstract class BasicWasmBoxTest( outputWatFile: File, outputWasmFile: File, outputJsFile: File, + outputBrowserDir: File, config: JsConfig, testPackage: String?, testFunction: String @@ -189,8 +193,24 @@ abstract class BasicWasmBoxTest( """.trimIndent() outputJsFile.write(compilerResult.js + "\n" + testRunner) + + if (debugMode >= 2) { + createDirectoryToRunInBrowser(outputBrowserDir, compilerResult) + } } + private fun createDirectoryToRunInBrowser(directory: File, compilerResult: WasmCompilerResult) { + val browserRunner = + """ + const response = await fetch("index.wasm"); + const wasmBinary = await response.arrayBuffer(); + wasmInstance = (await WebAssembly.instantiate(wasmBinary, { runtime, js_code })).instance; + + const actualResult = importStringFromWasm(wasmInstance.exports.box()); + if (actualResult !== "OK") + throw `Wrong box result '${'$'}{actualResult}'; Expected "OK"`; + """.trimIndent() + private fun createConfig(languageVersionSettings: LanguageVersionSettings?): JsConfig { val configuration = environment.configuration.copy()