From 4a49261f8c5702a22351b57b2b9ffed6c489d731 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Tue, 23 Jan 2024 17:39:24 +0100 Subject: [PATCH] [Wasm/WASI] Implement Wasm WASI box test for K2 Fix #KT-64449 --- .../boxWasmWasi/onExportedFunctionExit.kt | 2 + .../WasmEnvironmentConfigurator.kt | 2 - .../generators/tests/GenerateWasmTests.kt | 12 ++-- .../kotlin/wasm/test/AbstractFirWasmTest.kt | 66 +++++++++++++++---- 4 files changed, 62 insertions(+), 20 deletions(-) diff --git a/compiler/testData/codegen/boxWasmWasi/onExportedFunctionExit.kt b/compiler/testData/codegen/boxWasmWasi/onExportedFunctionExit.kt index df76bb792c6..b962e84167f 100644 --- a/compiler/testData/codegen/boxWasmWasi/onExportedFunctionExit.kt +++ b/compiler/testData/codegen/boxWasmWasi/onExportedFunctionExit.kt @@ -1,6 +1,8 @@ // MODULE: main // FILE: main.kt +import kotlin.wasm.WasmExport + var onExportedFunctionExitCounter = 0 @WasmExport() diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt index 069682f15ed..4150ffbbb39 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/WasmEnvironmentConfigurator.kt @@ -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) } } \ No newline at end of file diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/generators/tests/GenerateWasmTests.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/generators/tests/GenerateWasmTests.kt index e7dfc4db280..073d50f5fa0 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/generators/tests/GenerateWasmTests.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/generators/tests/GenerateWasmTests.kt @@ -60,19 +60,23 @@ fun main(args: Array) { } testGroup("wasm/wasm.tests/tests-gen", "compiler/testData", testRunnerMethodName = "runTest0") { - testClass { + testClass { model("codegen/box", pattern = jsTranslatorTestPattern, excludeDirs = jvmOnlyBoxTests) } - testClass { + testClass { model("codegen/boxInline") } - testClass { + testClass { model("codegen/boxWasmJsInterop") } - testClass { + testClass { + model("codegen/boxWasmWasi") + } + + testClass { model("debug/stepping") } } diff --git a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt index 2e4bf37efbb..9b34c6beaba 100644 --- a/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt +++ b/wasm/wasm.tests/test/org/jetbrains/kotlin/wasm/test/AbstractFirWasmTest.kt @@ -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( @@ -44,12 +46,6 @@ open class AbstractFirWasmTest( override val afterBackendFacade: Constructor> get() = ::WasmBackendFacade - override val wasmBoxTestRunner: Constructor> - get() = ::WasmBoxRunner - - override val wasmEnvironmentConfigurator: Constructor - 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> + get() = ::WasmBoxRunner + + override val wasmEnvironmentConfigurator: Constructor + 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> get() = ::WasmDebugRunner @@ -116,3 +124,33 @@ open class AbstractFirWasmSteppingTest : AbstractFirWasmTest( } } } + +open class AbstractFirWasmWasiTest( + pathToTestDir: String, + testGroupOutputDirPrefix: String, +) : AbstractFirWasmTest(pathToTestDir, testGroupOutputDirPrefix) { + override val wasmBoxTestRunner: Constructor> + get() = ::WasiBoxRunner + + override val wasmEnvironmentConfigurator: Constructor + get() = ::WasmEnvironmentConfiguratorWasi + + override val additionalSourceProvider: Constructor? + 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 + ) + } +} \ No newline at end of file