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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
package kotlinAsJavaPlugin
import org.jetbrains.dokka.pages.*
import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import org.junit.jupiter.api.Test
class KotlinAsJavaPluginTest : AbstractCoreTest() {
@Test
fun topLevelTest() {
val configuration = dokkaConfiguration {
passes {
pass {
sourceRoots = listOf("src/")
}
}
}
testInline(
"""
|/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
|package kotlinAsJavaPlugin
|
|object TestObj {}
|
|fun testFL(l: List<String>) = l
|fun testF() {}
|fun testF2(i: Int) = i
|fun testF3(to: TestObj) = to
|fun <T : Char> testF4(t: T) = listOf(t)
|val testV = 1
""",
configuration,
cleanupOutput = true
) {
pagesGenerationStage = { root ->
val content = (root.children.single().children.first { it.name == "TestKt" } as ContentPage).content
val children = content.mainContents.first().cast<ContentGroup>()
.children.filterIsInstance<ContentTable>()
.filter { it.children.isNotEmpty() }
children.assertCount(2)
}
}
}
@Test
fun topLevelWithClassTest() {
val configuration = dokkaConfiguration {
passes {
pass {
sourceRoots = listOf("src/")
}
}
}
testInline(
"""
|/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
|package kotlinAsJavaPlugin
|
|class Test {
| fun testFC() {}
| val testVC = 1
|}
|
|fun testF(i: Int) = i
|val testV = 1
""",
configuration,
cleanupOutput = true
) {
pagesGenerationStage = { root ->
val contentList = root.children
.flatMap { it.children<ContentPage>() }
.map { it.content }
val children = contentList.flatMap { content ->
content.mainContents.first().cast<ContentGroup>().children
.filterIsInstance<ContentTable>()
.filter { it.children.isNotEmpty() }
}.filterNot { it.toString().contains("<init>") }
children.assertCount(4)
}
}
}
@Test
fun kotlinAndJavaTest() {
val configuration = dokkaConfiguration {
passes {
pass {
sourceRoots = listOf("src/")
}
}
}
testInline(
"""
|/src/main/kotlin/kotlinAsJavaPlugin/Test.kt
|package kotlinAsJavaPlugin
|
|fun testF(i: Int) = i
|/src/main/kotlin/kotlinAsJavaPlugin/TestJ.java
|package kotlinAsJavaPlugin
|
|class TestJ {
| int testF(int i) { return i; }
|}
""",
configuration,
cleanupOutput = true
) {
pagesGenerationStage = { root ->
val classes = root.children.first().children.associateBy { it.name }
classes.values.assertCount(2, "Class count: ")
classes["TestKt"].let {
it?.children.orEmpty().assertCount(1, "(Kotlin) TestKt members: ")
it!!.children.first()
.let { assert(it.name == "testF") { "(Kotlin) Expected method name: testF, got: ${it.name}" } }
}
classes["TestJ"].let {
it?.children.orEmpty().assertCount(1, "(Java) TestJ members: ")
it!!.children.first()
.let { assert(it.name == "testF") { "(Java) Expected method name: testF, got: ${it.name}" } }
}
}
}
}
private fun <T> Collection<T>.assertCount(n: Int, prefix: String = "") =
assert(count() == n) { "${prefix}Expected $n, got ${count()}" }
}
private val ContentNode.mainContents: List<ContentNode>
get() = (this as ContentGroup).children
.filterIsInstance<ContentGroup>()
.single { it.dci.kind == ContentKind.Main }.children
|