aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/test')
-rw-r--r--plugins/base/src/test/kotlin/parsers/ParseModuleAndPackageDocFragmentsTest.kt199
1 files changed, 199 insertions, 0 deletions
diff --git a/plugins/base/src/test/kotlin/parsers/ParseModuleAndPackageDocFragmentsTest.kt b/plugins/base/src/test/kotlin/parsers/ParseModuleAndPackageDocFragmentsTest.kt
new file mode 100644
index 00000000..49eddaea
--- /dev/null
+++ b/plugins/base/src/test/kotlin/parsers/ParseModuleAndPackageDocFragmentsTest.kt
@@ -0,0 +1,199 @@
+package parsers
+
+import org.jetbrains.dokka.base.parsers.IllegalModuleAndPackageDocumentation
+import org.jetbrains.dokka.base.parsers.ModuleAndPackageDocFragment
+import org.jetbrains.dokka.base.parsers.ModuleAndPackageDocFragment.Classifier.Module
+import org.jetbrains.dokka.base.parsers.ModuleAndPackageDocFragment.Classifier.Package
+import org.jetbrains.dokka.base.parsers.ModuleAndPackageDocumentationSource
+import org.jetbrains.dokka.base.parsers.parseModuleAndPackageDocFragments
+import org.junit.jupiter.api.Assertions.assertEquals
+import org.junit.jupiter.api.Assertions.assertTrue
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.api.io.TempDir
+import java.nio.file.Path
+
+class ParseModuleAndPackageDocFragmentsTest {
+
+ @Test
+ fun `basic example`() {
+
+ val fragments = parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Module kotlin-demo
+ Module description
+
+ # Package org.jetbrains.kotlin.demo
+ Package demo description
+ ## Level 2 heading
+ Heading 2
+
+ # Package org.jetbrains.kotlin.demo2
+ Package demo2 description
+ """.trimIndent()
+ )
+ )
+
+ assertEquals(
+ listOf(
+ ModuleAndPackageDocFragment(
+ classifier = Module,
+ name = "kotlin-demo",
+ documentation = "Module description"
+ ),
+ ModuleAndPackageDocFragment(
+ classifier = Package,
+ name = "org.jetbrains.kotlin.demo",
+ documentation = "Package demo description\n## Level 2 heading\nHeading 2"
+ ),
+ ModuleAndPackageDocFragment(
+ classifier = Package,
+ name = "org.jetbrains.kotlin.demo2",
+ documentation = "Package demo2 description"
+ )
+ ),
+ fragments
+ )
+ }
+
+ @Test
+ fun `no module name specified fails`() {
+ val exception = assertThrows<IllegalModuleAndPackageDocumentation> {
+ parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Module
+ No module name given
+ """.trimIndent()
+ )
+ )
+ }
+
+ assertTrue(
+ "Missing Module name" in exception.message.orEmpty(),
+ "Expected 'Missing Module name' in error message"
+ )
+ }
+
+ @Test
+ fun `no package name specified fails`() {
+ val exception = assertThrows<IllegalModuleAndPackageDocumentation> {
+ parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Package
+ No package name given
+ """.trimIndent()
+ )
+ )
+ }
+
+ assertTrue(
+ "Missing Package name" in exception.message.orEmpty(),
+ "Expected 'Missing Package name' in error message"
+ )
+ }
+
+ @Test
+ fun `white space in module name fails`() {
+ val exception = assertThrows<IllegalModuleAndPackageDocumentation> {
+ parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Module My Module
+ """.trimIndent()
+ )
+ )
+ }
+
+ assertTrue(
+ "Module My Module" in exception.message.orEmpty(),
+ "Expected problematic statement in error message"
+ )
+ }
+
+ @Test
+ fun `white space in package name fails`() {
+ val exception = assertThrows<IllegalModuleAndPackageDocumentation> {
+ parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Package my package
+ """.trimIndent()
+ )
+ )
+ }
+
+ assertTrue(
+ "Package my package" in exception.message.orEmpty(),
+ "Expected problematic statement in error message"
+ )
+ }
+
+ @Test
+ fun `multiple whitespaces are supported in first line`() {
+ val fragments = parseModuleAndPackageDocFragments(
+ source(
+ """
+ # Module my-module
+ My Module
+ # Package com.my.package
+ My Package
+ """.trimIndent()
+ )
+ )
+
+ assertEquals(
+ listOf(
+ ModuleAndPackageDocFragment(
+ classifier = Module,
+ name = "my-module",
+ documentation = "My Module"
+ ),
+ ModuleAndPackageDocFragment(
+ classifier = Package,
+ name = "com.my.package",
+ documentation = "My Package"
+ )
+ ),
+ fragments
+ )
+ }
+
+ @Test
+ fun `parse from file`(@TempDir temporaryFolder: Path) {
+ val file = temporaryFolder.resolve("other.md").toFile()
+ file.writeText(
+ """
+ # Module MyModule
+ D1
+ # Package com.sample
+ D2
+ """.trimIndent()
+ )
+
+ assertEquals(
+ listOf(
+ ModuleAndPackageDocFragment(
+ classifier = Module,
+ name = "MyModule",
+ documentation = "D1"
+ ),
+ ModuleAndPackageDocFragment(
+ classifier = Package,
+ name = "com.sample",
+ documentation = "D2"
+ )
+ ),
+ parseModuleAndPackageDocFragments(file)
+ )
+ }
+
+
+ private fun source(documentation: String): ModuleAndPackageDocumentationSource =
+ object : ModuleAndPackageDocumentationSource() {
+ override val sourceDescription: String = "inline test"
+ override val documentation: String = documentation
+ }
+}