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
|
package org.jetbrains.dokka.tests
import com.google.inject.Guice
import com.google.inject.Injector
import com.google.inject.Module
import com.google.inject.name.Names
import org.jetbrains.dokka.DocumentationNode
import org.jetbrains.dokka.DocumentationOptions
import org.jetbrains.dokka.DokkaLogger
import org.jetbrains.dokka.Formats.JavaLayoutHtmlFormatDescriptorBase
import org.jetbrains.dokka.Formats.JavaLayoutHtmlFormatGenerator
import org.jetbrains.dokka.Generator
import org.jetbrains.dokka.Utilities.bind
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import java.io.File
import java.net.URI
abstract class JavaLayoutHtmlFormatTestCase {
abstract val formatDescriptor: JavaLayoutHtmlFormatDescriptorBase
@get:Rule
var folder = TemporaryFolder()
var options =
DocumentationOptions(
"",
"java-layout-html",
apiVersion = null,
languageVersion = null,
generateIndexPages = false,
noStdlibLink = false,
collectInheritedExtensionsFromLibraries = true
)
val injector: Injector by lazy {
Guice.createInjector(Module { binder ->
binder.bind<File>().annotatedWith(Names.named("outputDir")).toInstance(folder.apply { create() }.root)
binder.bind<DocumentationOptions>().toProvider { options }
binder.bind<DokkaLogger>().toInstance(object : DokkaLogger {
override fun info(message: String) {
println(message)
}
override fun warn(message: String) {
println("WARN: $message")
}
override fun error(message: String) {
println("ERROR: $message")
}
})
formatDescriptor.configureOutput(binder)
})
}
protected fun buildPagesAndReadInto(model: DocumentationNode, nodes: List<DocumentationNode>, sb: StringBuilder) =
with(injector.getInstance(Generator::class.java)) {
this as JavaLayoutHtmlFormatGenerator
buildPages(listOf(model))
val byLocations = nodes.groupBy { mainUri(it) }
byLocations.forEach { (loc, _) ->
sb.appendln("<!-- File: $loc -->")
sb.append(folder.root.toURI().resolve(URI("/").relativize(loc)).toURL().readText())
}
}
protected fun verifyNode(
fileName: String,
noStdlibLink: Boolean = false,
fileExtension: String = ".html",
select: (model: DocumentationNode) -> List<DocumentationNode>
) {
verifyOutput(
"testdata/format/java-layout-html/$fileName",
fileExtension,
format = "java-layout-html",
withKotlinRuntime = true,
noStdlibLink = noStdlibLink,
collectInheritedExtensionsFromLibraries = true
) { model, output ->
buildPagesAndReadInto(
model,
select(model),
output
)
}
}
protected fun verifyNode(fileName: String) {
verifyNode(fileName) { model -> listOf(model.members.single().members.single()) }
}
protected fun verifyPackageNode(fileName: String, noStdlibLink: Boolean = false) {
verifyOutput(
"testdata/format/java-layout-html/$fileName",
".package-summary.html",
format = "java-layout-html",
withKotlinRuntime = true,
noStdlibLink = noStdlibLink
) { model, output ->
buildPagesAndReadInto(
model,
listOf(model.members.single()),
output
)
}
}
}
|