[Wasm/WASI] Implement Wasm WASI box test for K2

Fix #KT-64449
This commit is contained in:
Igor Yakovlev
2024-01-23 17:39:24 +01:00
committed by Space Team
parent a5dd71ac93
commit 4a49261f8c
4 changed files with 62 additions and 20 deletions
@@ -1,6 +1,8 @@
// MODULE: main
// FILE: main.kt
import kotlin.wasm.WasmExport
var onExportedFunctionExitCounter = 0
@WasmExport()
@@ -175,7 +175,5 @@ abstract class WasmEnvironmentConfigurator(testServices: TestServices) : Environ
configuration.put(JSConfigurationKeys.SOURCE_MAP_EMBED_SOURCES, sourceMapSourceEmbedding)
configuration.put(JSConfigurationKeys.WASM_USE_TRAPS_INSTEAD_OF_EXCEPTIONS, DISABLE_WASM_EXCEPTION_HANDLING in registeredDirectives)
configuration.put(JSConfigurationKeys.WASM_TARGET, WasmTarget.JS)
}
}
@@ -60,19 +60,23 @@ fun main(args: Array<String>) {
}
testGroup("wasm/wasm.tests/tests-gen", "compiler/testData", testRunnerMethodName = "runTest0") {
testClass<AbstractFirWasmCodegenBoxTest> {
testClass<AbstractFirWasmJsCodegenBoxTest> {
model("codegen/box", pattern = jsTranslatorTestPattern, excludeDirs = jvmOnlyBoxTests)
}
testClass<AbstractFirWasmCodegenBoxInlineTest> {
testClass<AbstractFirWasmJsCodegenBoxInlineTest> {
model("codegen/boxInline")
}
testClass<AbstractFirWasmCodegenWasmJsInteropTest> {
testClass<AbstractFirWasmJsCodegenInteropTest> {
model("codegen/boxWasmJsInterop")
}
testClass<AbstractFirWasmSteppingTest> {
testClass<AbstractFirWasmWasiCodegenBoxTest> {
model("codegen/boxWasmWasi")
}
testClass<AbstractFirWasmJsSteppingTest> {
model("debug/stepping")
}
}
@@ -18,15 +18,17 @@ import org.jetbrains.kotlin.test.frontend.fir.*
import org.jetbrains.kotlin.test.frontend.fir.handlers.*
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.runners.codegen.commonFirHandlersForCodegenTest
import org.jetbrains.kotlin.test.services.AdditionalSourceProvider
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorWasi
import org.jetbrains.kotlin.wasm.test.converters.FirWasmKlibBackendFacade
import org.jetbrains.kotlin.wasm.test.converters.WasmBackendFacade
import org.jetbrains.kotlin.wasm.test.handlers.WasiBoxRunner
import org.jetbrains.kotlin.wasm.test.handlers.WasmBoxRunner
import org.jetbrains.kotlin.wasm.test.handlers.WasmDebugRunner
open class AbstractFirWasmTest(
abstract class AbstractFirWasmTest(
pathToTestDir: String,
testGroupOutputDirPrefix: String,
) : AbstractWasmBlackBoxCodegenTestBase<FirOutputArtifact, IrBackendInput, BinaryArtifacts.KLib>(
@@ -44,12 +46,6 @@ open class AbstractFirWasmTest(
override val afterBackendFacade: Constructor<AbstractTestFacade<BinaryArtifacts.KLib, BinaryArtifacts.Wasm>>
get() = ::WasmBackendFacade
override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>>
get() = ::WasmBoxRunner
override val wasmEnvironmentConfigurator: Constructor<EnvironmentConfigurator>
get() = ::WasmEnvironmentConfiguratorJs
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
with(builder) {
@@ -71,7 +67,19 @@ open class AbstractFirWasmTest(
}
}
open class AbstractFirWasmCodegenBoxTest : AbstractFirWasmTest(
open class AbstractFirWasmJsTest(
pathToTestDir: String,
testGroupOutputDirPrefix: String,
) : AbstractFirWasmTest(pathToTestDir, testGroupOutputDirPrefix) {
override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>>
get() = ::WasmBoxRunner
override val wasmEnvironmentConfigurator: Constructor<EnvironmentConfigurator>
get() = ::WasmEnvironmentConfiguratorJs
}
open class AbstractFirWasmJsCodegenBoxTest : AbstractFirWasmJsTest(
pathToTestDir = "compiler/testData/codegen/box/",
testGroupOutputDirPrefix = "codegen/firBox/"
) {
@@ -87,25 +95,25 @@ open class AbstractFirWasmCodegenBoxTest : AbstractFirWasmTest(
}
}
open class AbstractFirWasmCodegenBoxInlineTest : AbstractFirWasmTest(
open class AbstractFirWasmJsCodegenBoxInlineTest : AbstractFirWasmJsTest(
"compiler/testData/codegen/boxInline/",
"codegen/firBoxInline/"
)
open class AbstractFirWasmCodegenWasmJsInteropTest : AbstractFirWasmTest(
open class AbstractFirWasmJsCodegenInteropTest : AbstractFirWasmJsTest(
"compiler/testData/codegen/wasmJsInterop",
"codegen/firWasmJsInterop"
)
open class AbstractFirWasmJsTranslatorTest : AbstractFirWasmTest(
open class AbstractFirWasmJsTranslatorTest : AbstractFirWasmJsTest(
"js/js.translator/testData/box/",
"js.translator/firBox"
)
open class AbstractFirWasmSteppingTest : AbstractFirWasmTest(
open class AbstractFirWasmJsSteppingTest : AbstractFirWasmJsTest(
"compiler/testData/debug/stepping/",
"debug/stepping/"
) {
override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>>
get() = ::WasmDebugRunner
@@ -116,3 +124,33 @@ open class AbstractFirWasmSteppingTest : AbstractFirWasmTest(
}
}
}
open class AbstractFirWasmWasiTest(
pathToTestDir: String,
testGroupOutputDirPrefix: String,
) : AbstractFirWasmTest(pathToTestDir, testGroupOutputDirPrefix) {
override val wasmBoxTestRunner: Constructor<AnalysisHandler<BinaryArtifacts.Wasm>>
get() = ::WasiBoxRunner
override val wasmEnvironmentConfigurator: Constructor<EnvironmentConfigurator>
get() = ::WasmEnvironmentConfiguratorWasi
override val additionalSourceProvider: Constructor<AdditionalSourceProvider>?
get() = ::WasmWasiBoxTestHelperSourceProvider
}
open class AbstractFirWasmWasiCodegenBoxTest : AbstractFirWasmWasiTest(
pathToTestDir = "compiler/testData/codegen/box/",
testGroupOutputDirPrefix = "codegen/firWasiBox/"
) {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.configureFirHandlersStep {
commonFirHandlersForCodegenTest()
}
builder.useAfterAnalysisCheckers(
::FirMetaInfoDiffSuppressor
)
}
}