aboutsummaryrefslogtreecommitdiff
path: root/dokka-subprojects/plugin-base/src/test/kotlin/content/HighlightingTest.kt
blob: a7fb2bdea6f81945352ebec95a3dbb3c91b721c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
 * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

package content

import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.model.dfs
import org.jetbrains.dokka.pages.*
import kotlin.test.Test
import kotlin.test.assertTrue

class HighlightingTest : BaseAbstractTest() {
    private val configuration = dokkaConfiguration {
        sourceSets {
            sourceSet {
                sourceRoots = listOf("src/")
                classpath = listOf(commonStdlibPath!!, jvmStdlibPath!!)
                externalDocumentationLinks = listOf(stdlibExternalDocumentationLink)
            }
        }
    }

    @Test
    fun `open suspend fun`() {
        testInline(
            """
            |/src/main/kotlin/test/Test.kt
            |package example
            |
            | open suspend fun simpleFun(): String = "Celebrimbor"
            """,
            configuration
        ) {
            pagesTransformationStage = { module ->
                val symbol = (module.dfs { it.name == "simpleFun" } as MemberPageNode).content
                    .dfs { it is ContentGroup && it.dci.kind == ContentKind.Symbol }
                val children = symbol?.children

                for (it in listOf(
                    Pair(0, TokenStyle.Keyword), Pair(1, TokenStyle.Keyword), Pair(2, TokenStyle.Keyword),
                    Pair(4, TokenStyle.Punctuation), Pair(5, TokenStyle.Punctuation), Pair(6, TokenStyle.Operator)
                ))
                    assertTrue(children?.get(it.first)?.style?.contains(it.second) == true)
                assertTrue(children?.get(3)?.children?.first()?.style?.contains(TokenStyle.Function) == true)
            }
        }
    }

    @Test
    fun `plain typealias of plain class with annotation`() {
        testInline(
            """
                |/src/main/kotlin/common/Test.kt
                |package example
                |
                |@MustBeDocumented
                |@Target(AnnotationTarget.TYPEALIAS)
                |annotation class SomeAnnotation
                |
                |@SomeAnnotation
                |typealias PlainTypealias = Int
                |
            """.trimMargin(),
            configuration
        ) {
            pagesTransformationStage = { module ->
                val symbol = (module.dfs { it.name == "example" } as PackagePageNode).content
                    .dfs { it is ContentGroup && it.dci.kind == ContentKind.Symbol }
                val children = symbol?.children

                for (it in listOf(
                    Pair(1, TokenStyle.Keyword), Pair(3, TokenStyle.Operator)
                ))
                    assertTrue(children?.get(it.first)?.style?.contains(it.second) == true)
                val annotation = children?.first()?.children?.first()

                assertTrue(annotation?.children?.get(0)?.style?.contains(TokenStyle.Annotation) == true)
                assertTrue(annotation?.children?.get(1)?.children?.first()?.style?.contains(TokenStyle.Annotation) == true)
            }
        }
    }
}