package renderers.html import org.jetbrains.dokka.base.DokkaBase import org.jetbrains.dokka.base.renderers.html.HtmlRenderer import org.jetbrains.dokka.base.resolvers.DefaultLocationProviderFactory import org.jetbrains.dokka.base.resolvers.LocationProvider import org.jetbrains.dokka.base.resolvers.LocationProviderFactory import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.Documentable import org.jetbrains.dokka.model.doc.DocTag import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.testApi.context.MockContext import org.jetbrains.dokka.utilities.DokkaConsoleLogger import org.junit.Test import utils.TestOutputWriter class GroupWrappingTest { val files = TestOutputWriter() val context = MockContext( DokkaBase().outputWriter to { _ -> files }, DokkaBase().locationProviderFactory to ::DefaultLocationProviderFactory ) @Test fun notWrapped() { val page = createPage { group { text("a") text("b") } text("c") } HtmlRenderer(context).render(page) assert(linesAfterContentTag().contains("abc")) } @Test fun paragraphWrapped() { val page = createPage { group(styles = setOf(TextStyle.Paragraph)) { text("a") text("b") } text("c") } HtmlRenderer(context).render(page) assert(linesAfterContentTag().contains("

ab

c")) } @Test fun blockWrapped() { val page = createPage { group(styles = setOf(TextStyle.Block)) { text("a") text("b") } text("c") } HtmlRenderer(context).render(page) assert(linesAfterContentTag().contains("
ab
c")) } @Test fun nested() { val page = createPage { group(styles = setOf(TextStyle.Block)) { text("a") group(styles = setOf(TextStyle.Block)) { group(styles = setOf(TextStyle.Block)) { text("b") text("c") } } text("d") } } HtmlRenderer(context).render(page) assert(linesAfterContentTag().contains("
a
bc
d
")) } private fun linesAfterContentTag() = files.contents.getValue("test-page.html").lines() .dropWhile { !it.contains("""
""") } .joinToString(separator = "") { it.trim() } } // TODO: may be useful for other tests, consider extracting private fun createPage( callback: PageContentBuilder.DocumentableContentBuilder.() -> Unit ) = object : RootPageNode(), ContentPage { override val dri: Set = setOf(DRI.topLevel) override val documentable: Documentable? = null override val embeddedResources: List = emptyList() override val name: String get() = "testPage" override val children: List get() = emptyList() override val content: ContentNode = PageContentBuilder(EmptyCommentConverter, DokkaConsoleLogger).contentFor( DRI.topLevel, emptySet(), block = callback ) override fun modified( name: String, content: ContentNode, dri: Set, embeddedResources: List, children: List ) = this override fun modified(name: String, children: List) = this } private object EmptyCommentConverter : CommentsToContentConverter { override fun buildContent( docTag: DocTag, dci: DCI, platforms: Set, styles: Set