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.pages.ContentDivergentGroup
import org.junit.jupiter.api.Test
import renderers.*
import utils.Div
import utils.Span
import utils.match
class DivergentTest : HtmlRenderingOnlyTestBase() {
private val js = defaultSourceSet.copy(
"root",
"JS",
defaultSourceSet.sourceSetID.copy(sourceSetName = "js"),
analysisPlatform = Platform.js,
sourceRoots = listOf(SourceRootImpl("pl1"))
)
private val jvm = defaultSourceSet.copy(
"root",
"JVM",
defaultSourceSet.sourceSetID.copy(sourceSetName = "jvm"),
analysisPlatform = Platform.jvm,
sourceRoots = listOf(SourceRootImpl("pl1"))
)
private val native = defaultSourceSet.copy(
"root",
"NATIVE",
defaultSourceSet.sourceSetID.copy(sourceSetName = "native"),
analysisPlatform = Platform.native,
sourceRoots = 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(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(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(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(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(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(Span(Div(Div("NATIVE")))), Div(Div(Div("a"))), "a+"),
Div(Div(Span(Div(Div("JS")))), Div(Div(Div("bd"))), "bd+"),
Div(Div(Span(Div(Div("JVM")))), Div(Div(Div("c")))),
Div(Div(Span(Div(Div("NATIVE")))), Div(Div(Div("e"))), "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(
Div(
Div(
"ab-",
Span()
),
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(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(
Div(
Div("ab-", Span()),
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(
Div(Div("a-", Span()), Div(Div(Div("a"))), "ab+"),
Div(Div("b-", Span()), Div(Div(Div(("b")))), "ab+")
)
}
}