blob: 0b8fca23597a0b7b5d48e826bfc2177162a763a0 [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,
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) {
verifyOutput(
"testdata/format/java-layout-html/$fileName",
".html",
format = "java-layout-html",
withKotlinRuntime = true,
noStdlibLink = false,
collectInheritedExtensionsFromLibraries = true
) { model, output ->
buildPagesAndReadInto(
model,
listOf(model.members.single().members.single()),
output
)
}
}
protected fun verifyPackageNode(fileName: String) {
verifyOutput(
"testdata/format/java-layout-html/$fileName",
".package-summary.html",
format = "java-layout-html"
) { model, output ->
buildPagesAndReadInto(
model,
listOf(model.members.single()),
output
)
}
}
}