From 973cc5238e2f7ede6d9cf54437785770a3e020c9 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Mon, 2 Mar 2020 17:10:16 +0100 Subject: Tests for wrapping groups in renderer. Also util for groups --- .../src/main/kotlin/testApi/context/MockContext.kt | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'testApi/src') diff --git a/testApi/src/main/kotlin/testApi/context/MockContext.kt b/testApi/src/main/kotlin/testApi/context/MockContext.kt index 4f481bce..758a4311 100644 --- a/testApi/src/main/kotlin/testApi/context/MockContext.kt +++ b/testApi/src/main/kotlin/testApi/context/MockContext.kt @@ -8,23 +8,30 @@ import org.jetbrains.dokka.plugability.DokkaPlugin import org.jetbrains.dokka.plugability.ExtensionPoint import org.jetbrains.dokka.utilities.DokkaConsoleLogger import kotlin.reflect.KClass +import kotlin.reflect.KMutableProperty +import kotlin.reflect.full.memberProperties @Suppress("UNCHECKED_CAST") // It is only usable from tests so we do not care about safety class MockContext( - vararg extensions: Pair, Any>, + vararg extensions: Pair, (DokkaContext) -> Any>, private val testConfiguration: DokkaConfiguration? = null, private val testPlatforms: Map? = null ) : DokkaContext { - private val extensionMap: Map, List> = - extensions.groupBy(Pair, Any>::first, Pair, Any>::second) - - override fun plugin(kclass: KClass): T? = null.also { - logger.warn("Cannot access plugins from mock context") + private val extensionMap by lazy { + extensions.groupBy(Pair, (DokkaContext) -> Any>::first) { + it.second(this) + } } + private val plugins = mutableMapOf, DokkaPlugin>() + + override fun plugin(kclass: KClass): T? = plugins.getOrPut(kclass) { + kclass.constructors.single { it.parameters.isEmpty() }.call().also { it.injectContext(this) } + } as T + override fun > get(point: E): List = extensionMap[point] as List - override fun > single(point: E): T = get(point).single() + override fun > single(point: E): T = get(point).single() override val logger = DokkaConsoleLogger @@ -33,4 +40,9 @@ class MockContext( override val platforms: Map get() = testPlatforms ?: throw IllegalStateException("This mock context doesn't provide platforms data") +} + +private fun DokkaPlugin.injectContext(context: DokkaContext) { + (DokkaPlugin::class.memberProperties.single { it.name == "context" } as KMutableProperty<*>) + .setter.call(this, context) } \ No newline at end of file -- cgit