[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 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,
|
||||||
|
|||||||
Reference in New Issue
Block a user