From 27b458c222ff93b56cc1e5f5ee6b3f5ba31ba223 Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Thu, 19 Oct 2023 18:18:47 +0200 Subject: [PATCH] [JS IR test] Support multiplatform for invalidation tests --- .../incremental/AbstractInvalidationTest.kt | 25 ++++++++++++++++--- .../FirAbstractInvalidationTest.kt | 11 +++++--- .../incremental/IrAbstractInvalidationTest.kt | 2 +- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt index ad1b92962f9..c12dc80ab70 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt @@ -13,6 +13,7 @@ import com.intellij.psi.SingleRootFileViewProvider import com.intellij.testFramework.TestDataFile import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap +import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.codegen.* @@ -34,6 +35,7 @@ import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker import org.jetbrains.kotlin.konan.file.ZipFileSystemCacheableAccessor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.test.DebugMode import org.jetbrains.kotlin.test.TargetBackend @@ -45,7 +47,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.junit.ComparisonFailure import org.junit.jupiter.api.AfterEach import java.io.File +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.attribute.BasicFileAttributes import java.util.* +import java.util.stream.Collectors abstract class AbstractInvalidationTest( private val targetBackend: TargetBackend, @@ -412,9 +418,22 @@ abstract class AbstractInvalidationTest( private fun String.isAllowedJsFile() = (endsWith(".js") || endsWith(".mjs")) && !TEST_FILE_IGNORE_PATTERN.matches(this) - protected fun File.filteredKtFiles(): Collection { - assert(isDirectory && exists()) - return listFiles { _, name -> name.isAllowedKtFile() }!!.toList() + protected fun CompilerConfiguration.addSourcesFromDir(sourceDir: File): List { + assert(sourceDir.isDirectory && sourceDir.exists()) { "Cannot find source directory $sourceDir" } + + val sourceFiles = Files.find(sourceDir.toPath(), Integer.MAX_VALUE, { path: Path, fileAttributes: BasicFileAttributes -> + fileAttributes.isRegularFile && "${path.fileName}".isAllowedKtFile() + }).map { it.toFile() }.collect(Collectors.toList()) + + val ktSources = mutableListOf() + for (sourceFile in sourceFiles) { + val isCommon = sourceFile.parentFile.name == "common" + addKotlinSourceRoot(sourceFile.absolutePath, isCommon) + val ktFile = environment.createPsiFile(sourceFile) + ktFile.isCommonSource = isCommon + ktSources.add(ktFile) + } + return ktSources } private fun initializeWorkingDir(projectInfo: ProjectInfo, testDir: File, sourceDir: File, buildDir: File) { diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt index 138079842ba..5a1d9e0b978 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt @@ -5,9 +5,10 @@ package org.jetbrains.kotlin.incremental +import org.jetbrains.kotlin.cli.common.collectSources import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector -import org.jetbrains.kotlin.cli.js.klib.compileModuleToAnalyzedFirWithPsi +import org.jetbrains.kotlin.cli.js.klib.compileModulesToAnalyzedFirWithLightTree import org.jetbrains.kotlin.cli.js.klib.serializeFirKlib import org.jetbrains.kotlin.cli.js.klib.transformFirToIr import org.jetbrains.kotlin.config.CompilerConfiguration @@ -59,7 +60,7 @@ abstract class FirAbstractInvalidationTest( val libraries = dependencies.map { it.absolutePath } val friendLibraries = friends.map { it.absolutePath } - val sourceFiles = sourceDir.filteredKtFiles().map { environment.createPsiFile(it) } + val sourceFiles = configuration.addSourcesFromDir(sourceDir) val moduleStructure = ModulesStructure( project = environment.project, mainModule = MainModule.SourceFiles(sourceFiles), @@ -68,9 +69,11 @@ abstract class FirAbstractInvalidationTest( friendDependenciesPaths = friendLibraries ) - val analyzedOutput = compileModuleToAnalyzedFirWithPsi( + val groupedSources = collectSources(configuration, environment.project, messageCollector) + val analyzedOutput = compileModulesToAnalyzedFirWithLightTree( moduleStructure = moduleStructure, - ktFiles = sourceFiles, + groupedSources = groupedSources, + ktSourceFiles = groupedSources.commonSources + groupedSources.platformSources, libraries = libraries, friendLibraries = friendLibraries, diagnosticsReporter = diagnosticsReporter, diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt index 0a865baec81..fe7e8eb57f2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt @@ -81,7 +81,7 @@ abstract class IrAbstractInvalidationTest( ) { val projectJs = environment.project - val sourceFiles = sourceDir.filteredKtFiles().map { environment.createPsiFile(it) } + val sourceFiles = configuration.addSourcesFromDir(sourceDir) val sourceModule = prepareAnalyzedSourceModule( project = projectJs,