[JS TESTS] Extract common code responsible for getting dependencies

This commit is contained in:
Ivan Kylchik
2021-10-28 18:58:05 +03:00
parent fdf3288e3d
commit 81211acbc0
3 changed files with 30 additions and 25 deletions
@@ -316,12 +316,8 @@ class ClassicFrontendFacade(
): AnalysisResult {
val runtimeKlibsNames = JsEnvironmentConfigurator.getStdlibPathsForModule(module)
val runtimeKlibs = loadKlib(runtimeKlibsNames, configuration)
val transitiveLibraries = configuration[JSConfigurationKeys.TRANSITIVE_LIBRARIES]!!.map {
testServices.jsLibraryProvider.getDescriptorByPath(File(it).absolutePath.replace("_v5.meta.js", "").replace("outputDir", "outputKlibDir"))
}
val friendLibraries = configuration[JSConfigurationKeys.FRIEND_PATHS]!!.map {
testServices.jsLibraryProvider.getDescriptorByPath(File(it).absolutePath.replace("_v5.meta.js", "").replace("outputDir", "outputKlibDir"))
}
val transitiveLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.RegularDependency)
val friendLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.FriendDependency)
val allDependencies = runtimeKlibs + dependentDescriptors + transitiveLibraries
val analyzer = AnalyzerWithCompilerReport(configuration)
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.js.config.*
import org.jetbrains.kotlin.js.facade.MainCallParameters
@@ -22,15 +21,17 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.ERROR_POLICY
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.EXPECT_ACTUAL_LINKER
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.MODULE_KIND
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.NO_INLINE
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.ERROR_POLICY
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.SOURCE_MAP_EMBED_SOURCES
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.EXPECT_ACTUAL_LINKER
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives.TYPED_ARRAYS
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
import org.jetbrains.kotlin.test.model.ArtifactKinds
import org.jetbrains.kotlin.test.model.DependencyDescription
import org.jetbrains.kotlin.test.model.DependencyRelation
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.util.joinToArrayString
@@ -72,19 +73,19 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
}
fun getJsModuleArtifactPath(testServices: TestServices, moduleName: String): String {
return getJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
return getJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
}
fun getJsKlibArtifactPath(testServices: TestServices, moduleName: String): String {
return getJsKlibOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName)
return getJsKlibOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName)
}
fun getDceJsArtifactPath(testServices: TestServices, moduleName: String): String {
return getDceJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
return getDceJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
}
fun getPirJsArtifactPath(testServices: TestServices, moduleName: String): String {
return getPirJsArtifactsOutputDir(testServices).absolutePath + "/" + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
return getPirJsArtifactsOutputDir(testServices).absolutePath + File.separator + getJsArtifactSimpleName(testServices, moduleName) + "_v5"
}
fun getJsArtifactsOutputDir(testServices: TestServices): File {
@@ -150,6 +151,23 @@ class JsEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigu
return names.map { System.getProperty("kotlin.js.$it.path") }
}
fun getDependencies(module: TestModule, testServices: TestServices, kind: DependencyRelation): List<ModuleDescriptorImpl> {
val visited = mutableSetOf<TestModule>()
fun getRecursive(module: TestModule, kind: DependencyRelation) {
val dependencies = if (kind == DependencyRelation.FriendDependency) module.friendDependencies else module.regularDependencies
dependencies.map { testServices.dependencyProvider.getTestModule(it.moduleName) }.forEach {
if (it !in visited) {
visited += it
getRecursive(it, kind)
}
}
}
getRecursive(module, kind)
return visited
.map { testServices.dependencyProvider.getArtifact(it, ArtifactKinds.KLib).outputFile }
.map { testServices.jsLibraryProvider.getDescriptorByPath(it.absolutePath) }
}
fun getMainCallParametersForModule(module: TestModule): MainCallParameters {
return when (JsEnvironmentConfigurationDirectives.CALL_MAIN) {
in module.directives -> MainCallParameters.mainWithArguments(listOf())
@@ -34,10 +34,7 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.classic.moduleDescriptorProvider
import org.jetbrains.kotlin.test.model.AbstractTestFacade
import org.jetbrains.kotlin.test.model.ArtifactKinds
import org.jetbrains.kotlin.test.model.BinaryArtifacts
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
@@ -181,14 +178,8 @@ class JsIrBackendFacade(
val moduleDescriptor = testServices.moduleDescriptorProvider.getModuleDescriptor(module)
val mainModuleLib = testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(moduleDescriptor)
val friendLibraries = configuration[JSConfigurationKeys.FRIEND_PATHS]!!.map {
val descriptor = testServices.jsLibraryProvider.getDescriptorByPath(
File(it).absolutePath
.replace("_v5.meta.js", "")
.replace("outputDir", "outputKlibDir")
)
testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(descriptor)
}
val friendLibraries = JsEnvironmentConfigurator.getDependencies(module, testServices, DependencyRelation.FriendDependency)
.map { testServices.jsLibraryProvider.getCompiledLibraryByDescriptor(it) }
val friendModules = mapOf(mainModuleLib.uniqueName to friendLibraries.map { it.uniqueName })
return getIrModuleInfoForKlib(