From 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Fri, 10 Nov 2023 11:46:54 +0100 Subject: Restructure the project to utilize included builds (#3174) * Refactor and simplify artifact publishing * Update Gradle to 8.4 * Refactor and simplify convention plugins and build scripts Fixes #3132 --------- Co-authored-by: Adam <897017+aSemy@users.noreply.github.com> Co-authored-by: Oleg Yukhnevich --- .../src/main/kotlin/renderers/JsoupUtils.kt | 79 ------------- .../main/kotlin/renderers/RenderingOnlyTestBase.kt | 12 -- .../src/main/kotlin/renderers/SignatureUtils.kt | 23 ---- .../src/main/kotlin/renderers/TestPage.kt | 59 ---------- .../src/main/kotlin/testRunner/baseTestApi.kt | 124 --------------------- .../src/main/kotlin/utils/TestOutputWriter.kt | 47 -------- .../utils/assertHtmlEqualsIgnoringWhitespace.kt | 24 ---- 7 files changed, 368 deletions(-) delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/renderers/RenderingOnlyTestBase.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/renderers/SignatureUtils.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/renderers/TestPage.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/testRunner/baseTestApi.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/utils/TestOutputWriter.kt delete mode 100644 plugins/base/base-test-utils/src/main/kotlin/utils/assertHtmlEqualsIgnoringWhitespace.kt (limited to 'plugins/base/base-test-utils/src/main/kotlin') diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt deleted file mode 100644 index fcd73ff0..00000000 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/JsoupUtils.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package utils - -import org.jsoup.nodes.Element -import org.jsoup.nodes.Node -import org.jsoup.nodes.TextNode - -public fun Element.match(vararg matchers: Any, ignoreSpanWithTokenStyle:Boolean = false): Unit = - childNodes() - .let { list -> - if(ignoreSpanWithTokenStyle) { - list - .filterNot { it is Element && it.tagName() == "span" && it.attr("class").startsWith("token ") && it.childNodeSize() == 0} - .map { if(it is Element && it.tagName() == "span" - && it.attr("class").startsWith("token ") - && it.childNodeSize() == 1) it.childNode(0) else it } - .uniteConsecutiveTextNodes() - } else list - } - .filter { (it !is TextNode || it.text().isNotBlank())} - .let { it.drop(it.size - matchers.size) } - .zip(matchers) - .forEach { (n, m) -> m.accepts(n, ignoreSpan = ignoreSpanWithTokenStyle) } - -public open class Tag( - public val name: String, - public vararg val matchers: Any, - public val expectedClasses: List = emptyList() -) -public class Div(vararg matchers: Any) : Tag("div", *matchers) -public class P(vararg matchers: Any) : Tag("p", *matchers) -public class Span(vararg matchers: Any) : Tag("span", *matchers) -public class A(vararg matchers: Any) : Tag("a", *matchers) -public class B(vararg matchers: Any) : Tag("b", *matchers) -public class I(vararg matchers: Any) : Tag("i", *matchers) -public class STRIKE(vararg matchers: Any) : Tag("strike", *matchers) -public class BlockQuote(vararg matchers: Any) : Tag("blockquote", *matchers) -public class Dl(vararg matchers: Any) : Tag("dl", *matchers) -public class Dt(vararg matchers: Any) : Tag("dt", *matchers) -public class Dd(vararg matchers: Any) : Tag("dd", *matchers) -public class Var(vararg matchers: Any) : Tag("var", *matchers) -public class U(vararg matchers: Any) : Tag("u", *matchers) -public object Wbr : Tag("wbr") -public object Br : Tag("br") - -public fun Tag.withClasses(vararg classes: String): Tag = Tag(name, *matchers, expectedClasses = classes.toList()) - -private fun Any.accepts(n: Node, ignoreSpan:Boolean = true) { - when (this) { - is String -> assert(n is TextNode && n.text().trim() == this.trim()) { "\"$this\" expected but found: $n" } - is Tag -> { - check(n is Element) { "Expected node to be Element: $n" } - assert(n.tagName() == name) { "Tag \"$name\" expected but found: \"$n\"" } - expectedClasses.forEach { - assert(n.hasClass(it)) { "Expected to find class \"$it\" for tag \"$name\", found: ${n.classNames()}" } - } - if (matchers.isNotEmpty()) n.match(*matchers, ignoreSpanWithTokenStyle = ignoreSpan) - } - else -> throw IllegalArgumentException("$this is not proper matcher") - } -} - -private fun List.uniteConsecutiveTextNodes(): MutableList { - val resList = mutableListOf() - var acc = StringBuilder() - forEachIndexed { index, item -> - if (item is TextNode) { - acc.append(item.text()) - if (!(index + 1 < size && this[index + 1] is TextNode)) { - resList.add(TextNode(acc.toString())) - acc = StringBuilder() - } - } else resList.add(item) - } - return resList - } diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/RenderingOnlyTestBase.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/RenderingOnlyTestBase.kt deleted file mode 100644 index d2ff3ad4..00000000 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/RenderingOnlyTestBase.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package renderers - -import org.jetbrains.dokka.testApi.context.MockContext - -public abstract class RenderingOnlyTestBase { - public abstract val context: MockContext - public abstract val renderedContent: T -} diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/SignatureUtils.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/SignatureUtils.kt deleted file mode 100644 index ecbe809b..00000000 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/SignatureUtils.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package signatures - -import org.jsoup.Jsoup -import org.jsoup.nodes.Element -import org.jsoup.select.Elements -import utils.Tag -import utils.TestOutputWriter - -public fun TestOutputWriter.renderedContent(path: String = "root/example.html"): Element = - contents.getValue(path).let { Jsoup.parse(it) }.select("#content") - .single() - -public fun Element.signature(): Elements = select("div.symbol.monospace") -public fun Element.tab(tabName: String): Elements = select("div[data-togglable=\"$tabName\"]") -public fun Element.firstSignature(): Element = signature().first() ?: throw NoSuchElementException("No signature found") -public fun Element.lastSignature(): Element = signature().last() ?: throw NoSuchElementException("No signature found") - -public class Parameters(vararg matchers: Any) : Tag("span", *matchers, expectedClasses = listOf("parameters")) -public class Parameter(vararg matchers: Any) : Tag("span", *matchers, expectedClasses = listOf("parameter")) diff --git a/plugins/base/base-test-utils/src/main/kotlin/renderers/TestPage.kt b/plugins/base/base-test-utils/src/main/kotlin/renderers/TestPage.kt deleted file mode 100644 index 6fb484bf..00000000 --- a/plugins/base/base-test-utils/src/main/kotlin/renderers/TestPage.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package renderers - -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.base.signatures.KotlinSignatureProvider -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.doc.DocTag -import org.jetbrains.dokka.model.properties.PropertyContainer -import org.jetbrains.dokka.pages.* -import org.jetbrains.dokka.utilities.DokkaConsoleLogger -import org.jetbrains.dokka.utilities.LoggingLevel - -public fun testPage(callback: PageContentBuilder.DocumentableContentBuilder.() -> Unit): RawTestPage { - val content = PageContentBuilder( - EmptyCommentConverter, - KotlinSignatureProvider(EmptyCommentConverter, DokkaConsoleLogger(LoggingLevel.DEBUG)), - DokkaConsoleLogger(LoggingLevel.DEBUG) - ).contentFor( - DRI.topLevel, - emptySet(), - block = callback - ) - - return RawTestPage(content) -} - -public class RawTestPage( - override val content: ContentNode, - override val name: String = "testPage", - override val dri: Set = setOf(DRI.topLevel), - override val embeddedResources: List = emptyList(), - override val children: List = emptyList(), -): RootPageNode(), ContentPage { - override fun modified( - name: String, - content: ContentNode, - dri: Set, - embeddedResources: List, - children: List - ): ContentPage = this - - override fun modified(name: String, children: List): RootPageNode = this - -} - -internal object EmptyCommentConverter : CommentsToContentConverter { - override fun buildContent( - docTag: DocTag, - dci: DCI, - sourceSets: Set, - styles: Set