From d73d36ef2cb8b121e1eb1302057ce02ae23b0ddb Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 13 Jun 2022 14:30:00 +0200 Subject: [PATCH] [kpm] kgp-idea: Refactor testFixtures - Consistently prefix entities with 'TestIdeaKpm' ^KT-52568 In Progress --- ... => TestIdeaKpmBinaryDependencyMatcher.kt} | 22 +++++++++---------- ...her.kt => TestIdeaKpmDependencyMatcher.kt} | 2 +- ...> TestIdeaKpmFragmentDependencyMatcher.kt} | 14 ++++++------ .../kpm/idea/testFixtures/assertions.kt | 4 ++-- .../kpm/idea/testFixtures/proxyUtil.kt} | 7 ++++++ .../idea/testFixtures/serializationUtil.kt | 6 +++++ 6 files changed, 34 insertions(+), 21 deletions(-) rename libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/{IdeaKpmBinaryDependencyMatcher.kt => TestIdeaKpmBinaryDependencyMatcher.kt} (71%) rename libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/{IdeaKpmDependencyMatcher.kt => TestIdeaKpmDependencyMatcher.kt} (85%) rename libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/{IdeaKpmFragmentDependencyMatcher.kt => TestIdeaKpmFragmentDependencyMatcher.kt} (64%) rename libraries/tools/kotlin-gradle-plugin-idea/src/{test/kotlin/ProxyUtil.kt => testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/proxyUtil.kt} (65%) diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmBinaryDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmBinaryDependencyMatcher.kt similarity index 71% rename from libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmBinaryDependencyMatcher.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmBinaryDependencyMatcher.kt index b8883d0d175..b03e43ff76e 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmBinaryDependencyMatcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmBinaryDependencyMatcher.kt @@ -10,22 +10,22 @@ import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmBinaryDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmResolvedBinaryDependency import java.io.File -fun buildIdeaKpmBinaryDependencyMatchers(notation: Any?): List { +fun buildIdeaKpmBinaryDependencyMatchers(notation: Any?): List { return when (notation) { null -> emptyList() - is IdeaKpmBinaryDependencyMatcher -> listOf(notation) - is String -> listOf(IdeaKpmBinaryDependencyMatcher.Coordinates(parseIdeaKpmBinaryCoordinates(notation))) - is Regex -> listOf(IdeaKpmBinaryDependencyMatcher.CoordinatesRegex(notation)) - is File -> listOf(IdeaKpmBinaryDependencyMatcher.BinaryFile(notation)) + is TestIdeaKpmBinaryDependencyMatcher -> listOf(notation) + is String -> listOf(TestIdeaKpmBinaryDependencyMatcher.Coordinates(parseIdeaKpmBinaryCoordinates(notation))) + is Regex -> listOf(TestIdeaKpmBinaryDependencyMatcher.CoordinatesRegex(notation)) + is File -> listOf(TestIdeaKpmBinaryDependencyMatcher.BinaryFile(notation)) is Iterable<*> -> notation.flatMap { child -> buildIdeaKpmBinaryDependencyMatchers(child) } - else -> error("Can't build ${IdeaKpmBinaryDependencyMatcher::class.simpleName} from $notation") + else -> error("Can't build ${TestIdeaKpmBinaryDependencyMatcher::class.simpleName} from $notation") } } -interface IdeaKpmBinaryDependencyMatcher : IdeaKpmDependencyMatcher{ +interface TestIdeaKpmBinaryDependencyMatcher : TestIdeaKpmDependencyMatcher{ class Coordinates( private val coordinates: IdeaKpmBinaryCoordinates - ) : IdeaKpmBinaryDependencyMatcher { + ) : TestIdeaKpmBinaryDependencyMatcher { override val description: String = coordinates.toString() override fun matches(dependency: IdeaKpmBinaryDependency): Boolean { @@ -35,7 +35,7 @@ interface IdeaKpmBinaryDependencyMatcher : IdeaKpmDependencyMatcher { +interface TestIdeaKpmDependencyMatcher { val description: String fun matches(dependency: T): Boolean } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmFragmentDependencyMatcher.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmFragmentDependencyMatcher.kt similarity index 64% rename from libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmFragmentDependencyMatcher.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmFragmentDependencyMatcher.kt index f6bea13c35b..7f61f6a5b14 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/IdeaKpmFragmentDependencyMatcher.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/TestIdeaKpmFragmentDependencyMatcher.kt @@ -2,18 +2,18 @@ package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKpmFragmentDependency -fun buildIdeaKpmFragmentDependencyMatchers(notation: Any?): List { +fun buildIdeaKpmFragmentDependencyMatchers(notation: Any?): List { return when (notation) { null -> emptyList() is Iterable<*> -> notation.flatMap { buildIdeaKpmFragmentDependencyMatchers(it) } - is String -> listOf(IdeaKpmFragmentDependencyMatcher.DependencyLiteral(notation)) - is Regex -> listOf(IdeaKpmFragmentDependencyMatcher.DependencyRegex(notation)) - else -> error("Can't build ${IdeaKpmFragmentDependencyMatcher::class.simpleName} from $notation") + is String -> listOf(TestIdeaKpmFragmentDependencyMatcher.DependencyLiteral(notation)) + is Regex -> listOf(TestIdeaKpmFragmentDependencyMatcher.DependencyRegex(notation)) + else -> error("Can't build ${TestIdeaKpmFragmentDependencyMatcher::class.simpleName} from $notation") } } -interface IdeaKpmFragmentDependencyMatcher : IdeaKpmDependencyMatcher { - class DependencyLiteral(private val dependencyLiteral: String) : IdeaKpmFragmentDependencyMatcher { +interface TestIdeaKpmFragmentDependencyMatcher : TestIdeaKpmDependencyMatcher { + class DependencyLiteral(private val dependencyLiteral: String) : TestIdeaKpmFragmentDependencyMatcher { override val description: String = dependencyLiteral override fun matches(dependency: IdeaKpmFragmentDependency): Boolean { @@ -21,7 +21,7 @@ interface IdeaKpmFragmentDependencyMatcher : IdeaKpmDependencyMatcher + matchers: Set ): Set { val resolvedBinaryDependencies = dependencies .mapNotNull { dependency -> @@ -91,7 +91,7 @@ fun IdeaKpmFragment.assertResolvedBinaryDependencies( binaryType: String, vararg matchers: Any? ) = assertResolvedBinaryDependencies(binaryType, matchers.toSet()) -fun IdeaKpmFragment.assertFragmentDependencies(matchers: Set): Set { +fun IdeaKpmFragment.assertFragmentDependencies(matchers: Set): Set { val sourceDependencies = dependencies.filterIsInstance().toSet() val unexpectedDependencies = sourceDependencies diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/ProxyUtil.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/proxyUtil.kt similarity index 65% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/ProxyUtil.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/proxyUtil.kt index e37f622d9d4..50af30edda9 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/ProxyUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/proxyUtil.kt @@ -1,3 +1,5 @@ +package org.jetbrains.kotlin.gradle.kpm.idea.testFixtures + import org.gradle.tooling.internal.adapter.ProtocolToModelAdapter /* @@ -12,3 +14,8 @@ inline fun createProxyInstance(obj: Any): T { fun unwrapProxyInstance(obj: Any): Any { return ProtocolToModelAdapter().unpack(obj) } + +inline fun Any.copy(): T { + val instance = runCatching { unwrapProxyInstance(this) }.getOrElse { this } + return T::class.java.cast(instance.serialize().deserialize()) +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/serializationUtil.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/serializationUtil.kt index 51f6420bcaf..90a3042a4fa 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/serializationUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/testFixtures/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/testFixtures/serializationUtil.kt @@ -26,6 +26,12 @@ fun ByteArray.deserialize(classLoader: ClassLoader): Any { return objectInputStream.use { it.readObject() } } +fun ByteArray.deserialize(): Any { + val inputStream = ByteArrayInputStream(this) + val objectInputStream = ObjectInputStream(inputStream) + return objectInputStream.use { it.readObject() } +} + class ClassLoaderObjectInputStream(stream: InputStream?, private val classLoader: ClassLoader) : ObjectInputStream(stream) { @Throws(IOException::class, ClassNotFoundException::class) override fun resolveClass(desc: ObjectStreamClass): Class<*> {