aboutsummaryrefslogtreecommitdiff
path: root/dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt
diff options
context:
space:
mode:
authorIgnat Beresnev <ignat.beresnev@jetbrains.com>2023-11-10 11:46:54 +0100
committerGitHub <noreply@github.com>2023-11-10 11:46:54 +0100
commit8e5c63d035ef44a269b8c43430f43f5c8eebfb63 (patch)
tree1b915207b2b9f61951ddbf0ff2e687efd053d555 /dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt
parenta44efd4ba0c2e4ab921ff75e0f53fc9335aa79db (diff)
downloaddokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.gz
dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.bz2
dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.zip
Restructure the project to utilize included builds (#3174)
* Refactor and simplify artifact publishing * Update Gradle to 8.4 * Refactor and simplify convention plugins and build scripts Fixes #3132 --------- Co-authored-by: Adam <897017+aSemy@users.noreply.github.com> Co-authored-by: Oleg Yukhnevich <whyoleg@gmail.com>
Diffstat (limited to 'dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt')
-rw-r--r--dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt292
1 files changed, 292 insertions, 0 deletions
diff --git a/dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt b/dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt
new file mode 100644
index 00000000..d57f84df
--- /dev/null
+++ b/dokka-subprojects/plugin-base/src/test/kotlin/renderers/html/NavigationIconTest.kt
@@ -0,0 +1,292 @@
+/*
+ * 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.base.testApi.testRunner.BaseAbstractTest
+import utils.TestOutputWriterPlugin
+import utils.navigationHtml
+import utils.selectNavigationGrid
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class NavigationIconTest : BaseAbstractTest() {
+
+ private val configuration = dokkaConfiguration {
+ sourceSets {
+ sourceSet {
+ sourceRoots = listOf("src/")
+ }
+ }
+ }
+
+ @Test
+ fun `should include all navigation icons`() {
+ val source = """
+ |/src/main/kotlin/com/example/Empty.kt
+ |package com.example
+ |
+ |class Empty {}
+ """
+ val writerPlugin = TestOutputWriterPlugin()
+
+ testInline(
+ source,
+ configuration,
+ pluginOverrides = listOf(writerPlugin)
+ ) {
+ renderingStage = { _, _ ->
+ val navIconAssets = writerPlugin.writer.contents
+ .filterKeys { it.startsWith("images/nav-icons") }
+ .keys.sorted()
+
+ assertEquals(16, navIconAssets.size)
+ assertEquals("images/nav-icons/abstract-class-kotlin.svg", navIconAssets[0])
+ assertEquals("images/nav-icons/abstract-class.svg", navIconAssets[1])
+ assertEquals("images/nav-icons/annotation-kotlin.svg", navIconAssets[2])
+ assertEquals("images/nav-icons/annotation.svg", navIconAssets[3])
+ assertEquals("images/nav-icons/class-kotlin.svg", navIconAssets[4])
+ assertEquals("images/nav-icons/class.svg", navIconAssets[5])
+ assertEquals("images/nav-icons/enum-kotlin.svg", navIconAssets[6])
+ assertEquals("images/nav-icons/enum.svg", navIconAssets[7])
+ assertEquals("images/nav-icons/exception-class.svg", navIconAssets[8])
+ assertEquals("images/nav-icons/field-value.svg", navIconAssets[9])
+ assertEquals("images/nav-icons/field-variable.svg", navIconAssets[10])
+ assertEquals("images/nav-icons/function.svg", navIconAssets[11])
+ assertEquals("images/nav-icons/interface-kotlin.svg", navIconAssets[12])
+ assertEquals("images/nav-icons/interface.svg", navIconAssets[13])
+ assertEquals("images/nav-icons/object.svg", navIconAssets[14])
+ assertEquals("images/nav-icons/typealias-kotlin.svg", navIconAssets[15])
+ }
+ }
+ }
+
+ @Test
+ fun `should add icon styles to kotlin class navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("class Clazz {}"),
+ expectedIconClass = "class-kt",
+ expectedNavLinkText = "Clazz"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to java class navigation item`() {
+ assertNavigationIcon(
+ source = javaSource(
+ className = "JavaClazz",
+ source = "public class JavaClazz {}"
+ ),
+ expectedIconClass = "class",
+ expectedNavLinkText = "JavaClazz"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin abstract class navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("abstract class AbstractClazz {}"),
+ expectedIconClass = "abstract-class-kt",
+ expectedNavLinkText = "AbstractClazz"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to java abstract class navigation item`() {
+ assertNavigationIcon(
+ source = javaSource(
+ className = "AbstractJavaClazz",
+ source = "public abstract class AbstractJavaClazz {}"
+ ),
+ expectedIconClass = "abstract-class",
+ expectedNavLinkText = "AbstractJavaClazz"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin typealias navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("typealias KotlinTypealias = String"),
+ expectedIconClass = "typealias-kt",
+ expectedNavLinkText = "KotlinTypealias"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin enum navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("enum class KotlinEnum {}"),
+ expectedIconClass = "enum-class-kt",
+ expectedNavLinkText = "KotlinEnum"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to java enum class navigation item`() {
+ assertNavigationIcon(
+ source = javaSource(
+ className = "JavaEnum",
+ source = "public enum JavaEnum {}"
+ ),
+ expectedIconClass = "enum-class",
+ expectedNavLinkText = "JavaEnum"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin annotation navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("annotation class KotlinAnnotation"),
+ expectedIconClass = "annotation-class-kt",
+ expectedNavLinkText = "KotlinAnnotation"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to java annotation navigation item`() {
+ assertNavigationIcon(
+ source = javaSource(
+ className = "JavaAnnotation",
+ source = "public @interface JavaAnnotation {}"
+ ),
+ expectedIconClass = "annotation-class",
+ expectedNavLinkText = "JavaAnnotation"
+ )
+ }
+
+
+ @Test
+ fun `should add icon styles to kotlin interface navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("interface KotlinInterface"),
+ expectedIconClass = "interface-kt",
+ expectedNavLinkText = "KotlinInterface"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to java interface navigation item`() {
+ assertNavigationIcon(
+ source = javaSource(
+ className = "JavaInterface",
+ source = "public interface JavaInterface {}"
+ ),
+ expectedIconClass = "interface",
+ expectedNavLinkText = "JavaInterface"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin function navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("fun ktFunction() {}"),
+ expectedIconClass = "function",
+ expectedNavLinkText = "ktFunction()"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin exception class navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("class KotlinException : Exception() {}"),
+ expectedIconClass = "exception-class",
+ expectedNavLinkText = "KotlinException"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin object navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("object KotlinObject {}"),
+ expectedIconClass = "object",
+ expectedNavLinkText = "KotlinObject"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin val navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("val value: String? = null"),
+ expectedIconClass = "val",
+ expectedNavLinkText = "value"
+ )
+ }
+
+ @Test
+ fun `should add icon styles to kotlin var navigation item`() {
+ assertNavigationIcon(
+ source = kotlinSource("var variable: String? = null"),
+ expectedIconClass = "var",
+ expectedNavLinkText = "variable"
+ )
+ }
+
+ private fun kotlinSource(source: String): String {
+ return """
+ |/src/main/kotlin/com/example/Example.kt
+ |package com.example
+ |
+ |$source
+ """.trimIndent()
+ }
+
+ private fun javaSource(className: String, source: String): String {
+ return """
+ |/src/main/java/com/example/$className.java
+ |package com.example;
+ |
+ |$source
+ """.trimIndent()
+ }
+
+ private fun assertNavigationIcon(source: String, expectedIconClass: String, expectedNavLinkText: String) {
+ val writerPlugin = TestOutputWriterPlugin()
+ testInline(
+ source,
+ configuration,
+ pluginOverrides = listOf(writerPlugin)
+ ) {
+ renderingStage = { _, _ ->
+ val content = writerPlugin.writer.navigationHtml().select("div.sideMenuPart")
+ val navigationGrid = content.selectNavigationGrid()
+
+ val classNames = navigationGrid.child(0).classNames().toList()
+ assertEquals("nav-link-child", classNames[0])
+ assertEquals("nav-icon", classNames[1])
+ assertEquals(expectedIconClass, classNames[2])
+
+ val navLinkText = navigationGrid.child(1).text()
+ assertEquals(expectedNavLinkText, navLinkText)
+ }
+ }
+ }
+
+ @Test
+ fun `should not generate nav link grids or icons for packages and modules`() {
+ val writerPlugin = TestOutputWriterPlugin()
+ testInline(
+ """
+ |/src/main/kotlin/com/example/Example.kt
+ |package com.example
+ |
+ |class Example {}
+ """.trimIndent(),
+ configuration,
+ pluginOverrides = listOf(writerPlugin)
+ ) {
+ renderingStage = { _, _ ->
+ val content = writerPlugin.writer.navigationHtml().select("div.sideMenuPart")
+
+ assertEquals(3, content.size)
+ assertEquals("root-nav-submenu", content[0].id())
+ assertEquals("root-nav-submenu-0", content[1].id())
+ assertEquals("root-nav-submenu-0-0", content[2].id())
+
+ // there's 3 nav items, but only one icon
+ val navLinkGrids = content.select("span.nav-icon")
+ assertEquals(1, navLinkGrids.size)
+ }
+ }
+ }
+}