package renderers.html
import org.jetbrains.dokka.Platform
import org.jetbrains.dokka.SourceRootImpl
import org.jetbrains.dokka.base.renderers.html.HtmlRenderer
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.SourceSetData
import org.jetbrains.dokka.pages.ContentDivergentGroup
import org.jetbrains.dokka.pages.TextStyle
import org.junit.jupiter.api.Test
import renderers.Div
import renderers.RenderingOnlyTestBase
import renderers.TestPage
import renderers.match
class DivergentTest : RenderingOnlyTestBase() {
private val js = SourceSetData("root", "JS", Platform.js, listOf(SourceRootImpl("pl1")))
private val jvm = SourceSetData("root", "JVM", Platform.jvm, listOf(SourceRootImpl("pl1")))
private val native = SourceSetData("root", "NATIVE", Platform.native, listOf(SourceRootImpl("pl1")))
@Test
fun simpleWrappingCase() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("a")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(Div(Div(Div("a"))))
}
@Test
fun noPlatformHintCase() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test"), implicitlySourceSetHinted = false) {
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("a")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(Div("a"))
}
@Test
fun divergentBetweenSourceSets() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("a")
}
}
instance(setOf(DRI("test", "Test")), setOf(jvm)) {
divergent {
text("b")
}
}
instance(setOf(DRI("test", "Test")), setOf(native)) {
divergent {
text("c")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(Div(Div(Div("a"), Div("b"), Div("c"))))
}
@Test
fun divergentInOneSourceSet() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("a")
}
}
instance(setOf(DRI("test", "Test2")), setOf(js)) {
divergent {
text("b")
}
}
instance(setOf(DRI("test", "Test3")), setOf(js)) {
divergent {
text("c")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(Div(Div(Div("abc"))))
}
@Test
fun divergentInAndBetweenSourceSets() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
divergent {
text("a")
}
}
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("b")
}
}
instance(setOf(DRI("test", "Test")), setOf(jvm)) {
divergent {
text("c")
}
}
instance(setOf(DRI("test", "Test2")), setOf(js)) {
divergent {
text("d")
}
}
instance(setOf(DRI("test", "Test3")), setOf(native)) {
divergent {
text("e")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(Div(Div(Div("ae"), Div("bd"), Div("c"))))
}
@Test
fun divergentInAndBetweenSourceSetsWithGrouping() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
divergent {
text("a")
}
after {
text("a+")
}
}
instance(setOf(DRI("test", "Test")), setOf(js)) {
divergent {
text("b")
}
after {
text("bd+")
}
}
instance(setOf(DRI("test", "Test")), setOf(jvm)) {
divergent {
text("c")
}
}
instance(setOf(DRI("test", "Test2")), setOf(js)) {
divergent {
text("d")
}
after {
text("bd+")
}
}
instance(setOf(DRI("test", "Test3")), setOf(native)) {
divergent {
text("e")
}
after {
text("e+")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(
Div(Div(Div("a")), Div(Div())),
"a+",
Div(Div(Div("bd")), Div(Div())),
"bd+",
Div(Div(Div("c")), Div(Div())),
Div(Div(Div("e")), Div(Div())),
"e+"
)
}
@Test
fun divergentSameBefore() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
before {
text("ab-")
}
divergent {
text("a")
}
}
instance(setOf(DRI("test", "Test2")), setOf(native)) {
before {
text("ab-")
}
divergent {
text("b")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(
"ab-",
Div(Div(Div("ab")))
)
}
@Test
fun divergentSameAfter() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
divergent {
text("a")
}
after {
text("ab+")
}
}
instance(setOf(DRI("test", "Test2")), setOf(native)) {
divergent {
text("b")
}
after {
text("ab+")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(
Div(Div(Div("ab"))),
"ab+"
)
}
@Test
fun divergentGroupedByBeforeAndAfter() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
before {
text("ab-")
}
divergent {
text("a")
}
after {
text("ab+")
}
}
instance(setOf(DRI("test", "Test2")), setOf(native)) {
before {
text("ab-")
}
divergent {
text("b")
}
after {
text("ab+")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(
"ab-",
Div(Div(Div("ab"))),
"ab+"
)
}
@Test
fun divergentDifferentBeforeAndAfter() {
val page = TestPage {
divergentGroup(ContentDivergentGroup.GroupID("test")) {
instance(setOf(DRI("test", "Test")), setOf(native)) {
before {
text("a-")
}
divergent {
text("a")
}
after {
text("ab+")
}
}
instance(setOf(DRI("test", "Test2")), setOf(native)) {
before {
text("b-")
}
divergent {
text("b")
}
after {
text("ab+")
}
}
}
}
HtmlRenderer(context).render(page)
renderedContent.match(
"a-",
Div(Div(Div("a")), Div(Div("NATIVE"))),
"ab+b-",
Div(Div(Div("b")), Div(Div("NATIVE"))),
"ab+"
)
}
}