From fd67464d148eb0d507b24608e6c54214df2c64b1 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Wed, 11 Jan 2023 12:59:52 +0100 Subject: [PATCH] [Wasm] Test infra: support _commonFiles and additional .mjs Use custom `evalToBoolean` as `eval` and `unsafeCast` are not available in Wasm stdlib --- .../jetbrains/kotlin/js/testOld/BasicWasmBoxTest.kt | 10 +++++++++- js/js.translator/testData/_commonFiles/testUtils.kt | 5 ++++- .../testData/box/native/passMemberOrExtFromNative.kt | 1 - 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/testOld/BasicWasmBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/testOld/BasicWasmBoxTest.kt index a3823d4e381..965b18f26e8 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/testOld/BasicWasmBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/testOld/BasicWasmBoxTest.kt @@ -47,6 +47,7 @@ abstract class BasicWasmBoxTest( private val testGroupOutputDirForCompilation = File(pathToRootOutputDir + "out/" + testGroupOutputDirPrefix) private val COMMON_FILES_NAME = "_common" + private val COMMON_FILES_DIR = "_commonFiles" private val extraLanguageFeatures = mapOf( LanguageFeature.JsAllowImplementingFunctionInterface to LanguageFeature.State.ENABLED, @@ -98,11 +99,18 @@ abstract class BasicWasmBoxTest( if (File(additionalJsFile).exists()) { jsFilesBefore += additionalJsFile } + val additionalMjsFile = filePath.removeSuffix(".kt") + ".mjs" + if (File(additionalMjsFile).exists()) { + mjsFiles += additionalMjsFile + } val localCommonFile = file.parent + "/" + COMMON_FILES_NAME + "." + KotlinFileType.EXTENSION val localCommonFiles = if (File(localCommonFile).exists()) listOf(localCommonFile) else emptyList() - val allSourceFiles = kotlinFiles + localCommonFiles + val globalCommonFilesDir = File(File(pathToTestDir).parent, COMMON_FILES_DIR) + val globalCommonFiles = globalCommonFilesDir.listFiles().orEmpty().map { it.absolutePath } + + val allSourceFiles = kotlinFiles + localCommonFiles + globalCommonFiles val psiFiles = createPsiFiles(allSourceFiles.map { File(it).canonicalPath }.sorted()) val config = createConfig(languageVersionSettings) diff --git a/js/js.translator/testData/_commonFiles/testUtils.kt b/js/js.translator/testData/_commonFiles/testUtils.kt index 683ec90241c..41983f1014c 100644 --- a/js/js.translator/testData/_commonFiles/testUtils.kt +++ b/js/js.translator/testData/_commonFiles/testUtils.kt @@ -1,6 +1,9 @@ package testUtils +@JsName("eval") +private external fun evalToBoolean(code: String): Boolean + fun isLegacyBackend(): Boolean = // Using eval to prevent DCE from thinking that following code depends on Kotlin module. - eval("(typeof Kotlin != \"undefined\" && typeof Kotlin.kotlin != \"undefined\")").unsafeCast() + evalToBoolean("(typeof Kotlin != \"undefined\" && typeof Kotlin.kotlin != \"undefined\")") diff --git a/js/js.translator/testData/box/native/passMemberOrExtFromNative.kt b/js/js.translator/testData/box/native/passMemberOrExtFromNative.kt index 16724a07859..85f256ac4b2 100644 --- a/js/js.translator/testData/box/native/passMemberOrExtFromNative.kt +++ b/js/js.translator/testData/box/native/passMemberOrExtFromNative.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: WASM // EXPECTED_REACHABLE_NODES: 1285 package foo