aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/test/kotlin
diff options
context:
space:
mode:
authorOleg Yukhnevich <whyoleg@gmail.com>2023-11-07 15:27:34 +0200
committerGitHub <noreply@github.com>2023-11-07 15:27:34 +0200
commit64cce58f73f908909ba60da6005d7abb2572b2f0 (patch)
treeb66897df0bb86e159d6d040c65e04552efd1ee68 /plugins/base/src/test/kotlin
parent84e48b516500433332e9279237cd139f7836ca94 (diff)
downloaddokka-64cce58f73f908909ba60da6005d7abb2572b2f0.tar.gz
dokka-64cce58f73f908909ba60da6005d7abb2572b2f0.tar.bz2
dokka-64cce58f73f908909ba60da6005d7abb2572b2f0.zip
Add the link to GitHub repo to the header if there are source links defined (#3235)
* Use URL from base plugin configuration * Add integration test for the multi-module project that the homepage link exists everywhere
Diffstat (limited to 'plugins/base/src/test/kotlin')
-rw-r--r--plugins/base/src/test/kotlin/renderers/html/HeaderTest.kt102
1 files changed, 102 insertions, 0 deletions
diff --git a/plugins/base/src/test/kotlin/renderers/html/HeaderTest.kt b/plugins/base/src/test/kotlin/renderers/html/HeaderTest.kt
new file mode 100644
index 00000000..c19f965f
--- /dev/null
+++ b/plugins/base/src/test/kotlin/renderers/html/HeaderTest.kt
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package renderers.html
+
+import org.jetbrains.dokka.DokkaConfiguration
+import org.jetbrains.dokka.DokkaConfigurationImpl
+import org.jetbrains.dokka.PluginConfigurationImpl
+import org.jetbrains.dokka.base.DokkaBase
+import org.jetbrains.dokka.base.DokkaBaseConfiguration
+import org.jetbrains.dokka.base.templating.toJsonString
+import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
+import org.jetbrains.dokka.pages.RootPageNode
+import org.jetbrains.dokka.plugability.DokkaContext
+import org.jsoup.Jsoup
+import utils.TestOutputWriter
+import utils.TestOutputWriterPlugin
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+import kotlin.test.assertNull
+
+class HeaderTest : BaseAbstractTest() {
+ private val configuration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ name = "jvm"
+ sourceRoots = listOf("src/jvm")
+ }
+ sourceSet {
+ name = "js"
+ sourceRoots = listOf("src/js")
+ }
+ }
+ }
+
+ @Test
+ fun `should include homepage link if homepageLink is provided`() {
+ testRendering(
+ DokkaBaseConfiguration(homepageLink = "https://github.com/Kotlin/dokka/")
+ ) { _, _, writer ->
+ val renderedContent = navigationElement(writer)
+
+ val sourceLinkElement =
+ assertNotNull(renderedContent.getElementById("homepage-link"), "Source link element not found")
+ val aElement = assertNotNull(sourceLinkElement.selectFirst("a"))
+ assertEquals("https://github.com/Kotlin/dokka/", aElement.attr("href"))
+ }
+ }
+
+ @Test
+ fun `should not include homepage link by default`() {
+ testRendering(null) { _, _, writer ->
+ val renderedContent = navigationElement(writer)
+ assertNull(renderedContent.getElementById("homepage-link"), "Source link element found")
+ }
+ }
+
+ private fun testRendering(
+ baseConfiguration: DokkaBaseConfiguration?,
+ block: (RootPageNode, DokkaContext, writer: TestOutputWriter) -> Unit
+ ) {
+ fun configuration(): DokkaConfigurationImpl {
+ baseConfiguration ?: return configuration
+ return configuration.copy(
+ pluginsConfiguration = listOf(
+ PluginConfigurationImpl(
+ DokkaBase::class.java.canonicalName,
+ DokkaConfiguration.SerializationFormat.JSON,
+ toJsonString(baseConfiguration)
+ )
+ )
+ )
+ }
+
+ val writerPlugin = TestOutputWriterPlugin()
+ testInline(
+ """
+ |/src/jvm/Test.kt
+ |fun test() {}
+ |/src/js/Test.kt
+ |fun test() {}
+ """,
+ configuration(),
+ pluginOverrides = listOf(writerPlugin)
+ ) {
+ renderingStage = { node, context ->
+ block(node, context, writerPlugin.writer)
+ }
+ }
+ }
+
+ private fun navigationElement(writer: TestOutputWriter) =
+ writer
+ .contents
+ .getValue("index.html")
+ .let(Jsoup::parse)
+ .select(".navigation")
+ .single()
+
+}