[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 com.intellij.testFramework.TestDataFile
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap 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.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.codegen.* 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.konan.file.ZipFileSystemCacheableAccessor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.DebugMode import org.jetbrains.kotlin.test.DebugMode
import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TargetBackend
@@ -45,7 +47,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.runIf
import org.junit.ComparisonFailure import org.junit.ComparisonFailure
import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.AfterEach
import java.io.File 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.*
import java.util.stream.Collectors
abstract class AbstractInvalidationTest( abstract class AbstractInvalidationTest(
private val targetBackend: TargetBackend, 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) private fun String.isAllowedJsFile() = (endsWith(".js") || endsWith(".mjs")) && !TEST_FILE_IGNORE_PATTERN.matches(this)
protected fun File.filteredKtFiles(): Collection<File> { protected fun CompilerConfiguration.addSourcesFromDir(sourceDir: File): List<KtFile> {
assert(isDirectory && exists()) assert(sourceDir.isDirectory && sourceDir.exists()) { "Cannot find source directory $sourceDir" }
return listFiles { _, name -> name.isAllowedKtFile() }!!.toList()
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) { private fun initializeWorkingDir(projectInfo: ProjectInfo, testDir: File, sourceDir: File, buildDir: File) {
@@ -5,9 +5,10 @@
package org.jetbrains.kotlin.incremental 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.MessageRenderer
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector 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.serializeFirKlib
import org.jetbrains.kotlin.cli.js.klib.transformFirToIr import org.jetbrains.kotlin.cli.js.klib.transformFirToIr
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -59,7 +60,7 @@ abstract class FirAbstractInvalidationTest(
val libraries = dependencies.map { it.absolutePath } val libraries = dependencies.map { it.absolutePath }
val friendLibraries = friends.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( val moduleStructure = ModulesStructure(
project = environment.project, project = environment.project,
mainModule = MainModule.SourceFiles(sourceFiles), mainModule = MainModule.SourceFiles(sourceFiles),
@@ -68,9 +69,11 @@ abstract class FirAbstractInvalidationTest(
friendDependenciesPaths = friendLibraries friendDependenciesPaths = friendLibraries
) )
val analyzedOutput = compileModuleToAnalyzedFirWithPsi( val groupedSources = collectSources(configuration, environment.project, messageCollector)
val analyzedOutput = compileModulesToAnalyzedFirWithLightTree(
moduleStructure = moduleStructure, moduleStructure = moduleStructure,
ktFiles = sourceFiles, groupedSources = groupedSources,
ktSourceFiles = groupedSources.commonSources + groupedSources.platformSources,
libraries = libraries, libraries = libraries,
friendLibraries = friendLibraries, friendLibraries = friendLibraries,
diagnosticsReporter = diagnosticsReporter, diagnosticsReporter = diagnosticsReporter,
@@ -81,7 +81,7 @@ abstract class IrAbstractInvalidationTest(
) { ) {
val projectJs = environment.project val projectJs = environment.project
val sourceFiles = sourceDir.filteredKtFiles().map { environment.createPsiFile(it) } val sourceFiles = configuration.addSourcesFromDir(sourceDir)
val sourceModule = prepareAnalyzedSourceModule( val sourceModule = prepareAnalyzedSourceModule(
project = projectJs, project = projectJs,