[Test] Add ability to configure access to application disposable in test configuration
This is needed to unbound CompilerConfigurationProvider from ApplicationEnvironmentDisposer, which depends on classes from JUnit 5. This will allow to safely use compiler test framework with base test framework different from JUnit 5
This commit is contained in:
committed by
teamcity
parent
2f3ad476be
commit
400ad6a01e
+2
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
|||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.test.ExecutionListenerBasedDisposableProvider
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
@@ -151,6 +152,7 @@ abstract class AbstractFrontendApiTest : TestWithDisposable() {
|
|||||||
useSourcePreprocessor(::ExpressionMarkersSourceFilePreprocessor)
|
useSourcePreprocessor(::ExpressionMarkersSourceFilePreprocessor)
|
||||||
useAdditionalService { ExpressionMarkerProvider() }
|
useAdditionalService { ExpressionMarkerProvider() }
|
||||||
useAdditionalService(::TestKtModuleProvider)
|
useAdditionalService(::TestKtModuleProvider)
|
||||||
|
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||||
configureTest(this)
|
configureTest(this)
|
||||||
|
|
||||||
startingArtifactFactory = { ResultingArtifact.Source() }
|
startingArtifactFactory = { ResultingArtifact.Source() }
|
||||||
|
|||||||
+1
@@ -415,6 +415,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
|
|||||||
|
|
||||||
assertions = JUnit5Assertions
|
assertions = JUnit5Assertions
|
||||||
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
|
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
|
||||||
|
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||||
useSourcePreprocessor(*AbstractKotlinCompilerTest.defaultPreprocessors.toTypedArray())
|
useSourcePreprocessor(*AbstractKotlinCompilerTest.defaultPreprocessors.toTypedArray())
|
||||||
useDirectives(*AbstractKotlinCompilerTest.defaultDirectiveContainers.toTypedArray())
|
useDirectives(*AbstractKotlinCompilerTest.defaultDirectiveContainers.toTypedArray())
|
||||||
class AndroidTransformingPreprocessor(testServices: TestServices) : SourceFilePreprocessor(testServices) {
|
class AndroidTransformingPreprocessor(testServices: TestServices) : SourceFilePreprocessor(testServices) {
|
||||||
|
|||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* 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.test.services
|
||||||
|
|
||||||
|
import com.intellij.openapi.Disposable
|
||||||
|
|
||||||
|
abstract class ApplicationDisposableProvider : TestService {
|
||||||
|
abstract fun getApplicationRootDisposable(): Disposable
|
||||||
|
}
|
||||||
|
|
||||||
|
val TestServices.applicationDisposableProvider: ApplicationDisposableProvider by TestServices.testServiceAccessor()
|
||||||
+7
@@ -9,6 +9,7 @@ import com.intellij.openapi.Disposable
|
|||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
|
import org.jetbrains.kotlin.test.services.ApplicationDisposableProvider
|
||||||
import org.junit.platform.launcher.TestExecutionListener
|
import org.junit.platform.launcher.TestExecutionListener
|
||||||
import org.junit.platform.launcher.TestPlan
|
import org.junit.platform.launcher.TestPlan
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
@@ -26,3 +27,9 @@ class ApplicationEnvironmentDisposer : TestExecutionListener {
|
|||||||
ourApplicationField.set(null, null)
|
ourApplicationField.set(null, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ExecutionListenerBasedDisposableProvider : ApplicationDisposableProvider() {
|
||||||
|
override fun getApplicationRootDisposable(): Disposable {
|
||||||
|
return ApplicationEnvironmentDisposer.ROOT_DISPOSABLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+3
-3
@@ -46,7 +46,7 @@ class TestConfigurationBuilder {
|
|||||||
private val configurationsByNegativeTestDataCondition: MutableList<Pair<Regex, TestConfigurationBuilder.() -> Unit>> = mutableListOf()
|
private val configurationsByNegativeTestDataCondition: MutableList<Pair<Regex, TestConfigurationBuilder.() -> Unit>> = mutableListOf()
|
||||||
private val additionalServices: MutableList<ServiceRegistrationData> = mutableListOf()
|
private val additionalServices: MutableList<ServiceRegistrationData> = mutableListOf()
|
||||||
|
|
||||||
private var compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)? = null
|
private var compilerConfigurationProvider: ((TestServices, Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)? = null
|
||||||
private var runtimeClasspathProviders: MutableList<Constructor<RuntimeClasspathProvider>> = mutableListOf()
|
private var runtimeClasspathProviders: MutableList<Constructor<RuntimeClasspathProvider>> = mutableListOf()
|
||||||
|
|
||||||
lateinit var testInfo: KotlinTestInfo
|
lateinit var testInfo: KotlinTestInfo
|
||||||
@@ -184,7 +184,7 @@ class TestConfigurationBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@TestInfrastructureInternals
|
@TestInfrastructureInternals
|
||||||
fun useCustomCompilerConfigurationProvider(provider: (Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider) {
|
fun useCustomCompilerConfigurationProvider(provider: (TestServices, Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider) {
|
||||||
compilerConfigurationProvider = provider
|
compilerConfigurationProvider = provider
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +286,7 @@ class TestConfigurationBuilder {
|
|||||||
val additionalServices: List<ServiceRegistrationData>
|
val additionalServices: List<ServiceRegistrationData>
|
||||||
get() = builder.additionalServices
|
get() = builder.additionalServices
|
||||||
|
|
||||||
val compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?
|
val compilerConfigurationProvider: ((TestServices, Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?
|
||||||
get() = builder.compilerConfigurationProvider
|
get() = builder.compilerConfigurationProvider
|
||||||
val runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>
|
val runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>
|
||||||
get() = builder.runtimeClasspathProviders
|
get() = builder.runtimeClasspathProviders
|
||||||
|
|||||||
+3
-3
@@ -38,7 +38,7 @@ class TestConfigurationImpl(
|
|||||||
metaTestConfigurators: List<Constructor<MetaTestConfigurator>>,
|
metaTestConfigurators: List<Constructor<MetaTestConfigurator>>,
|
||||||
afterAnalysisCheckers: List<Constructor<AfterAnalysisChecker>>,
|
afterAnalysisCheckers: List<Constructor<AfterAnalysisChecker>>,
|
||||||
|
|
||||||
compilerConfigurationProvider: ((Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?,
|
compilerConfigurationProvider: ((TestServices, Disposable, List<AbstractEnvironmentConfigurator>) -> CompilerConfigurationProvider)?,
|
||||||
runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>,
|
runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>,
|
||||||
|
|
||||||
override val metaInfoHandlerEnabled: Boolean,
|
override val metaInfoHandlerEnabled: Boolean,
|
||||||
@@ -103,8 +103,8 @@ class TestConfigurationImpl(
|
|||||||
register(SourceFileProvider::class, sourceFileProvider)
|
register(SourceFileProvider::class, sourceFileProvider)
|
||||||
|
|
||||||
val environmentProvider =
|
val environmentProvider =
|
||||||
compilerConfigurationProvider?.invoke(rootDisposable, this@TestConfigurationImpl.environmentConfigurators)
|
compilerConfigurationProvider?.invoke(this, rootDisposable, this@TestConfigurationImpl.environmentConfigurators)
|
||||||
?: CompilerConfigurationProviderImpl(rootDisposable, this@TestConfigurationImpl.environmentConfigurators)
|
?: CompilerConfigurationProviderImpl(this, rootDisposable, this@TestConfigurationImpl.environmentConfigurators)
|
||||||
register(CompilerConfigurationProvider::class, environmentProvider)
|
register(CompilerConfigurationProvider::class, environmentProvider)
|
||||||
|
|
||||||
register(AssertionsService::class, assertions)
|
register(AssertionsService::class, assertions)
|
||||||
|
|||||||
+3
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.test.runners
|
|||||||
|
|
||||||
import com.intellij.testFramework.TestDataFile
|
import com.intellij.testFramework.TestDataFile
|
||||||
import org.jetbrains.kotlin.test.Constructor
|
import org.jetbrains.kotlin.test.Constructor
|
||||||
|
import org.jetbrains.kotlin.test.ExecutionListenerBasedDisposableProvider
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.testRunner
|
import org.jetbrains.kotlin.test.builders.testRunner
|
||||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
||||||
@@ -39,7 +40,9 @@ abstract class AbstractKotlinCompilerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val defaultConfiguration: TestConfigurationBuilder.() -> Unit = {
|
val defaultConfiguration: TestConfigurationBuilder.() -> Unit = {
|
||||||
|
assertions = JUnit5Assertions
|
||||||
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
|
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
|
||||||
|
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||||
useSourcePreprocessor(*defaultPreprocessors.toTypedArray())
|
useSourcePreprocessor(*defaultPreprocessors.toTypedArray())
|
||||||
useDirectives(*defaultDirectiveContainers.toTypedArray())
|
useDirectives(*defaultDirectiveContainers.toTypedArray())
|
||||||
configureDebugFlags()
|
configureDebugFlags()
|
||||||
@@ -48,7 +51,6 @@ abstract class AbstractKotlinCompilerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected val configuration: TestConfigurationBuilder.() -> Unit = {
|
protected val configuration: TestConfigurationBuilder.() -> Unit = {
|
||||||
assertions = JUnit5Assertions
|
|
||||||
defaultConfiguration()
|
defaultConfiguration()
|
||||||
configure(this)
|
configure(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.platform.js.isJs
|
|||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.platform.konan.isNative
|
import org.jetbrains.kotlin.platform.konan.isNative
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.ApplicationEnvironmentDisposer
|
|
||||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||||
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
|
import org.jetbrains.kotlin.test.directives.JsEnvironmentConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||||
@@ -34,7 +33,7 @@ import org.jetbrains.kotlin.test.model.TestFile
|
|||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class CompilerConfigurationProvider : TestService {
|
abstract class CompilerConfigurationProvider(val testServices: TestServices) : TestService {
|
||||||
abstract val testRootDisposable: Disposable
|
abstract val testRootDisposable: Disposable
|
||||||
|
|
||||||
protected abstract fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment
|
protected abstract fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment
|
||||||
@@ -65,9 +64,10 @@ abstract class CompilerConfigurationProvider : TestService {
|
|||||||
val TestServices.compilerConfigurationProvider: CompilerConfigurationProvider by TestServices.testServiceAccessor()
|
val TestServices.compilerConfigurationProvider: CompilerConfigurationProvider by TestServices.testServiceAccessor()
|
||||||
|
|
||||||
open class CompilerConfigurationProviderImpl(
|
open class CompilerConfigurationProviderImpl(
|
||||||
|
testServices: TestServices,
|
||||||
override val testRootDisposable: Disposable,
|
override val testRootDisposable: Disposable,
|
||||||
val configurators: List<AbstractEnvironmentConfigurator>
|
val configurators: List<AbstractEnvironmentConfigurator>
|
||||||
) : CompilerConfigurationProvider() {
|
) : CompilerConfigurationProvider(testServices) {
|
||||||
private val cache: MutableMap<TestModule, KotlinCoreEnvironment> = mutableMapOf()
|
private val cache: MutableMap<TestModule, KotlinCoreEnvironment> = mutableMapOf()
|
||||||
|
|
||||||
override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment {
|
override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment {
|
||||||
@@ -88,7 +88,7 @@ open class CompilerConfigurationProviderImpl(
|
|||||||
else -> error("Unknown platform: $platform")
|
else -> error("Unknown platform: $platform")
|
||||||
}
|
}
|
||||||
val applicationEnvironment = KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(
|
val applicationEnvironment = KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(
|
||||||
ApplicationEnvironmentDisposer.ROOT_DISPOSABLE,
|
testServices.applicationDisposableProvider.getApplicationRootDisposable(),
|
||||||
CompilerConfiguration()
|
CompilerConfiguration()
|
||||||
)
|
)
|
||||||
val initialConfiguration = createCompilerConfiguration(module)
|
val initialConfiguration = createCompilerConfiguration(module)
|
||||||
|
|||||||
Reference in New Issue
Block a user