[Serialization] Migrate all tests to new test infrastructure
This commit is contained in:
committed by
teamcity
parent
4dd7437df1
commit
a2ffba275c
-79
@@ -1,79 +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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
|
||||
import org.jetbrains.kotlin.test.backend.handlers.IrTextDumpHandler
|
||||
import org.jetbrains.kotlin.test.backend.handlers.IrTreeVerifierHandler
|
||||
import org.jetbrains.kotlin.test.backend.handlers.JvmBoxRunner
|
||||
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.builders.fir2IrStep
|
||||
import org.jetbrains.kotlin.test.builders.irHandlersStep
|
||||
import org.jetbrains.kotlin.test.builders.jvmArtifactsHandlersStep
|
||||
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
|
||||
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
|
||||
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
||||
import org.jetbrains.kotlinx.serialization.compiler.fir.FirSerializationExtensionRegistrar
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractSerializationFirMembersTest: AbstractKotlinCompilerTest() {
|
||||
private val librariesList = listOf(getSerializationCoreLibraryJar()!!, getSerializationLibraryJar("kotlinx.serialization.json.Json")!!)
|
||||
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
baseFirDiagnosticTestConfiguration()
|
||||
|
||||
defaultDirectives {
|
||||
+FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
|
||||
+FirDiagnosticsDirectives.FIR_DUMP
|
||||
}
|
||||
|
||||
configureForKotlinxSerialization(librariesList) {
|
||||
FirExtensionRegistrarAdapter.registerExtension(FirSerializationExtensionRegistrar())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractSerializationFirBlackBoxTest : AbstractKotlinCompilerWithTargetBackendTest(TargetBackend.JVM_IR) {
|
||||
|
||||
private val librariesList = listOf(getSerializationCoreLibraryJar()!!, getSerializationLibraryJar("kotlinx.serialization.json.Json")!!)
|
||||
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
baseFirDiagnosticTestConfiguration()
|
||||
configureForKotlinxSerialization(librariesList) {
|
||||
FirExtensionRegistrarAdapter.registerExtension(FirSerializationExtensionRegistrar())
|
||||
}
|
||||
useCustomRuntimeClasspathProviders({ ts ->
|
||||
object : RuntimeClasspathProvider(ts) {
|
||||
override fun runtimeClassPaths(module: TestModule): List<File> {
|
||||
return librariesList
|
||||
}
|
||||
}
|
||||
})
|
||||
defaultDirectives {
|
||||
+FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
|
||||
}
|
||||
|
||||
fir2IrStep()
|
||||
irHandlersStep {
|
||||
useHandlers(
|
||||
::IrTextDumpHandler,
|
||||
::IrTreeVerifierHandler,
|
||||
)
|
||||
}
|
||||
facadeStep(::JvmIrBackendFacade)
|
||||
jvmArtifactsHandlersStep {
|
||||
useHandlers(::JvmBoxRunner)
|
||||
}
|
||||
|
||||
useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor)
|
||||
}
|
||||
}
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest
|
||||
|
||||
open class AbstractSerializationIrBoxTest : AbstractIrBlackBoxCodegenTest() {
|
||||
private val coreLibraryPath = getSerializationCoreLibraryJar()
|
||||
private val jsonLibraryPath = getSerializationLibraryJar("kotlinx.serialization.json.Json")
|
||||
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
val librariesPaths = listOf(coreLibraryPath!!, jsonLibraryPath!!)
|
||||
builder.configureForKotlinxSerialization(librariesPaths)
|
||||
}
|
||||
|
||||
}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.ObsoleteTestInfrastructure
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
|
||||
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
|
||||
import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
|
||||
import java.io.File
|
||||
|
||||
@OptIn(ObsoleteTestInfrastructure::class)
|
||||
abstract class AbstractSerializationIrBytecodeListingTest : AbstractAsmLikeInstructionListingTest() {
|
||||
private val coreLibraryPath = getSerializationCoreLibraryJar()
|
||||
|
||||
override fun getExpectedTextFileName(wholeFile: File): String {
|
||||
return wholeFile.nameWithoutExtension + ".ir.txt"
|
||||
}
|
||||
|
||||
override val backend = TargetBackend.JVM_IR
|
||||
|
||||
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
||||
registerExtensionsForTest(environment.project, environment.configuration) {
|
||||
SerializationComponentRegistrar.registerExtensions(this)
|
||||
}
|
||||
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
|
||||
}
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.ObsoleteTestInfrastructure
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
|
||||
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
|
||||
import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
|
||||
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
|
||||
|
||||
@OptIn(ObsoleteTestInfrastructure::class)
|
||||
abstract class AbstractSerializationPluginBytecodeListingTest : AbstractAsmLikeInstructionListingTest() {
|
||||
private val coreLibraryPath = getSerializationCoreLibraryJar()
|
||||
|
||||
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
||||
registerExtensionsForTest(environment.project, environment.configuration) {
|
||||
SerializationComponentRegistrar.registerExtensions(this)
|
||||
}
|
||||
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
|
||||
}
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.ObsoleteTestInfrastructure
|
||||
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
|
||||
import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
|
||||
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
|
||||
|
||||
@OptIn(ObsoleteTestInfrastructure::class)
|
||||
abstract class AbstractSerializationPluginDiagnosticTest : AbstractDiagnosticsTest() {
|
||||
private val coreLibraryPath = getSerializationCoreLibraryJar()
|
||||
|
||||
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
||||
registerExtensionsForTest(environment.project, environment.configuration) {
|
||||
SerializationComponentRegistrar.registerExtensions(this)
|
||||
}
|
||||
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
|
||||
}
|
||||
}
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest
|
||||
|
||||
open class AbstractSerializationWithoutRuntimeIrBoxTest : AbstractIrBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.configureForKotlinxSerialization(emptyList())
|
||||
}
|
||||
|
||||
}
|
||||
+15
-49
@@ -5,29 +5,30 @@
|
||||
|
||||
package org.jetbrains.kotlinx.serialization
|
||||
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.VersionReader
|
||||
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class RuntimeLibraryInClasspathTest {
|
||||
private val coreLibraryPath = getSerializationCoreLibraryJar()
|
||||
companion object {
|
||||
val coreLibraryPath = getSerializationLibraryJar("kotlinx.serialization.KSerializer")
|
||||
val jsonLibraryPath = getSerializationLibraryJar("kotlinx.serialization.json.Json")
|
||||
|
||||
private fun getSerializationLibraryJar(classToDetect: String): File? = try {
|
||||
PathUtil.getResourcePathForClass(Class.forName(classToDetect))
|
||||
} catch (e: ClassNotFoundException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testRuntimeLibraryExists() {
|
||||
TestCase.assertNotNull(
|
||||
assertNotNull(
|
||||
coreLibraryPath,
|
||||
"kotlinx-serialization runtime library is not found. Make sure it is present in test classpath",
|
||||
coreLibraryPath
|
||||
)
|
||||
}
|
||||
|
||||
@@ -38,38 +39,3 @@ class RuntimeLibraryInClasspathTest {
|
||||
assertTrue(version.implementationVersionMatchSupported(), "Runtime version too low")
|
||||
}
|
||||
}
|
||||
|
||||
internal fun getSerializationCoreLibraryJar(): File? = getSerializationLibraryJar("kotlinx.serialization.KSerializer")
|
||||
|
||||
internal fun getSerializationLibraryJar(classToDetect: String): File? = try {
|
||||
PathUtil.getResourcePathForClass(Class.forName(classToDetect))
|
||||
} catch (e: ClassNotFoundException) {
|
||||
null
|
||||
}
|
||||
|
||||
internal fun TestConfigurationBuilder.configureForKotlinxSerialization(librariesPaths: List<File>, registerAdditionalExtensions: ExtensionStorage.() -> Unit = {}) {
|
||||
useConfigurators(
|
||||
{ services ->
|
||||
object : EnvironmentConfigurator(services) {
|
||||
override fun configureCompilerConfiguration(
|
||||
configuration: CompilerConfiguration,
|
||||
module: TestModule
|
||||
) {
|
||||
configuration.addJvmClasspathRoots(librariesPaths)
|
||||
}
|
||||
|
||||
override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {
|
||||
SerializationComponentRegistrar.registerExtensions(this)
|
||||
registerAdditionalExtensions()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
useCustomRuntimeClasspathProviders(
|
||||
{
|
||||
object : RuntimeClasspathProvider(it) {
|
||||
override fun runtimeClassPaths(module: TestModule): List<File> = librariesPaths
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+23
-28
@@ -6,52 +6,47 @@
|
||||
package org.jetbrains.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.generators.generateTestGroupSuiteWithJUnit5
|
||||
import org.jetbrains.kotlin.generators.impl.generateTestGroupSuite
|
||||
import org.jetbrains.kotlinx.serialization.runners.*
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
System.setProperty("java.awt.headless", "true")
|
||||
|
||||
generateTestGroupSuite {
|
||||
testGroup(
|
||||
"plugins/kotlinx-serialization/tests-gen",
|
||||
"plugins/kotlinx-serialization/testData"
|
||||
) {
|
||||
testClass<AbstractSerializationPluginDiagnosticTest> {
|
||||
model("diagnostics")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationPluginBytecodeListingTest> {
|
||||
model("codegen")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationIrBytecodeListingTest> {
|
||||
model("codegen")
|
||||
}
|
||||
}
|
||||
}
|
||||
val excludedFirTestdataPattern = "^(.+)\\.fir\\.kts?\$"
|
||||
|
||||
generateTestGroupSuiteWithJUnit5(args) {
|
||||
testGroup(
|
||||
"plugins/kotlinx-serialization/tests-gen",
|
||||
"plugins/kotlinx-serialization/testData"
|
||||
) {
|
||||
// ------------------------------- diagnostics -------------------------------
|
||||
testClass<AbstractSerializationPluginDiagnosticTest>() {
|
||||
model("diagnostics", excludedPattern = excludedFirTestdataPattern)
|
||||
}
|
||||
|
||||
// ------------------------------- asm instructions -------------------------------
|
||||
|
||||
testClass<AbstractSerializationAsmLikeInstructionsListingTest> {
|
||||
model("codegen")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationIrAsmLikeInstructionsListingTest> {
|
||||
model("codegen")
|
||||
}
|
||||
|
||||
// ------------------------------- box -------------------------------
|
||||
|
||||
// New test infrastructure ONLY
|
||||
testClass<AbstractSerializationIrBoxTest> {
|
||||
model("boxIr")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationFirBlackBoxTest> {
|
||||
model("boxIr")
|
||||
model("firMembers")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationWithoutRuntimeIrBoxTest> {
|
||||
model("boxWithoutRuntime")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationFirMembersTest> {
|
||||
model("firMembers")
|
||||
}
|
||||
|
||||
testClass<AbstractSerializationFirBlackBoxTest> {
|
||||
model("firMembers")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization.runners
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.AsmLikeInstructionListingDirectives
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractAsmLikeInstructionListingTest
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrAsmLikeInstructionListingTest
|
||||
import org.jetbrains.kotlinx.serialization.configureForKotlinxSerialization
|
||||
|
||||
open class AbstractSerializationAsmLikeInstructionsListingTest : AbstractAsmLikeInstructionListingTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.enableDifference()
|
||||
builder.configureForKotlinxSerialization()
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractSerializationIrAsmLikeInstructionsListingTest : AbstractIrAsmLikeInstructionListingTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.enableDifference()
|
||||
builder.configureForKotlinxSerialization()
|
||||
}
|
||||
}
|
||||
|
||||
private fun TestConfigurationBuilder.enableDifference() {
|
||||
defaultDirectives {
|
||||
+AsmLikeInstructionListingDirectives.IR_DIFFERENCE
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization.runners
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractFirBlackBoxCodegenTest
|
||||
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest
|
||||
import org.jetbrains.kotlinx.serialization.configureForKotlinxSerialization
|
||||
|
||||
open class AbstractSerializationIrBoxTest : AbstractIrBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.configureForKotlinxSerialization()
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractSerializationWithoutRuntimeIrBoxTest : AbstractIrBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.configureForKotlinxSerialization(noLibraries = true)
|
||||
}
|
||||
}
|
||||
|
||||
open class AbstractSerializationFirBlackBoxTest : AbstractFirBlackBoxCodegenTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.configureForKotlinxSerialization()
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization.runners
|
||||
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.runners.AbstractDiagnosticTest
|
||||
import org.jetbrains.kotlinx.serialization.configureForKotlinxSerialization
|
||||
|
||||
abstract class AbstractSerializationPluginDiagnosticTest : AbstractDiagnosticTest() {
|
||||
override fun configure(builder: TestConfigurationBuilder) {
|
||||
super.configure(builder)
|
||||
builder.configureForKotlinxSerialization()
|
||||
}
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* 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.kotlinx.serialization
|
||||
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
|
||||
import org.jetbrains.kotlin.test.bind
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
|
||||
import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
|
||||
import org.jetbrains.kotlinx.serialization.compiler.fir.FirSerializationExtensionRegistrar
|
||||
import java.io.File
|
||||
|
||||
private val librariesPaths = listOfNotNull(RuntimeLibraryInClasspathTest.coreLibraryPath, RuntimeLibraryInClasspathTest.jsonLibraryPath)
|
||||
|
||||
class SerializationEnvironmentConfigurator(
|
||||
testServices: TestServices,
|
||||
private val noLibraries: Boolean
|
||||
) : EnvironmentConfigurator(testServices) {
|
||||
override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {
|
||||
if (noLibraries) return
|
||||
configuration.addJvmClasspathRoots(librariesPaths)
|
||||
}
|
||||
|
||||
override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions(
|
||||
module: TestModule,
|
||||
configuration: CompilerConfiguration
|
||||
) {
|
||||
SerializationComponentRegistrar.registerExtensions(this)
|
||||
FirExtensionRegistrarAdapter.registerExtension(FirSerializationExtensionRegistrar())
|
||||
}
|
||||
}
|
||||
|
||||
class SerializationRuntimeClasspathProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) {
|
||||
override fun runtimeClassPaths(module: TestModule): List<File> {
|
||||
return librariesPaths
|
||||
}
|
||||
}
|
||||
|
||||
fun TestConfigurationBuilder.configureForKotlinxSerialization(noLibraries: Boolean = false) {
|
||||
useConfigurators(::SerializationEnvironmentConfigurator.bind(noLibraries))
|
||||
if (!noLibraries) {
|
||||
useCustomRuntimeClasspathProviders(::SerializationRuntimeClasspathProvider)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user