aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt')
-rw-r--r--plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt418
1 files changed, 0 insertions, 418 deletions
diff --git a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt b/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
deleted file mode 100644
index 1b73ffee..00000000
--- a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package linkableContent
-
-import org.jetbrains.dokka.SourceLinkDefinitionImpl
-import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
-import org.jetbrains.dokka.base.transformers.pages.sourcelinks.SourceLinksTransformer
-import org.jetbrains.dokka.model.WithGenerics
-import org.jetbrains.dokka.model.dfs
-import org.jetbrains.dokka.model.doc.Text
-import org.jetbrains.dokka.pages.*
-import org.jsoup.Jsoup
-import utils.TestOutputWriterPlugin
-import utils.assertNotNull
-import java.net.URL
-import java.nio.file.Paths
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertNotEquals
-import kotlin.test.assertNotNull
-import utils.OnlyDescriptorsMPP
-
-class LinkableContentTest : BaseAbstractTest() {
-
- @OnlyDescriptorsMPP("#3238")
- @Test
- fun `Include module and package documentation`() {
-
- val testDataDir = getTestDataDir("multiplatform/basicMultiplatformTest").toAbsolutePath()
- val includesDir = getTestDataDir("linkable/includes").toAbsolutePath()
-
- val configuration = dokkaConfiguration {
- moduleName = "example"
- sourceSets {
- val common = sourceSet {
- name = "common"
- displayName = "common"
- analysisPlatform = "common"
- sourceRoots = listOf(Paths.get("$testDataDir/commonMain/kotlin").toString())
- }
- val jvmAndJsSecondCommonMain = sourceSet {
- name = "jvmAndJsSecondCommonMain"
- displayName = "jvmAndJsSecondCommonMain"
- analysisPlatform = "common"
- dependentSourceSets = setOf(common.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmAndJsSecondCommonMain/kotlin").toString())
- }
- sourceSet {
- name = "js"
- displayName = "js"
- analysisPlatform = "js"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jsMain/kotlin").toString())
- includes = listOf(Paths.get("$includesDir/include2.md").toString())
- }
- sourceSet {
- name = "jvm"
- displayName = "jvm"
- analysisPlatform = "jvm"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmMain/kotlin").toString())
- includes = listOf(Paths.get("$includesDir/include1.md").toString())
- }
- }
- }
-
- testFromData(configuration) {
- documentablesMergingStage = {
- assertEquals(2, it.documentation.size)
- assertEquals(2, it.packages.size)
- assertEquals(1, it.packages.first().documentation.size)
- assertEquals(1, it.packages.last().documentation.size)
- }
- }
-
- }
-
- @Test
- fun `Sources multiplatform class documentation`() {
-
- val testDataDir = getTestDataDir("linkable/sources").toAbsolutePath()
-
- val configuration = dokkaConfiguration {
- moduleName = "example"
-
- sourceSets {
- val common = sourceSet {
- name = "common"
- displayName = "common"
- analysisPlatform = "common"
- sourceRoots = listOf(Paths.get("$testDataDir/commonMain/kotlin").toString())
- }
- val jvmAndJsSecondCommonMain = sourceSet {
- name = "jvmAndJsSecondCommonMain"
- displayName = "jvmAndJsSecondCommonMain"
- analysisPlatform = "common"
- dependentSourceSets = setOf(common.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmAndJsSecondCommonMain/kotlin").toString())
- }
- sourceSet {
- name = "js"
- displayName = "js"
- analysisPlatform = "js"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jsMain/kotlin").toString())
- sourceLinks = listOf(
- SourceLinkDefinitionImpl(
- localDirectory = "$testDataDir/jsMain/kotlin",
- remoteUrl = URL("https://github.com/user/repo/tree/master/src/jsMain/kotlin"),
- remoteLineSuffix = "#L"
- )
- )
- }
- sourceSet {
- name = "jvm"
- displayName = "jvm"
- analysisPlatform = "jvm"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmMain/kotlin").toString())
- sourceLinks = listOf(
- SourceLinkDefinitionImpl(
- localDirectory = "$testDataDir/jvmMain/kotlin",
- remoteUrl = URL("https://github.com/user/repo/tree/master/src/jvmMain/kotlin"),
- remoteLineSuffix = "#L"
- )
- )
- }
- }
- }
-
- testFromData(configuration) {
- renderingStage = { rootPageNode, dokkaContext ->
- val newRoot = SourceLinksTransformer(dokkaContext).invoke(rootPageNode)
- val moduleChildren = newRoot.children
- assertEquals(1, moduleChildren.size)
- val packageChildren = moduleChildren.first().children
- assertEquals(2, packageChildren.size)
- packageChildren.forEach {
- val name = it.name.substringBefore("Class")
- val signature = (it as? ClasslikePageNode)?.content?.dfs { it is ContentGroup && it.dci.kind == ContentKind.Symbol }.assertNotNull("signature")
- val crl = signature.children.last().children[1] as? ContentResolvedLink
- assertEquals(
- "https://github.com/user/repo/tree/master/src/${name.toLowerCase()}Main/kotlin/${name}Class.kt#L7",
- crl?.address
- )
- }
- }
- }
- }
-
- @OnlyDescriptorsMPP("#3238")
- @Test
- fun `Samples multiplatform documentation`() {
-
- val testDataDir = getTestDataDir("linkable/samples").toAbsolutePath()
-
- val configuration = dokkaConfiguration {
- moduleName = "example"
- sourceSets {
- val common = sourceSet {
- name = "common"
- displayName = "common"
- analysisPlatform = "common"
- sourceRoots = listOf(Paths.get("$testDataDir/commonMain/kotlin").toString())
- }
- val jvmAndJsSecondCommonMain = sourceSet {
- name = "jvmAndJsSecondCommonMain"
- displayName = "jvmAndJsSecondCommonMain"
- analysisPlatform = "common"
- dependentSourceSets = setOf(common.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmAndJsSecondCommonMain/kotlin").toString())
- }
- sourceSet {
- name = "js"
- displayName = "js"
- analysisPlatform = "js"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jsMain/kotlin").toString())
- samples = listOf("$testDataDir/jsMain/resources/Samples.kt")
- }
- sourceSet {
- name = "jvm"
- displayName = "jvm"
- analysisPlatform = "jvm"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmMain/kotlin").toString())
- samples = listOf("$testDataDir/jvmMain/resources/Samples.kt")
- }
- }
- }
-
- testFromData(configuration) {
- renderingStage = { rootPageNode, _ ->
- // TODO [beresnev] :(((
-// val newRoot = DefaultSamplesTransformer(dokkaContext).invoke(rootPageNode)
- val newRoot = rootPageNode
- val moduleChildren = newRoot.children
- assertEquals(1, moduleChildren.size)
- val packageChildren = moduleChildren.first().children
- assertEquals(2, packageChildren.size)
- packageChildren.forEach { pageNode ->
- val name = pageNode.name.substringBefore("Class")
- val classChildren = pageNode.children
- assertEquals(2, classChildren.size)
- val function = classChildren.find { it.name == "printWithExclamation" }
- val text = (function as MemberPageNode).content.let { it as ContentGroup }.children.last()
- .let { it as ContentDivergentGroup }.children.single().after
- .let { it as ContentGroup }.children.last()
- .let { it as ContentGroup }.children.single()
- .let { it as ContentCodeBlock }.children.single()
- .let { it as ContentText }.text
- assertEquals(
- """|import p2.${name}Class
- |fun main() {
- | //sampleStart
- | ${name}Class().printWithExclamation("Hi, $name")
- | //sampleEnd
- |}""".trimMargin(),
- text
- )
- }
- }
- }
- }
-
- @Test
- fun `Documenting return type for a function in inner class with generic parent`() {
- testInline(
- """
- |/src/main/kotlin/test/source.kt
- |package test
- |
- |class Sample<S>(first: S){
- | inner class SampleInner {
- | fun foo(): S = TODO()
- | }
- |}
- |
- """.trimIndent(),
- dokkaConfiguration {
- sourceSets {
- sourceSet {
- sourceRoots = listOf("src/")
- analysisPlatform = "jvm"
- name = "js"
- }
- }
- }
- ) {
- renderingStage = { module, _ ->
- val sample = module.children.single { it.name == "test" }
- .children.single { it.name == "Sample" } as ClasslikePageNode
- val foo = sample
- .children
- .single { it.name == "SampleInner" }
- .let { it as ClasslikePageNode }
- .children
- .single { it.name == "foo" }
- .let { it as MemberPageNode }
-
- val returnTypeNode = foo.content.dfs {
- val link = (it as? ContentDRILink)?.children
- val child = link?.first() as? ContentText
- child?.text == "S"
- } as? ContentDRILink
-
- assertEquals(
- (sample.documentables.firstOrNull() as WithGenerics).generics.first().dri,
- returnTypeNode?.address
- )
- }
- }
- }
-
- @Test
- fun `Include module and package documentation with codeblock`() {
-
- val testDataDir = getTestDataDir("multiplatform/basicMultiplatformTest").toAbsolutePath()
- val includesDir = getTestDataDir("linkable/includes").toAbsolutePath()
-
- val configuration = dokkaConfiguration {
- moduleName = "example"
- sourceSets {
- sourceSet {
- analysisPlatform = "js"
- sourceRoots = listOf("jsMain").map {
- Paths.get("$testDataDir/$it/kotlin").toString()
- }
- name = "js"
- includes = listOf(Paths.get("$includesDir/include2.md").toString())
- }
- sourceSet {
- analysisPlatform = "jvm"
- sourceRoots = listOf("jvmMain").map {
- Paths.get("$testDataDir/$it/kotlin").toString()
- }
- name = "jvm"
- includes = listOf(Paths.get("$includesDir/include1.md").toString())
- }
- }
- }
-
- testFromData(configuration) {
- documentablesMergingStage = {
- assertNotEquals(null, it.packages.first().documentation.values.single().dfs {
- (it as? Text)?.body?.contains("@SqlTable") ?: false
- })
- }
- }
-
- }
-
- @Test
- fun `Include module with description parted in two files`() {
-
- val testDataDir = getTestDataDir("multiplatform/basicMultiplatformTest").toAbsolutePath()
- val includesDir = getTestDataDir("linkable/includes").toAbsolutePath()
-
- val configuration = dokkaConfiguration {
- moduleName = "example"
- sourceSets {
- val common = sourceSet {
- name = "common"
- displayName = "common"
- analysisPlatform = "common"
- sourceRoots = listOf(Paths.get("$testDataDir/commonMain/kotlin").toString())
- }
- val jvmAndJsSecondCommonMain = sourceSet {
- name = "jvmAndJsSecondCommonMain"
- displayName = "jvmAndJsSecondCommonMain"
- analysisPlatform = "common"
- dependentSourceSets = setOf(common.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmAndJsSecondCommonMain/kotlin").toString())
- }
- sourceSet {
- name = "js"
- displayName = "js"
- analysisPlatform = "js"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jsMain/kotlin").toString())
- includes = listOf(Paths.get("$includesDir/include2.md").toString())
- }
- sourceSet {
- name = "jvm"
- displayName = "jvm"
- analysisPlatform = "jvm"
- dependentSourceSets = setOf(common.value.sourceSetID, jvmAndJsSecondCommonMain.value.sourceSetID)
- sourceRoots = listOf(Paths.get("$testDataDir/jvmMain/kotlin").toString())
- includes = listOf(
- Paths.get("$includesDir/include1.md").toString(),
- Paths.get("$includesDir/include11.md").toString()
- )
- }
- }
- }
-
- testFromData(configuration) {
- documentablesMergingStage = { module ->
- val value = module.documentation.entries.single {
- it.key.displayName == "jvm"
- }.value
- assertNotNull(value.dfs {
- (it as? Text)?.body == "This is second JVM documentation for module example"
- })
-
- assertNotNull(value.dfs {
- (it as? Text)?.body == "This is JVM documentation for module example"
- })
- }
- }
- }
-
- @Test
- fun `should have a correct link to declaration from another source set`() {
- val writerPlugin = TestOutputWriterPlugin()
- val configuration = dokkaConfiguration {
- sourceSets {
- val common = sourceSet {
- sourceRoots = listOf("src/commonMain")
- analysisPlatform = "common"
- name = "common"
- displayName = "common"
- }
- sourceSet {
- sourceRoots = listOf("src/jvmMain/")
- analysisPlatform = "jvm"
- name = "jvm"
- displayName = "jvm"
- dependentSourceSets = setOf(common.value.sourceSetID)
- }
- }
- }
-
- testInline(
- """
- /src/commonMain/main.kt
- class A
- /src/jvmMain/main.kt
- /**
- * link to [A]
- */
- class B
- """.trimIndent()
- ,
- pluginOverrides = listOf(writerPlugin),
- configuration = configuration
- ) {
- renderingStage = { _, _ ->
- val page =
- Jsoup.parse(writerPlugin.writer.contents.getValue("root/[root]/-b/index.html"))
- val link = page.select(".paragraph a").single()
- assertEquals("../-a/index.html", link.attr("href"))
- }
- }
- }
-}