[Wasm] Support generating browser-compatible directory
This commit is contained in:
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.js.test
|
|||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
|
||||||
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
|
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.compileWasm
|
||||||
import org.jetbrains.kotlin.backend.wasm.wasmPhases
|
import org.jetbrains.kotlin.backend.wasm.wasmPhases
|
||||||
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
|
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
|
||||||
@@ -64,6 +65,7 @@ abstract class BasicWasmBoxTest(
|
|||||||
val outputWatFile = outputFileBase + ".wat"
|
val outputWatFile = outputFileBase + ".wat"
|
||||||
val outputWasmFile = outputFileBase + ".wasm"
|
val outputWasmFile = outputFileBase + ".wasm"
|
||||||
val outputJsFile = outputFileBase + ".js"
|
val outputJsFile = outputFileBase + ".js"
|
||||||
|
val outputBrowserDir = outputFileBase + ".browser"
|
||||||
val languageVersionSettings = inputFiles.mapNotNull { it.languageVersionSettings }.firstOrNull()
|
val languageVersionSettings = inputFiles.mapNotNull { it.languageVersionSettings }.firstOrNull()
|
||||||
|
|
||||||
val kotlinFiles = mutableListOf<String>()
|
val kotlinFiles = mutableListOf<String>()
|
||||||
@@ -92,6 +94,7 @@ abstract class BasicWasmBoxTest(
|
|||||||
File(outputWatFile),
|
File(outputWatFile),
|
||||||
File(outputWasmFile),
|
File(outputWasmFile),
|
||||||
File(outputJsFile),
|
File(outputJsFile),
|
||||||
|
File(outputBrowserDir),
|
||||||
config,
|
config,
|
||||||
testPackage,
|
testPackage,
|
||||||
TEST_FUNCTION
|
TEST_FUNCTION
|
||||||
@@ -124,6 +127,7 @@ abstract class BasicWasmBoxTest(
|
|||||||
outputWatFile: File,
|
outputWatFile: File,
|
||||||
outputWasmFile: File,
|
outputWasmFile: File,
|
||||||
outputJsFile: File,
|
outputJsFile: File,
|
||||||
|
outputBrowserDir: File,
|
||||||
config: JsConfig,
|
config: JsConfig,
|
||||||
testPackage: String?,
|
testPackage: String?,
|
||||||
testFunction: String
|
testFunction: String
|
||||||
@@ -189,8 +193,24 @@ abstract class BasicWasmBoxTest(
|
|||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|
||||||
outputJsFile.write(compilerResult.js + "\n" + testRunner)
|
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 {
|
private fun createConfig(languageVersionSettings: LanguageVersionSettings?): JsConfig {
|
||||||
val configuration = environment.configuration.copy()
|
val configuration = environment.configuration.copy()
|
||||||
|
|||||||
Reference in New Issue
Block a user