[JS IR test] Support multiplatform for invalidation tests
This commit is contained in:
committed by
Space Team
parent
756cd25417
commit
27b458c222
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user