blob: 620f10dda2b888ca9d04a65e25904b415b637ed8 [file] [log] [blame]
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,
generateClassIndexPage = false,
generatePackageIndexPage = false,
noStdlibLink = false,
noJdkLink = 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, noStdlibLink: Boolean = false) {
verifyNode(fileName, noStdlibLink) { 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
)
}
}
}