[Gradle][MPP] Implement assertAllImplementationsAlsoImplement assertion function

^KT-52726 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-09-07 16:46:01 +02:00
committed by Space
parent 134ed4bae1
commit 63232b1849
3 changed files with 22 additions and 20 deletions
@@ -7,23 +7,14 @@
package org.jetbrains.kotlin.gradle.mpp
import org.jetbrains.kotlin.gradle.assertAllImplementationsAlsoImplement
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinCompilation
import org.jetbrains.kotlin.gradle.reflections
import org.junit.Test
import kotlin.reflect.full.isSubclassOf
import kotlin.test.fail
class InternalKotlinSourceSetTest {
@Test
fun `test - all implementations of KotlinCompilation - implement InternalKotlinCompilation`() {
val subtypesOfKotlinSourceSet = reflections.getSubTypesOf(KotlinCompilation::class.java)
subtypesOfKotlinSourceSet
.filter { subtype -> !subtype.isInterface }
.forEach { implementation ->
if (!implementation.kotlin.isSubclassOf(InternalKotlinCompilation::class)) {
fail("$implementation does not implement ${InternalKotlinCompilation::class}")
}
}
assertAllImplementationsAlsoImplement(KotlinCompilation::class, InternalKotlinCompilation::class)
}
}
@@ -6,5 +6,21 @@
package org.jetbrains.kotlin.gradle
import org.reflections.Reflections
import kotlin.reflect.KClass
import kotlin.reflect.full.isSubclassOf
import kotlin.test.fail
val reflections = Reflections("org.jetbrains")
val reflections = Reflections("org.jetbrains")
fun assertAllImplementationsAlsoImplement(
baseInterface: KClass<*>,
requiredInterface: KClass<*>
) {
reflections.getSubTypesOf(baseInterface.java)
.filter { subtype -> !subtype.isInterface }
.forEach { implementation ->
if (!implementation.kotlin.isSubclassOf(requiredInterface)) {
fail("${implementation.kotlin} does not implement $requiredInterface")
}
}
}
@@ -7,6 +7,7 @@
package org.jetbrains.kotlin.gradle.sources
import org.jetbrains.kotlin.gradle.assertAllImplementationsAlsoImplement
import org.jetbrains.kotlin.gradle.buildProjectWithMPP
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.reflections
import org.junit.jupiter.api.assertAll
import kotlin.reflect.full.isSubclassOf
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -22,14 +24,7 @@ import kotlin.test.fail
class InternalKotlinSourceSetTest {
@Test
fun `test - all implementations of KotlinSourceSet - implement InternalKotlinSourceSet`() {
val subtypesOfKotlinSourceSet = reflections.getSubTypesOf(KotlinSourceSet::class.java)
subtypesOfKotlinSourceSet
.filter { subtype -> !subtype.isInterface }
.forEach { implementation ->
if (!implementation.kotlin.isSubclassOf(InternalKotlinSourceSet::class)) {
fail("$implementation does not implement ${InternalKotlinSourceSet::class}")
}
}
assertAllImplementationsAlsoImplement(KotlinSourceSet::class, InternalKotlinSourceSet::class)
}
@Test