[Test] Add service to provide additional classpath to box tests

This commit is contained in:
Steffi Stumpos
2021-07-08 11:43:09 -06:00
committed by teamcityserver
parent a55eacd8db
commit 707e1c7f8d
4 changed files with 29 additions and 3 deletions
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2021 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 java.io.File
abstract class RuntimeClasspathProvider {
abstract fun runtimeClassPaths(): List<File>
}
class RuntimeClasspathProviderHolder(val providers: List<RuntimeClasspathProvider>) : TestService
private val TestServices.runtimeClasspathProviderHolder: RuntimeClasspathProviderHolder by TestServices.testServiceAccessor()
val TestServices.runtimeClasspathProviders: List<RuntimeClasspathProvider>
get() = runtimeClasspathProviderHolder.providers
@@ -16,10 +16,8 @@ import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.model.BinaryArtifacts
import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.compilerConfigurationProvider
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator.Companion.TEST_CONFIGURATION_KIND_KEY
import org.jetbrains.kotlin.test.services.dependencyProvider
import org.jetbrains.kotlin.test.services.jvm.compiledClassesManager
import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.runIf
@@ -195,6 +193,7 @@ class JvmBoxRunner(testServices: TestServices) : JvmBinaryArtifactHandler(testSe
}
computeClasspath(rootModule, true)
testServices.runtimeClasspathProviders.flatMapTo(result) { it.runtimeClassPaths() }
return result
}
@@ -46,6 +46,7 @@ class TestConfigurationBuilder {
private val additionalServices: MutableList<ServiceRegistrationData> = mutableListOf()
private var compilerConfigurationProvider: ((Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider)? = null
private var runtimeClasspathProviders: MutableList<Constructor<RuntimeClasspathProvider>> = mutableListOf()
lateinit var testInfo: KotlinTestInfo
@@ -154,6 +155,10 @@ class TestConfigurationBuilder {
compilerConfigurationProvider = provider
}
fun useCustomRuntimeClasspathProvider(provider: Constructor<RuntimeClasspathProvider>) {
runtimeClasspathProviders += provider
}
fun useMetaTestConfigurators(vararg configurators: Constructor<MetaTestConfigurator>) {
metaTestConfigurators += configurators
}
@@ -199,6 +204,7 @@ class TestConfigurationBuilder {
metaTestConfigurators,
afterAnalysisCheckers,
compilerConfigurationProvider,
runtimeClasspathProviders,
metaInfoHandlerEnabled,
directives,
defaultRegisteredDirectivesBuilder.build(),
@@ -39,6 +39,7 @@ class TestConfigurationImpl(
afterAnalysisCheckers: List<Constructor<AfterAnalysisChecker>>,
compilerConfigurationProvider: ((Disposable, List<EnvironmentConfigurator>) -> CompilerConfigurationProvider)?,
runtimeClasspathProviders: List<Constructor<RuntimeClasspathProvider>>,
override val metaInfoHandlerEnabled: Boolean,
@@ -51,6 +52,8 @@ class TestConfigurationImpl(
init {
testServices.register(KotlinTestInfo::class, testInfo)
val runtimeClassPathProviders = runtimeClasspathProviders.map { it.invoke(testServices) }
testServices.register(RuntimeClasspathProviderHolder::class, RuntimeClasspathProviderHolder(runtimeClassPathProviders))
additionalServices.forEach { testServices.register(it) }
}