[Gradle] Implement IdeaKotlinDependencyForwardCompatibilityTest
KT-54825
This commit is contained in:
committed by
Space Team
parent
66cb2b3ad8
commit
7c00f6447d
@@ -23,6 +23,7 @@ dependencies {
|
||||
embedded("com.google.protobuf:protobuf-java:3.21.9")
|
||||
embedded("com.google.protobuf:protobuf-kotlin:3.21.9")
|
||||
testImplementation(project(":kotlin-test:kotlin-test-junit"))
|
||||
testImplementation(kotlin("reflect"))
|
||||
testImplementation(testFixtures(project(":kotlin-gradle-plugin-idea")))
|
||||
}
|
||||
|
||||
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* 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.gradle.idea.proto.tcs
|
||||
|
||||
import org.jetbrains.kotlin.gradle.idea.proto.classLoaderForBackwardsCompatibleClasses
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinUnresolvedBinaryDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext
|
||||
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.TestIdeaKotlinDependencySerializer
|
||||
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.TestIdeaKotlinInstances
|
||||
import org.junit.Test
|
||||
import kotlin.reflect.KProperty0
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.fail
|
||||
|
||||
class IdeaKotlinDependencyForwardCompatibilityTest {
|
||||
|
||||
@Test
|
||||
fun `test - simple unresolved binary dependency`() {
|
||||
val binary = oldBinaryOf(TestIdeaKotlinInstances::simpleUnresolvedBinaryDependency)
|
||||
val deserialized = deserializeOrFail<IdeaKotlinUnresolvedBinaryDependency>(binary)
|
||||
|
||||
assertEquals(TestIdeaKotlinInstances.simpleUnresolvedBinaryDependency.cause, deserialized.cause)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleUnresolvedBinaryDependency.coordinates, deserialized.coordinates)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleUnresolvedBinaryDependency.extras, deserialized.extras)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - simple resolved binary dependency`() {
|
||||
val binary = oldBinaryOf(TestIdeaKotlinInstances::simpleResolvedBinaryDependency)
|
||||
val deserialized = deserializeOrFail<IdeaKotlinResolvedBinaryDependency>(binary)
|
||||
|
||||
assertEquals(TestIdeaKotlinInstances.simpleResolvedBinaryDependency.coordinates, deserialized.coordinates)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleResolvedBinaryDependency.binaryType, deserialized.binaryType)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleResolvedBinaryDependency.binaryFile, deserialized.binaryFile)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleResolvedBinaryDependency.extras, deserialized.extras)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - simple source dependency`() {
|
||||
val binary = oldBinaryOf(TestIdeaKotlinInstances::simpleSourceDependency)
|
||||
val deserialized = deserializeOrFail<IdeaKotlinSourceDependency>(binary)
|
||||
|
||||
assertEquals(TestIdeaKotlinInstances.simpleSourceDependency.type, deserialized.type)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleSourceDependency.coordinates, deserialized.coordinates)
|
||||
assertEquals(TestIdeaKotlinInstances.simpleSourceDependency.extras, deserialized.extras)
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <reified T : IdeaKotlinDependency> deserializeOrFail(data: ByteArray): T {
|
||||
val context = TestIdeaKotlinSerializationContext()
|
||||
val deserialized = context.IdeaKotlinDependency(data) ?: fail(
|
||||
"Failed to deserialize ${T::class.java.name}. Reports:\n" + context.logger.reports.joinToString("\n")
|
||||
)
|
||||
|
||||
return deserialized as T
|
||||
}
|
||||
|
||||
private fun oldBinaryOf(property: KProperty0<IdeaKotlinDependency>): ByteArray {
|
||||
val classLoader = classLoaderForBackwardsCompatibleClasses()
|
||||
val testIdeaKotlinInstancesClazz = classLoader.loadClass(TestIdeaKotlinInstances::class.java.name).kotlin
|
||||
|
||||
val testIdeaKotlinInstances = testIdeaKotlinInstancesClazz.objectInstance
|
||||
?: error("Failed to get ${TestIdeaKotlinInstances::class.java.name} instance")
|
||||
|
||||
val member = testIdeaKotlinInstancesClazz.members
|
||||
.firstOrNull { it.name == property.name }
|
||||
?: error("Failed to get '${property.name}' member")
|
||||
|
||||
val dependencyInstance = member.call(testIdeaKotlinInstances)
|
||||
?: error("Failed to get '${property.name}'")
|
||||
|
||||
return TestIdeaKotlinDependencySerializer(classLoader).serialize(dependencyInstance)
|
||||
}
|
||||
+2
-2
@@ -47,8 +47,8 @@ object TestIdeaKotlinInstances {
|
||||
)
|
||||
|
||||
val simpleSourceDependency = IdeaKotlinSourceDependency(
|
||||
coordinates = TestIdeaKotlinInstances.simpleSourceCoordinates,
|
||||
coordinates = simpleSourceCoordinates,
|
||||
type = IdeaKotlinSourceDependency.Type.Regular,
|
||||
extras = TestIdeaKotlinInstances.extrasWithIntAndStrings.toMutableExtras()
|
||||
extras = extrasWithIntAndStrings.toMutableExtras()
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user