From f0742fb7f8a937ef7c2e5a92d6f4a0fd079baa62 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Mon, 25 May 2020 14:40:59 +0200 Subject: Enum constructor values --- plugins/base/src/test/kotlin/enums/EnumsTest.kt | 146 ++++++++++++++++++++- plugins/base/src/test/kotlin/utils/contentUtils.kt | 2 +- 2 files changed, 144 insertions(+), 4 deletions(-) (limited to 'plugins/base/src/test') diff --git a/plugins/base/src/test/kotlin/enums/EnumsTest.kt b/plugins/base/src/test/kotlin/enums/EnumsTest.kt index 5f8bf8c8..6c44dc35 100644 --- a/plugins/base/src/test/kotlin/enums/EnumsTest.kt +++ b/plugins/base/src/test/kotlin/enums/EnumsTest.kt @@ -1,11 +1,16 @@ package enums +import matchers.content.assertNode +import matchers.content.group +import matchers.content.header +import matchers.content.link +import org.jetbrains.dokka.model.ConstructorValues import org.jetbrains.dokka.model.DEnum -import org.jetbrains.dokka.pages.ClasslikePageNode -import org.jetbrains.dokka.pages.ModulePageNode -import org.junit.jupiter.api.Test +import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Test +import utils.unwrapAnnotation class EnumsTest : AbstractCoreTest() { @@ -85,7 +90,142 @@ class EnumsTest : AbstractCoreTest() { } } + @Test + fun enumWithConstructor() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package enums + | + | + |enum class Test(name: String, index: Int, excluded: Boolean) { + | E1("e1", 1, true), + | E2("e2", 2, false); + |} + """.trimMargin(), + configuration + ) { + documentablesTransformationStage = { m -> + m.packages.let { p -> + p.first().classlikes.let { c -> + val enum = c.first() as DEnum + val (first, second) = enum.entries + + assertEquals(1, first.extra.allOfType().size) + assertEquals(1, second.extra.allOfType().size) + assertEquals(listOf("\"e1\"", "1", "true"), first.extra.allOfType().first().values) + assertEquals(listOf("\"e2\"", "2", "false"), second.extra.allOfType().first().values) + } + } + } + pagesGenerationStage = { module -> + val entryPage = module.dfs { it.name == "E1" } as ClasslikePageNode + val signaturePart = (entryPage.content.dfs { + it is ContentGroup && it.dci.toString() == "[enums/Test.E1///PointingToDeclaration/][Symbol]" + } as ContentGroup).children.first() as ContentGroup + assertEquals("(\"e1\", 1, true)", signaturePart.constructorSignature()) + } + } + } + + @Test + fun enumWithMethods() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package enums + | + | + |interface Sample { + | fun toBeImplemented(): String + |} + | + |enum class Test: Sample { + | E1 { + | override fun toBeImplemented(): String = "e1" + | } + |} + """.trimMargin(), + configuration + ) { + documentablesTransformationStage = { m -> + m.packages.let { p -> + p.first().classlikes.let { c -> + val enum = c.first { it is DEnum } as DEnum + val first = enum.entries.first() + + assertEquals(1, first.extra.allOfType().size) + assertEquals(emptyList(), first.extra.allOfType().first().values) + assertNotNull(first.functions.find { it.name == "toBeImplemented" }) + } + } + } + } + } + + @Test + fun enumWithAnnotationsOnEntries(){ + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package enums + | + |enum class Test { + | @SinceKotlin("1.3") + | E1 + |} + """.trimMargin(), + configuration + ) { + pagesTransformationStage = { m -> + val entryNode = m.children.first { it.name == "enums" }.children.first { it.name == "Test" }.children.first() as ClasslikePageNode + val signature = (entryNode.content as ContentGroup).dfs { it is ContentGroup && it.dci.toString() == "[enums/Test.E1///PointingToDeclaration/][Cover]" } as ContentGroup + + signature.assertNode { + header(1) { +"E1" } + group { + mapOf("SinceKotlin" to setOf("version")).entries.forEach { + group { + group { + unwrapAnnotation(it) + } + link { +"E1" } + } + } + } + } + } + } + } + fun ModulePageNode.getClasslikeToMemberMap() = this.parentMap.filterValues { it is ClasslikePageNode }.entries.groupBy({ it.value }) { it.key } + + private fun ContentGroup.constructorSignature(): String = + children.drop(1).joinToString(separator = "") { (it as ContentText).text } } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/utils/contentUtils.kt b/plugins/base/src/test/kotlin/utils/contentUtils.kt index 4aba3e9d..7e1b8bf4 100644 --- a/plugins/base/src/test/kotlin/utils/contentUtils.kt +++ b/plugins/base/src/test/kotlin/utils/contentUtils.kt @@ -184,7 +184,7 @@ fun ContentMatcherBuilder<*>.unnamedTag(tag: String, content: ContentMatcherBuil group { content() } } -private fun ContentMatcherBuilder<*>.unwrapAnnotation(elem: Map.Entry>) { +fun ContentMatcherBuilder<*>.unwrapAnnotation(elem: Map.Entry>) { +"@" link { +elem.key } +"(" -- cgit