[analysis api, test] rework test infrastructure, add possibility to create multimodule tests
This commit is contained in:
+4
-6
@@ -10,12 +10,16 @@ import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import com.intellij.testFramework.TestDataFile
|
||||
import junit.framework.ComparisonFailure
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.analyse
|
||||
import org.jetbrains.kotlin.analysis.api.analyseInDependedAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.*
|
||||
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
||||
import org.jetbrains.kotlin.analysis.test.framework.TestWithDisposable
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkerProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkersSourceFilePreprocessor
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.libraries.LibraryWasNotCompiledDueToExpectedCompilationError
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||
import org.jetbrains.kotlin.analysis.test.framework.utils.SkipTestException
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
@@ -114,12 +118,6 @@ abstract class AbstractAnalysisApiBasedTest : TestWithDisposable() {
|
||||
useAdditionalService { ExpressionMarkerProvider() }
|
||||
|
||||
registerAnalysisApiBaseTestServices(disposable, configurator)
|
||||
|
||||
useAdditionalService(::TestKtModuleProvider)
|
||||
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||
useAdditionalService<KotlinStandardLibrariesPathProvider> { StandardLibrariesPathProviderForKotlinProject }
|
||||
useDirectives(AnalysisApiTestDirectives)
|
||||
|
||||
configureTest(this)
|
||||
|
||||
startingArtifactFactory = { ResultingArtifact.Source() }
|
||||
|
||||
+8
@@ -6,13 +6,18 @@
|
||||
package org.jetbrains.kotlin.analysis.test.framework.base
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.AnalysisApiKtModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.AnalysisApiKtModuleProviderImpl
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.*
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||
import org.jetbrains.kotlin.test.ExecutionListenerBasedDisposableProvider
|
||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.bind
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.services.ApplicationDisposableProvider
|
||||
import org.jetbrains.kotlin.test.services.KotlinStandardLibrariesPathProvider
|
||||
import org.jetbrains.kotlin.test.services.StandardLibrariesPathProviderForKotlinProject
|
||||
|
||||
@OptIn(TestInfrastructureInternals::class)
|
||||
fun TestConfigurationBuilder.registerAnalysisApiBaseTestServices(
|
||||
@@ -22,7 +27,10 @@ fun TestConfigurationBuilder.registerAnalysisApiBaseTestServices(
|
||||
useAdditionalService<TestDisposableProvider>(::TestDisposableProviderImpl)
|
||||
useAdditionalService<AnalysisApiKtModuleProvider>(::AnalysisApiKtModuleProviderImpl)
|
||||
useAdditionalService<AnalysisApiEnvironmentManager>(::AnalysisApiEnvironmentManagerImpl.bind(testDisposable))
|
||||
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||
useAdditionalService<KotlinStandardLibrariesPathProvider> { StandardLibrariesPathProviderForKotlinProject }
|
||||
|
||||
useCustomCompilerConfigurationProvider(::AnalysisApiTestCompilerConfiguratorProvider)
|
||||
usePreAnalysisHandlers(::ProjectStructureInitialisationPreAnalysisHandler.bind(configurator))
|
||||
useDirectives(AnalysisApiTestDirectives)
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.test.framework.project.structure
|
||||
|
||||
+3
-6
@@ -15,10 +15,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.test.ApplicationEnvironmentDisposer
|
||||
import org.jetbrains.kotlin.test.services.TestService
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
|
||||
import org.jetbrains.kotlin.test.services.moduleStructure
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
|
||||
abstract class AnalysisApiEnvironmentManager : TestService {
|
||||
abstract val testServices: TestServices
|
||||
@@ -43,7 +40,7 @@ class AnalysisApiEnvironmentManagerImpl(
|
||||
private val _projectEnvironment: KotlinCoreProjectEnvironment by lazy {
|
||||
StandaloneProjectFactory.createProjectEnvironment(
|
||||
testRootDisposable,
|
||||
ApplicationEnvironmentDisposer.ROOT_DISPOSABLE
|
||||
testServices.applicationDisposableProvider.getApplicationRootDisposable(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -66,7 +63,7 @@ class AnalysisApiEnvironmentManagerImpl(
|
||||
useSiteCompilerConfiguration.get(JVMConfigurationKeys.JDK_HOME)?.toPath(),
|
||||
)
|
||||
|
||||
testServices.compilerConfigurationProvider.registerCompilerExtensions(getProject(), useSiteModule)
|
||||
testServices.compilerConfigurationProvider.registerCompilerExtensions(getProject(), useSiteModule, useSiteCompilerConfiguration)
|
||||
}
|
||||
|
||||
override fun getProjectEnvironment(): KotlinCoreProjectEnvironment =
|
||||
|
||||
+2
-2
@@ -21,10 +21,10 @@ import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
|
||||
class AnalysisApiTestCompilerConfiguratorProvider(
|
||||
override val testServices: TestServices,
|
||||
testServices: TestServices,
|
||||
override val testRootDisposable: Disposable,
|
||||
override val configurators: List<AbstractEnvironmentConfigurator>
|
||||
) : CompilerConfigurationProvider() {
|
||||
) : CompilerConfigurationProvider(testServices) {
|
||||
private val configurationCache: MutableMap<TestModule, CompilerConfiguration> = mutableMapOf()
|
||||
|
||||
private val allProjectBinaryRoots by lazy {
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ internal object TestModuleCompiler {
|
||||
JarOutputStream(librarySourcesPath.outputStream(), manifest).use { jarOutputStream ->
|
||||
for (testFile in module.files) {
|
||||
val text = testServices.sourceFileProvider.getContentOfSourceFile(testFile)
|
||||
addFileToJar(testFile.name, text, jarOutputStream)
|
||||
addFileToJar(testFile.relativePath, text, jarOutputStream)
|
||||
}
|
||||
}
|
||||
return librarySourcesPath
|
||||
|
||||
Reference in New Issue
Block a user