[JS IR test] Support multiplatform for invalidation tests

This commit is contained in:
Alexander Korepanov
2023-10-19 18:18:47 +02:00
committed by Space Team
parent 756cd25417
commit 27b458c222
3 changed files with 30 additions and 8 deletions
@@ -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<File> {
assert(isDirectory && exists())
return listFiles { _, name -> name.isAllowedKtFile() }!!.toList()
protected fun CompilerConfiguration.addSourcesFromDir(sourceDir: File): List<KtFile> {
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<KtFile>()
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) {
@@ -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,
@@ -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,