blob: b3d7bf92ae7ec651f9431d160b2d30e9784af891 (
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
84
85
86
87
88
89
90
91
92
93
94
|
package model
import org.jetbrains.dokka.CoreExtensions
import org.jetbrains.dokka.Platform
import org.jetbrains.dokka.base.transformers.documentables.InheritorsExtractorTransformer
import org.jetbrains.dokka.base.transformers.documentables.InheritorsInfo
import org.jetbrains.dokka.model.DInterface
import org.jetbrains.dokka.model.DPackage
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.junit.Test
import utils.AbstractModelTest
import utils.assertNotNull
class InheritorsTest : AbstractModelTest("/src/main/kotlin/inheritors/Test.kt", "inheritors") {
object InheritorsPlugin : DokkaPlugin() {
val inheritors by extending {
CoreExtensions.documentableTransformer with InheritorsExtractorTransformer()
}
}
@Test
fun simple() {
inlineModelTest(
"""|interface A{}
|class B() : A {}
""".trimMargin(),
pluginsOverrides = listOf(InheritorsPlugin)
) {
with((this / "inheritors" / "A").cast<DInterface>()) {
val map = extra[InheritorsInfo].assertNotNull("InheritorsInfo").value.map
with(map.keys.also { it counts 1 }.find { it.platformType == Platform.jvm }.assertNotNull("jvm key").let { map[it]!! }
) {
this counts 1
first().classNames equals "B"
}
}
}
}
@Test
fun multiplatform() {
val configuration = dokkaConfiguration {
passes {
pass {
sourceRoots = listOf("common/src/", "jvm/src/")
analysisPlatform = "jvm"
targets = listOf("jvm")
}
pass {
sourceRoots = listOf("common/src/", "js/src/")
analysisPlatform = "js"
targets = listOf("js")
}
}
}
testInline(
"""
|/common/src/main/kotlin/inheritors/Test.kt
|package inheritors
|interface A{}
|/jvm/src/main/kotlin/inheritors/Test.kt
|package inheritors
|class B() : A {}
|/js/src/main/kotlin/inheritors/Test.kt
|package inheritors
|class B() : A {}
|class C() : A {}
""".trimMargin(),
configuration,
cleanupOutput = false,
pluginOverrides = listOf(InheritorsPlugin)
) {
documentablesTransformationStage = { m ->
with((m / "inheritors" / "A").cast<DInterface>()) {
val map = extra[InheritorsInfo].assertNotNull("InheritorsInfo").value.map
with(map.keys.also { it counts 2 }) {
with(find { it.platformType == Platform.jvm }.assertNotNull("jvm key").let { map[it]!! }) {
this counts 1
first().classNames equals "B"
}
with(find { it.platformType == Platform.js }.assertNotNull("js key").let { map[it]!! }) {
this counts 2
val classes = listOf("B", "C")
assert(all{ classes.contains(it.classNames) }){"One of subclasses missing in js"}
}
}
}
}
}
}
}
|