diff --git a/test-data/src/commonMain/kotlin/helloworld/-hello-world.md b/test-data/src/commonMain/kotlin/helloworld/-hello-world.md
new file mode 100644
index 0000000..d691c25
--- /dev/null
+++ b/test-data/src/commonMain/kotlin/helloworld/-hello-world.md
@@ -0,0 +1,25 @@
+---
+tags:
+ - common
+title: "HelloWorld"
+---
+
+# HelloWorld
+
+
+
+
+
+
+
+
+This is the simplest possible Kotlin file: just a top-level constant with its documentation.
+
+
+
+
+
diff --git a/test-runner/src/jvmTest/kotlin/GenerateDocs.kt b/test-runner/src/jvmTest/kotlin/GenerateDocs.kt
new file mode 100644
index 0000000..42fe146
--- /dev/null
+++ b/test-runner/src/jvmTest/kotlin/GenerateDocs.kt
@@ -0,0 +1,62 @@
+package opensavvy.dokka.material.mkdocs.test
+
+import opensavvy.prepared.compat.filesystem.div
+import opensavvy.prepared.suite.shared
+import org.gradle.testkit.runner.GradleRunner
+import java.io.File
+import java.nio.file.Files
+
+val generateDocs by shared {
+ val workDir = Files.createTempDirectory("dokka-gradle-test").toFile()
+ println("Working directory: $workDir")
+
+ val originalWorkDir = File("..")
+
+ (originalWorkDir / "test-data").copyRecursively(workDir / "test-data")
+ (originalWorkDir / "gradle").copyRecursively(workDir / "gradle")
+
+ (workDir / "settings.gradle.kts").writeText("""
+ rootProject.name = "example-test"
+
+ dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ }
+
+ versionCatalogs {
+ create("libsCommon") {
+ from(files("gradle/common.versions.toml"))
+ }
+ }
+ }
+
+ include("test-data")
+ include("website")
+ includeBuild("${File("..").absoluteFile}")
+ """.trimIndent())
+
+ (workDir / "build.gradle.kts").writeText("""
+ plugins {
+ kotlin("multiplatform") version libsCommon.versions.kotlin.get() apply false
+ }
+ """.trimIndent())
+
+ (workDir / "website").mkdir()
+ (workDir / "website" / "build.gradle.kts").writeText("""
+ plugins {
+ id("dev.opensavvy.dokka-mkdocs")
+ }
+
+ dependencies {
+ dokka(project(":test-data"))
+ }
+ """.trimIndent())
+
+ GradleRunner.create()
+ .withGradleVersion("9.4.1")
+ .withProjectDir(workDir)
+ .withArguments(":website:dokkaCopyIntoMkDocs")
+ .build()
+
+ workDir / "website" / "docs" / "api"
+}
diff --git a/test-runner/src/jvmTest/kotlin/Runner.kt b/test-runner/src/jvmTest/kotlin/Runner.kt
index 12b4732..54b0a70 100644
--- a/test-runner/src/jvmTest/kotlin/Runner.kt
+++ b/test-runner/src/jvmTest/kotlin/Runner.kt
@@ -1,6 +1,10 @@
package opensavvy.dokka.material.mkdocs.test
+import opensavvy.prepared.compat.filesystem.div
import opensavvy.prepared.runner.testballoon.preparedSuite
+import opensavvy.prepared.suite.config.CoroutineTimeout
+import kotlin.test.assertEquals
+import kotlin.time.Duration.Companion.minutes
val IntegrationTests by preparedSuite {
@@ -10,9 +14,36 @@ val IntegrationTests by preparedSuite {
check(cases.isNotEmpty()) { "No integration tests were found, maybe something went wrong?" }
}
+ test("Generate the documentation", CoroutineTimeout(10.minutes)) {
+ val docs = generateDocs()
+
+ check(docs.isDirectory) { "No documentation directory was generated." }
+ check(docs.listFiles() != null) { "No documentation files were generated." }
+ }
+
for (case in cases) {
test("Test case: ${case.name}") {
check(case.isDirectory)
+
+ val outputDirectory = generateDocs() / "test-data" / "opensavvy.dokka.material.mkdocs.test.${case.name}"
+ check(outputDirectory.isDirectory) { "No output directory was generated for test case" }
+ println("» Generated in: ${outputDirectory.absolutePath}")
+
+ val markdownFiles = case.listFiles { _, name -> name.endsWith(".md") }
+
+ for (file in markdownFiles) {
+ println("» Checking: ${file.name}")
+
+ val expected = file.readText()
+ val actualFile = outputDirectory / file.name
+ val actual = actualFile.readText()
+
+ assertEquals(
+ expected = expected,
+ actual = actual,
+ message = "Found a difference between the reference file file://${file.absolutePath} and the generated file file://${actualFile.absolutePath}"
+ )
+ }
}
}
}