aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt')
-rw-r--r--plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt618
1 files changed, 0 insertions, 618 deletions
diff --git a/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt b/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt
deleted file mode 100644
index b56edc97..00000000
--- a/plugins/base/src/test/kotlin/parsers/JavadocParserTest.kt
+++ /dev/null
@@ -1,618 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package parsers
-
-import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
-import org.jetbrains.dokka.links.Callable
-import org.jetbrains.dokka.links.DRI
-import org.jetbrains.dokka.links.JavaClassReference
-import org.jetbrains.dokka.model.DEnum
-import org.jetbrains.dokka.model.DModule
-import org.jetbrains.dokka.model.doc.*
-import org.jetbrains.dokka.utilities.firstIsInstanceOrNull
-import utils.docs
-import utils.text
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertNotNull
-
-class JavadocParserTest : BaseAbstractTest() {
-
- private val configuration = dokkaConfiguration {
- sourceSets {
- sourceSet {
- sourceRoots = listOf("src/")
- analysisPlatform = "jvm"
- }
- }
- }
-
- private fun performJavadocTest(testOperation: (DModule) -> Unit) {
- val configuration = dokkaConfiguration {
- sourceSets {
- sourceSet {
- sourceRoots = listOf("src/main/java")
- }
- }
- }
-
- testInline(
- """
- |/src/main/java/sample/Date2.java
- |
- |package docs
- |/**
- | * class level docs
- | */
- |public enum AnEnumType {
- | /**
- | * content being refreshed, which can be a result of
- | * invalidation, refresh that may contain content updates, or the initial load.
- | */
- | REFRESH
- |}
- """.trimIndent(),
- configuration
- ) {
- documentablesMergingStage = testOperation
- }
- }
-
- @Test
- fun `correctly parsed list`() {
- performJavadocTest { module ->
- val docs =
- (module.packages.single().classlikes.single() as DEnum).entries.single().documentation.values.single().children.single().root.text()
- assertEquals(
- "content being refreshed, which can be a result of invalidation, refresh that may contain content updates, or the initial load.",
- docs.trimEnd()
- )
- }
- }
-
- @Test
- fun `code tag`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * Identifies calls to {@code assertThat}.
- | *
- | * {@code
- | * Set<String> s;
- | * System.out.println("s1 = " + s);
- | * }
- | * <pre>{@code
- | * Set<String> s2;
- | * System.out
- | * .println("s2 = " + s2);
- | * }</pre>
- | *
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- Text(body = "Identifies calls to "),
- CodeInline(children = listOf(Text(body = "assertThat"))),
- Text(body = ". "),
- CodeInline(children = listOf(Text(body = "\nSet<String> s;\nSystem.out.println(\"s1 = \" + s);\n")))
- ),
- root.children[0].children
- )
- kotlin.test.assertEquals(
- CodeBlock(children = listOf(Text(body = "\nSet<String> s2;\nSystem.out\n .println(\"s2 = \" + s2);\n"))),
- root.children[1]
- )
- }
- }
- }
-
- @Test
- fun `literal tag`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using the literal tag
- | * {@literal @}Entity
- | * public class User {}
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- Text(body = "An example of using the literal tag "),
- Text(body = "@"),
- Text(body = "Entity public class User {}"),
- ),
- root.children.first().children
- )
- }
- }
- }
-
- @Test
- fun `literal tag nested under pre tag`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using the literal tag
- | * <pre>
- | * {@literal @}Entity
- | * public class User {}
- | * </pre>
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- P(children = listOf(Text(body = "An example of using the literal tag "))),
- Pre(
- children =
- listOf(
- Text(body = "@"),
- Text(body = "Entity\npublic class User {}\n")
- )
- )
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `literal tag containing angle brackets`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using the literal tag
- | * {@literal a<B>c}
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- P(
- children = listOf(
- Text(body = "An example of using the literal tag "),
- Text(body = "a<B>c")
- )
- ),
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `html img tag`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * <img src="/path/to/img.jpg" alt="Alt text"/>
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- P(
- children = listOf(
- Img(
- params = mapOf(
- "href" to "/path/to/img.jpg",
- "alt" to "Alt text"
- )
- )
- )
- )
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `description list tag`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * <dl>
- | * <dt>
- | * <code>name="<i>name</i>"</code>
- | * </dt>
- | * <dd>
- | * A URI path segment. The subdirectory name for this value is contained in the
- | * <code>path</code> attribute.
- | * </dd>
- | * <dt>
- | * <code>path="<i>path</i>"</code>
- | * </dt>
- | * <dd>
- | * The subdirectory you're sharing. While the <i>name</i> attribute is a URI path
- | * segment, the <i>path</i> value is an actual subdirectory name.
- | * </dd>
- | * </dl>
- | */
- | public class Test {}
- """.trimIndent()
-
- val expected = listOf(
- Dl(
- listOf(
- Dt(
- listOf(
- CodeInline(
- listOf(
- Text("name=\""),
- I(
- listOf(
- Text("name")
- )
- ),
- Text("\"")
- )
- ),
- )
- ),
- Dd(
- listOf(
- Text(" A URI path segment. The subdirectory name for this value is contained in the "),
- CodeInline(
- listOf(
- Text("path")
- )
- ),
- Text(" attribute. ")
- )
- ),
-
- Dt(
- listOf(
- CodeInline(
- listOf(
- Text("path=\""),
- I(
- listOf(
- Text("path")
- )
- ),
- Text("\"")
- )
- )
- )
- ),
- Dd(
- listOf(
- Text(" The subdirectory you're sharing. While the "),
- I(
- listOf(
- Text("name")
- )
- ),
- Text(" attribute is a URI path segment, the "),
- I(
- listOf(
- Text("path")
- )
- ),
- Text(" value is an actual subdirectory name. ")
- )
- )
- )
- )
- )
-
- testInline(source, configuration) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- assertEquals(expected, docs.children.first().root.children)
- }
- }
- }
-
- @Test
- fun `header tags are handled properly`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using the header tags
- | * <h1>A header</h1>
- | * <h2>A second level header</h2>
- | * <h3>A third level header</h3>
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- P(children = listOf(Text("An example of using the header tags "))),
- H1(
- listOf(
- Text("A header")
- )
- ),
- H2(
- listOf(
- Text("A second level header")
- )
- ),
- H3(
- listOf(
- Text("A third level header")
- )
- )
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `var tag is handled properly`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using var tag: <var>variable</var>
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- P(
- children = listOf(
- Text("An example of using var tag: "),
- Var(children = listOf(Text("variable"))),
- )
- ),
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `u tag is handled properly`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * An example of using u tag: <u>underlined</u>
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- assertEquals(
- listOf(
- P(
- children = listOf(
- Text("An example of using u tag: "),
- U(children = listOf(Text("underlined"))),
- )
- ),
- ),
- root.children
- )
- }
- }
- }
-
- @Test
- fun `undocumented see also from java`() {
- testInline(
- """
- |/src/main/java/example/Source.java
- |package example;
- |
- |public interface Source {
- | String getProperty(String k, String v);
- |
- | /**
- | * @see #getProperty(String, String)
- | */
- | String getProperty(String k);
- |}
- """.trimIndent(), configuration
- ) {
- documentablesTransformationStage = { module ->
- val functionWithSeeTag = module.packages.flatMap { it.classlikes }.flatMap { it.functions }
- .find { it.name == "getProperty" && it.parameters.count() == 1 }
- val seeTag = functionWithSeeTag?.docs()?.firstIsInstanceOrNull<See>()
- val expectedLinkDestinationDRI = DRI(
- packageName = "example",
- classNames = "Source",
- callable = Callable(
- name = "getProperty",
- params = listOf(JavaClassReference("java.lang.String"), JavaClassReference("java.lang.String"))
- )
- )
-
- assertNotNull(seeTag)
- assertEquals("getProperty(String, String)", seeTag.name)
- assertEquals(expectedLinkDestinationDRI, seeTag.address)
- assertEquals(emptyList<DocTag>(), seeTag.children)
- }
- }
- }
-
- @Test
- fun `documented see also from java`() {
- testInline(
- """
- |/src/main/java/example/Source.java
- |package example;
- |
- |public interface Source {
- | String getProperty(String k, String v);
- |
- | /**
- | * @see #getProperty(String, String) this is a reference to a method that is present on the same class.
- | */
- | String getProperty(String k);
- |}
- """.trimIndent(), configuration
- ) {
- documentablesTransformationStage = { module ->
- val functionWithSeeTag = module.packages.flatMap { it.classlikes }.flatMap { it.functions }
- .find { it.name == "getProperty" && it.parameters.size == 1 }
- val seeTag = functionWithSeeTag?.docs()?.firstIsInstanceOrNull<See>()
- val expectedLinkDestinationDRI = DRI(
- packageName = "example",
- classNames = "Source",
- callable = Callable(
- name = "getProperty",
- params = listOf(JavaClassReference("java.lang.String"), JavaClassReference("java.lang.String"))
- )
- )
-
- assertNotNull(seeTag)
- assertEquals("getProperty(String, String)", seeTag.name)
- assertEquals(expectedLinkDestinationDRI, seeTag.address)
- assertEquals(
- "this is a reference to a method that is present on the same class.",
- seeTag.children.first().text().trim()
- )
- assertEquals(1, seeTag.children.size)
- }
- }
- }
-
- @Test
- fun `tags are case-sensitive`() {
- val source = """
- |/src/main/kotlin/test/Test.java
- |package example
- |
- | /**
- | * Java's tag with wrong case
- | * {@liTeRal @}Entity
- | * public class User {}
- | */
- | public class Test {}
- """.trimIndent()
- testInline(
- source,
- configuration,
- ) {
- documentablesCreationStage = { modules ->
- val docs = modules.first().packages.first().classlikes.single().documentation.values.first()
- val root = docs.children.first().root
-
- kotlin.test.assertEquals(
- listOf(
- Text(body = "Java's tag with wrong case {@liTeRal @}Entity public class User {}"),
- ),
- root.children.first().children
- )
- }
- }
- }
-
- // TODO [beresnev] move to java-analysis
-// @Test
-// fun `test isolated parsing is case sensitive`() {
-// // Ensure that it won't accidentally break
-// val values = JavadocTag.values().map { it.toString().toLowerCase() }
-// val withRandomizedCapitalization = values.map {
-// val result = buildString {
-// for (char in it) {
-// if (Random.nextBoolean()) {
-// append(char)
-// } else {
-// append(char.toLowerCase())
-// }
-// }
-// }
-// if (result == it) result.toUpperCase() else result
-// }
-//
-// for ((index, value) in JavadocTag.values().withIndex()) {
-// assertEquals(value, JavadocTag.lowercaseValueOfOrNull(values[index]))
-// assertNull(JavadocTag.lowercaseValueOfOrNull(withRandomizedCapitalization[index]))
-// }
-// }
-}