diff --git a/.gitattributes b/.gitattributes index 5de51604..29e261ec 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,4 +9,7 @@ # Exclude external libs from GitHub language stats https://github.com/github/linguist/blob/v7.24.1/docs/overrides.md -externals/*/** linguist-vendored +examples/** linguist-documentation +examples/*/dokka linguist-vendored +modules/dokkatoo-plugin-integration-tests/projects/**dokka/ linguist-vendored +modules/dokkatoo-plugin-integration-tests/projects/**dokkatoo/ linguist-documentation diff --git a/.gitignore b/.gitignore index 1f93dfcf..75e0257a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,69 @@ -# Ignore Gradle project-specific cache directory +### Gradle ### .gradle +build/ -# Ignore Gradle build output directory -build +!gradle/wrapper/gradle-wrapper.jar +!gradle/wrapper/gradle-wrapper.properties + +### Kotlin/JVM ### +*.class +*.log + +hs_err_pid* +replay_pid* +*.hprof + +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + + +### IntelliJ ### .idea + + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +.settings/ +.loadpath +.recommenders +.classpath + +.apt_generated/ +.apt_generated_test/ +.project + + +### Linux ### +*~ +.fuse_hidden* +.Trash-* +.nfs* + + +### Windows ### +[Dd]esktop.ini +$RECYCLE.BIN/ +*.lnk + + +### macOS ### +.DS_Store +._* + +# Icon must end with two \r +Icon + + +########################### diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index 01564ffa..d17e78f3 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -7,7 +7,7 @@ pluginManagement { } } -@Suppress("UnstableApiUsage") // Central declaration of repositories is an incubating feature +@Suppress("UnstableApiUsage") dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/base.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/base.gradle.kts index a9b6ff83..23c37955 100644 --- a/buildSrc/src/main/kotlin/buildsrc/conventions/base.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/base.gradle.kts @@ -1,7 +1,5 @@ package buildsrc.conventions -import buildsrc.conventions.utils.asConsumer -import buildsrc.conventions.utils.asProvider import java.time.Duration import org.gradle.api.tasks.testing.logging.TestLogEvent @@ -45,20 +43,6 @@ tasks.withType().configureEach { includeEmptyDirs = false } -val kotlinDokkaSource by configurations.registering { - asConsumer() - attributes { - attribute(Usage.USAGE_ATTRIBUTE, objects.named("externals-dokka-src")) - } -} - -val kotlinDokkaSourceElements by configurations.registering { - asProvider() - attributes { - attribute(Usage.USAGE_ATTRIBUTE, objects.named("externals-dokka-src")) - } -} - val updateTestReportCss by tasks.registering { description = "Hack so the Gradle test reports have dark mode" // the CSS is based on https://github.com/gradle/gradle/pull/12177 @@ -71,7 +55,7 @@ val updateTestReportCss by tasks.registering { include("reports/**/css/style.css") } - outputs.files(cssFiles) + outputs.files(cssFiles.files) doLast { cssFiles.forEach { cssFile -> diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/dokka-source-downloader.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/dokka-source-downloader.gradle.kts new file mode 100644 index 00000000..2bd923a5 --- /dev/null +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/dokka-source-downloader.gradle.kts @@ -0,0 +1,54 @@ +package buildsrc.conventions + +import buildsrc.conventions.utils.asConsumer +import buildsrc.conventions.utils.asProvider +import buildsrc.conventions.utils.dropDirectories + +plugins { + id("buildsrc.conventions.base") +} + +val kotlinDokkaSource by configurations.creating { + asConsumer() + attributes { + attribute(Usage.USAGE_ATTRIBUTE, objects.named("externals-dokka-src")) + } +} + +val kotlinDokkaSourceElements by configurations.registering { + asProvider() + attributes { + attribute(Usage.USAGE_ATTRIBUTE, objects.named("externals-dokka-src")) + } +} + +dependencies { + kotlinDokkaSource("kotlin:dokka:1.7.20@zip") +} + +val prepareDokkaSource by tasks.registering(Sync::class) { + group = "dokka setup" + description = "Download & unpack Kotlin Dokka source code" + from( + kotlinDokkaSource.incoming + .artifactView { lenient(true) } + .artifacts + .resolvedArtifacts.map { artifacts -> + artifacts.map { zipTree(it.file) } + } + ) { + // drop the first dir (dokka-$version) + eachFile { + relativePath = relativePath.dropDirectories(1) + } + } + into(temporaryDir) + exclude( + "*.github", + "*.gradle", + "**/gradlew", + "**/gradlew.bat", + "**/gradle/wrapper/gradle-wrapper.jar", + "**/gradle/wrapper/gradle-wrapper.properties", + ) +} diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects-base.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects-base.gradle.kts new file mode 100644 index 00000000..1d5b9e02 --- /dev/null +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects-base.gradle.kts @@ -0,0 +1,29 @@ +package buildsrc.conventions + +import buildsrc.conventions.Maven_publish_test_gradle.MavenPublishTest +import buildsrc.conventions.utils.asConsumer +import buildsrc.conventions.utils.asProvider +import buildsrc.tasks.SetupDokkaProjects + +plugins { + id("buildsrc.conventions.base") +} + + +val exampleProjectsAttribute = Attribute.of("example-projects", String::class.java) +dependencies.attributesSchema { + attribute(exampleProjectsAttribute) +} + + +val exampleProjects by configurations.registering { + asConsumer() + isVisible = false + attributes { attribute(exampleProjectsAttribute, "dokka") } +} + +val exampleProjectsElements by configurations.registering { + asProvider() + isVisible = true + attributes { attribute(exampleProjectsAttribute, "dokka") } +} diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects.gradle.kts new file mode 100644 index 00000000..d7f6ed99 --- /dev/null +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/dokkatoo-example-projects.gradle.kts @@ -0,0 +1,70 @@ +package buildsrc.conventions + +import buildsrc.conventions.Maven_publish_test_gradle.MavenPublishTest +import buildsrc.tasks.SetupDokkaProjects + +plugins { + id("buildsrc.conventions.base") + id("buildsrc.conventions.dokka-source-downloader") + id("buildsrc.conventions.maven-publish-test") + id("buildsrc.conventions.dokkatoo-example-projects-base") +} + + +val prepareDokkaSourceTask = tasks.named("prepareDokkaSource") + +val setupDokkaTemplateProjects by tasks.registering(SetupDokkaProjects::class) { + dependsOn(prepareDokkaSourceTask) + destinationToSources.convention(emptyMap()) + dokkaSourceDir.set( + layout.dir( + prepareDokkaSourceTask.map { it.destinationDir } + ) + ) +} + +val mavenPublishTestExtension = extensions.getByType() + +val updateGradlePropertiesInDokkatooExamples by tasks.registering { + group = "dokkatoo examples" + + mustRunAfter(tasks.withType()) + + val gradlePropertiesFiles = + layout.projectDirectory.asFileTree + .matching { + include( + "**/*dokkatoo*/settings.gradle.kts", + "**/*dokkatoo*/settings.gradle", + ) + }.elements.map { settingsFiles -> + settingsFiles.map { + it.asFile.resolveSibling("gradle.properties") + } + } + + outputs.files(gradlePropertiesFiles) + + val testMavenRepoPath = mavenPublishTestExtension.testMavenRepo.map { + it.asFile.invariantSeparatorsPath + } + inputs.property("testMavenRepoPath", testMavenRepoPath) + + doLast task@{ + gradlePropertiesFiles.get().forEach { + it.writeText( + """ + |# DO NOT EDIT - Generated by ${this@task.path} + | + |testMavenRepo=${testMavenRepoPath.get()} + | + """.trimMargin() + ) + } + } +} + +tasks.assemble { + dependsOn(setupDokkaTemplateProjects) + dependsOn(updateGradlePropertiesInDokkatooExamples) +} diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish-test.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish-test.gradle.kts index 885224e8..1f54c9ea 100644 --- a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish-test.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish-test.gradle.kts @@ -1,5 +1,8 @@ package buildsrc.conventions +import buildsrc.conventions.utils.asConsumer +import buildsrc.conventions.utils.asProvider + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -9,26 +12,28 @@ Utility for publishing a project to a local Maven directory for use in integrati * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -abstract class MavenPublishTest { - abstract val testMavenRepo: DirectoryProperty - internal abstract val testMavenRepoTemp: DirectoryProperty +abstract class MavenPublishTest( + val testMavenRepo: Provider +) { + companion object { + val attribute = Attribute.of("maven-publish-test", String::class.java) + } } -val mavenPublishTest = extensions.create("mavenPublishTest").apply { - testMavenRepo.convention(layout.buildDirectory.dir("test-maven-repo")) - testMavenRepoTemp.convention(layout.buildDirectory.dir("tmp/test-maven-repo")) -} +val Gradle.rootGradle: Gradle get() = generateSequence(gradle) { it.parent }.last() + +val mavenPublishTestExtension = extensions.create( + "mavenPublishTest", + gradle.rootGradle.rootProject.layout.buildDirectory.dir("test-maven-repo"), +) -val publishToTestMavenRepo by tasks.registering(Sync::class) { +val publishToTestMavenRepo by tasks.registering { group = PublishingPlugin.PUBLISH_TASK_GROUP description = "Publishes all Maven publications to the test Maven repository." - from(mavenPublishTest.testMavenRepoTemp) - into(mavenPublishTest.testMavenRepo) } - plugins.withType().all { extensions .getByType() @@ -46,15 +51,15 @@ plugins.withType().all { group = PublishingPlugin.PUBLISH_TASK_GROUP outputs.cacheIf { true } publication = this@publication - val destinationDir = mavenPublishTest.testMavenRepoTemp.asFile - inputs.property("testMavenRepoTempDir", destinationDir.map { it.invariantSeparatorsPath }) + val destinationDir = mavenPublishTestExtension.testMavenRepo.get().asFile + inputs.property("testMavenRepoTempDir", destinationDir.invariantSeparatorsPath) doFirst { /** - * `maven.repo.local` will set the destination directry + * `maven.repo.local` will set the destination directory for this [PublishToMavenLocal] task. * * @see org.gradle.api.internal.artifacts.mvnsettings.DefaultLocalMavenRepositoryLocator.getLocalMavenRepository */ - System.setProperty("maven.repo.local", destinationDir.get().absolutePath) + System.setProperty("maven.repo.local", destinationDir.absolutePath) } } @@ -63,3 +68,32 @@ plugins.withType().all { } } } + + +val testMavenPublication by configurations.registering { + asConsumer() + isVisible = false + attributes { + attribute(MavenPublishTest.attribute, "testMavenRepo") + } +} + +val testMavenPublicationElements by configurations.registering { + asProvider() + isVisible = true + extendsFrom(testMavenPublication.get()) + attributes { + attribute(MavenPublishTest.attribute, "testMavenRepo") + } + outgoing { + artifact(mavenPublishTestExtension.testMavenRepo) { + builtBy(publishToTestMavenRepo) + } + } +} + +dependencies { + attributesSchema { + attribute(MavenPublishTest.attribute) + } +} diff --git a/buildSrc/src/main/kotlin/buildsrc/tasks/SetupDokkaProjects.kt b/buildSrc/src/main/kotlin/buildsrc/tasks/SetupDokkaProjects.kt new file mode 100644 index 00000000..089d979a --- /dev/null +++ b/buildSrc/src/main/kotlin/buildsrc/tasks/SetupDokkaProjects.kt @@ -0,0 +1,54 @@ +package buildsrc.tasks + +import java.io.File +import javax.inject.Inject +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.FileCollection +import org.gradle.api.file.FileSystemOperations +import org.gradle.api.file.ProjectLayout +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.MapProperty +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.OutputDirectories +import org.gradle.api.tasks.TaskAction + +abstract class SetupDokkaProjects @Inject constructor( + private val fs: FileSystemOperations, + private val layout: ProjectLayout, + private val objects: ObjectFactory, +) : DefaultTask() { + + @get:Input + abstract val destinationToSources: MapProperty> + + @get:InputDirectory + abstract val dokkaSourceDir: DirectoryProperty + + @get:OutputDirectories + val destinationDirs: FileCollection = layout.files( + destinationToSources.map { it.keys } + ) + + init { + group = "dokka examples" + } + + @TaskAction + fun action() { + val destinationToSources = destinationToSources.get() + val dokkaSourceDir = dokkaSourceDir.get() + + println("destinationToSources: $destinationToSources") + + destinationToSources.forEach { (dest: File, sources: List) -> + fs.sync { + sources.forEach { src -> + from("$dokkaSourceDir/$src") + } + into(dest) + } + } + } +} diff --git a/examples/.gitignore b/examples/.gitignore new file mode 100644 index 00000000..72f2d93e --- /dev/null +++ b/examples/.gitignore @@ -0,0 +1,5 @@ +.idea +**/gradle/wrapper/** +gradlew.bat +gradlew +gradle.properties diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..f39abb5b --- /dev/null +++ b/examples/README.md @@ -0,0 +1,18 @@ +# Dokkatoo Examples + +Examples of how to use Dokkatoo. + +The examples are copied from the Dokka project. + +### Set up + +The Dokka examples are synced automatically from the Dokka source code. + +### Tests + +The projects are tested in the +[`:modules:dokkatoo-plugin-integration-tests`](./../modules/dokkatoo-plugin-integration-tests/) +project. + +The Dokka Publications generated by the Dokka examples are compared against the Dokka +Publications generated by the Dokkatoo projects. diff --git a/examples/build.gradle.kts b/examples/build.gradle.kts new file mode 100644 index 00000000..26ef43ab --- /dev/null +++ b/examples/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + buildsrc.conventions.`maven-publish-test` + buildsrc.conventions.`dokkatoo-example-projects` +} + + +dependencies { +// testMavenPublication(projects.modules.dokkatooPlugin) +} + +tasks.setupDokkaTemplateProjects { + destinationToSources.set( + mapOf( + //@formatter:off + "custom-format-example/dokka" to listOf("examples/gradle/dokka-customFormat-example"), + "gradle-example/dokka" to listOf("examples/gradle/dokka-gradle-example"), + "kotlin-as-java-example/dokka" to listOf("examples/gradle/dokka-kotlinAsJava-example"), + "library-publishing-example/dokka" to listOf("examples/gradle/dokka-library-publishing-example"), + "multimodule-example/dokka" to listOf("examples/gradle/dokka-multimodule-example"), + "multiplatform-example/dokka" to listOf("examples/gradle/dokka-multiplatform-example"), + "versioning-multimodule-example/dokka" to listOf("examples/gradle/dokka-versioning-multimodule-example"), + //@formatter:on + ).mapKeys { (dest, _) -> projectDir.resolve(dest) } + ) +} + +configurations.exampleProjectsElements.configure { + outgoing { + artifact(projectDir) { + builtBy(tasks.setupDokkaTemplateProjects, tasks.updateGradlePropertiesInDokkatooExamples) + type = "directory" + } + } +// outgoing { +// listOf( +// "custom-format-example", +// "gradle-example", +// "kotlin-as-java-example", +// "library-publishing-example", +// "multimodule-example", +// "multiplatform-example", +// "versioning-multimodule-example", +// ).forEach { exampleDir -> +// artifact(layout.projectDirectory.dir("$exampleDir/dokka")) { +// builtBy(tasks.setupDokkaTemplateProjects) +// } +// artifact(layout.projectDirectory.dir("$exampleDir/dokkatoo")) { +// builtBy(tasks.setupDokkaTemplateProjects, tasks.updateGradlePropertiesInDokkatooExamples) +// } +// } +// } +} diff --git a/examples/custom-format-example/dokka/README.md b/examples/custom-format-example/dokka/README.md new file mode 100644 index 00000000..00dd668c --- /dev/null +++ b/examples/custom-format-example/dokka/README.md @@ -0,0 +1,24 @@ +## Dokka custom format example + +This example demonstrates a few things: + +1. How to override css styles and add custom images. +2. How to change logo used in the header. +3. How to register a custom `Dokka` task with its own independent configuration. + +### Running + +`dokkaCustomFormat` task has been created in the buildscript of this example project with a few configuration changes. + +In order to see the full effect of these changes, run `dokkaCustomFormat` task from your IDE or execute +the following command: + +```bash +./gradlew clean dokkaCustomFormat +``` + +--- + +If you run any other `Dokka` task, such as `dokkaHtml`, you'll see vanilla `Dokka` without any alterations. +This is because changes to configuration are applied only within `dokkaCustomFormat` task. This can be useful +if you want to generate multiple versions of documentation with different configuration settings. diff --git a/examples/custom-format-example/dokka/build.gradle.kts b/examples/custom-format-example/dokka/build.gradle.kts new file mode 100644 index 00000000..bea4161a --- /dev/null +++ b/examples/custom-format-example/dokka/build.gradle.kts @@ -0,0 +1,34 @@ +import org.jetbrains.dokka.gradle.DokkaTask + +plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") +} + +buildscript { + dependencies { + classpath("org.jetbrains.dokka:dokka-base:1.7.10") + } +} + +repositories { + mavenCentral() +} + +/** + * Custom format adds a custom logo + */ +tasks.register("dokkaCustomFormat") { + pluginConfiguration { + // Dokka's stylesheets and assets with conflicting names will be overriden. + // In this particular case, logo-styles.css will be overriden and ktor-logo.png will + // be added as an additional image asset + customStyleSheets = listOf(file("logo-styles.css")) + customAssets = listOf(file("ktor-logo.png")) + } +} + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) +} diff --git a/examples/custom-format-example/dokka/ktor-logo.png b/examples/custom-format-example/dokka/ktor-logo.png new file mode 100644 index 00000000..ef943896 Binary files /dev/null and b/examples/custom-format-example/dokka/ktor-logo.png differ diff --git a/examples/custom-format-example/dokka/logo-styles.css b/examples/custom-format-example/dokka/logo-styles.css new file mode 100644 index 00000000..9558eb83 --- /dev/null +++ b/examples/custom-format-example/dokka/logo-styles.css @@ -0,0 +1,20 @@ +/* + * All Margins and sizes are custom for the ktor-logo.png file. + * You may need to modify it and find what works best for your case. + */ +.library-name a { + position: relative; + margin-left: 55px; +} + +.library-name a::before { + content: ''; + background-image: url('../images/ktor-logo.png'); + background-repeat: no-repeat; + background-size: 125px 50px; + position: absolute; + width: 52px; + height: 50px; + top: -18px; + left: -62px; +} diff --git a/examples/custom-format-example/dokka/settings.gradle.kts b/examples/custom-format-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..9855e823 --- /dev/null +++ b/examples/custom-format-example/dokka/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "dokka-customFormat-example" diff --git a/examples/custom-format-example/dokka/src/main/kotlin/demo/HelloWorld.kt b/examples/custom-format-example/dokka/src/main/kotlin/demo/HelloWorld.kt new file mode 100644 index 00000000..172e18f7 --- /dev/null +++ b/examples/custom-format-example/dokka/src/main/kotlin/demo/HelloWorld.kt @@ -0,0 +1,20 @@ +package demo + +/** + * This class supports greeting people by name. + * + * @property name The name of the person to be greeted. + */ +class Greeter(val name: String) { + + /** + * Prints the greeting to the standard output. + */ + fun greet() { + println("Hello $name!") + } +} + +fun main(args: Array) { + Greeter(args[0]).greet() +} diff --git a/examples/custom-format-example/dokkatoo/settings.gradle.kts b/examples/custom-format-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..d3e8b98d --- /dev/null +++ b/examples/custom-format-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "custom-format-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/examples/gradle-example/dokka/Module.md b/examples/gradle-example/dokka/Module.md new file mode 100644 index 00000000..0d051cb1 --- /dev/null +++ b/examples/gradle-example/dokka/Module.md @@ -0,0 +1,7 @@ +# Module Dokka Gradle Example + +This is an example of how you can write module documentation with Dokka. + +# Package demo + +This package contains a few examples of Dokka usage. diff --git a/examples/gradle-example/dokka/build.gradle.kts b/examples/gradle-example/dokka/build.gradle.kts new file mode 100644 index 00000000..d15b0331 --- /dev/null +++ b/examples/gradle-example/dokka/build.gradle.kts @@ -0,0 +1,32 @@ +import org.jetbrains.dokka.gradle.DokkaTask +import java.net.URL + +plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) +} + +tasks.withType().configureEach { + dokkaSourceSets { + named("main") { + moduleName.set("Dokka Gradle Example") + includes.from("Module.md") + sourceLink { + localDirectory.set(file("src/main/kotlin")) + remoteUrl.set(URL("https://github.com/Kotlin/dokka/tree/master/" + + "examples/gradle/dokka-gradle-example/src/main/kotlin" + )) + remoteLineSuffix.set("#L") + } + } + } +} diff --git a/examples/gradle-example/dokka/settings.gradle.kts b/examples/gradle-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..5b8c3c92 --- /dev/null +++ b/examples/gradle-example/dokka/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "dokka-gradle-example" diff --git a/examples/gradle-example/dokka/src/main/kotlin/demo/HelloWorld.kt b/examples/gradle-example/dokka/src/main/kotlin/demo/HelloWorld.kt new file mode 100644 index 00000000..172e18f7 --- /dev/null +++ b/examples/gradle-example/dokka/src/main/kotlin/demo/HelloWorld.kt @@ -0,0 +1,20 @@ +package demo + +/** + * This class supports greeting people by name. + * + * @property name The name of the person to be greeted. + */ +class Greeter(val name: String) { + + /** + * Prints the greeting to the standard output. + */ + fun greet() { + println("Hello $name!") + } +} + +fun main(args: Array) { + Greeter(args[0]).greet() +} diff --git a/examples/gradle-example/dokkatoo/Module.md b/examples/gradle-example/dokkatoo/Module.md new file mode 100644 index 00000000..0d051cb1 --- /dev/null +++ b/examples/gradle-example/dokkatoo/Module.md @@ -0,0 +1,7 @@ +# Module Dokka Gradle Example + +This is an example of how you can write module documentation with Dokka. + +# Package demo + +This package contains a few examples of Dokka usage. diff --git a/examples/gradle-example/dokkatoo/build.gradle.kts b/examples/gradle-example/dokkatoo/build.gradle.kts new file mode 100644 index 00000000..e9403ea3 --- /dev/null +++ b/examples/gradle-example/dokkatoo/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + kotlin("jvm") version "1.7.20" + id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" +} + +dokkatoo { + moduleName.set("Dokka Gradle Example") + dokkatooSourceSets.named("main") { + includes.from("Module.md") + sourceLink { + localDirectory.set(file("src/main/kotlin")) + remoteUrl("https://github.com/Kotlin/dokka/tree/master/examples/gradle/dokka-gradle-example/src/main/kotlin") +// remoteUrl("https://github.com/adamko-dev/dokkatoo/tree/main/examples/gradle-example/dokkatoo/src/main/kotlin") + remoteLineSuffix.set("#L") + } + } +} + +tasks.withType().configureEach { + dokkaSourceSets.configureEach { + sourceSetScope.set(":dokkaHtml") // only necessary for testing + } +} diff --git a/examples/gradle-example/dokkatoo/settings.gradle.kts b/examples/gradle-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..02c75bfb --- /dev/null +++ b/examples/gradle-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "gradle-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/examples/gradle-example/dokkatoo/src/main/kotlin/demo/HelloWorld.kt b/examples/gradle-example/dokkatoo/src/main/kotlin/demo/HelloWorld.kt new file mode 100644 index 00000000..172e18f7 --- /dev/null +++ b/examples/gradle-example/dokkatoo/src/main/kotlin/demo/HelloWorld.kt @@ -0,0 +1,20 @@ +package demo + +/** + * This class supports greeting people by name. + * + * @property name The name of the person to be greeted. + */ +class Greeter(val name: String) { + + /** + * Prints the greeting to the standard output. + */ + fun greet() { + println("Hello $name!") + } +} + +fun main(args: Array) { + Greeter(args[0]).greet() +} diff --git a/examples/kotlin-as-java-example/dokka/build.gradle.kts b/examples/kotlin-as-java-example/dokka/build.gradle.kts new file mode 100644 index 00000000..febd2819 --- /dev/null +++ b/examples/kotlin-as-java-example/dokka/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) + + // Will apply the plugin to all dokka tasks + dokkaPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.7.10") + + // Will apply the plugin only to the `:dokkaHtml` task + //dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.7.10") + + // Will apply the plugin only to the `:dokkaGfm` task + //dokkaGfmPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.7.10") +} diff --git a/examples/kotlin-as-java-example/dokka/settings.gradle.kts b/examples/kotlin-as-java-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..0a0b8c0e --- /dev/null +++ b/examples/kotlin-as-java-example/dokka/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "dokka-kotlinAsJava-example" diff --git a/examples/kotlin-as-java-example/dokka/src/main/kotlin/demo/HelloWorld.kt b/examples/kotlin-as-java-example/dokka/src/main/kotlin/demo/HelloWorld.kt new file mode 100644 index 00000000..172e18f7 --- /dev/null +++ b/examples/kotlin-as-java-example/dokka/src/main/kotlin/demo/HelloWorld.kt @@ -0,0 +1,20 @@ +package demo + +/** + * This class supports greeting people by name. + * + * @property name The name of the person to be greeted. + */ +class Greeter(val name: String) { + + /** + * Prints the greeting to the standard output. + */ + fun greet() { + println("Hello $name!") + } +} + +fun main(args: Array) { + Greeter(args[0]).greet() +} diff --git a/examples/kotlin-as-java-example/dokkatoo/settings.gradle.kts b/examples/kotlin-as-java-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..019ac938 --- /dev/null +++ b/examples/kotlin-as-java-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "kotlin-as-java-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/examples/library-publishing-example/dokka/build.gradle.kts b/examples/library-publishing-example/dokka/build.gradle.kts new file mode 100644 index 00000000..ab8a8249 --- /dev/null +++ b/examples/library-publishing-example/dokka/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") + `java-library` + `maven-publish` +} + +repositories { + mavenCentral() +} + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) +} + +val dokkaJavadocJar by tasks.register("dokkaJavadocJar") { + dependsOn(tasks.dokkaJavadoc) + from(tasks.dokkaJavadoc.flatMap { it.outputDirectory }) + archiveClassifier.set("javadoc") +} + +val dokkaHtmlJar by tasks.register("dokkaHtmlJar") { + dependsOn(tasks.dokkaHtml) + from(tasks.dokkaHtml.flatMap { it.outputDirectory }) + archiveClassifier.set("html-doc") +} + +publishing { + publications { + register("library") { + from(components["java"]) + version = "1.0.0" + groupId = "demo" + artifactId = "dokka-library-publishing-example" + artifact(dokkaJavadocJar) + artifact(dokkaHtmlJar) + } + } +} + + + + diff --git a/examples/library-publishing-example/dokka/settings.gradle.kts b/examples/library-publishing-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..e0847ac9 --- /dev/null +++ b/examples/library-publishing-example/dokka/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "dokka-library-publishing-example" diff --git a/examples/library-publishing-example/dokka/src/main/kotlin/demo/HelloWorld.kt b/examples/library-publishing-example/dokka/src/main/kotlin/demo/HelloWorld.kt new file mode 100644 index 00000000..172e18f7 --- /dev/null +++ b/examples/library-publishing-example/dokka/src/main/kotlin/demo/HelloWorld.kt @@ -0,0 +1,20 @@ +package demo + +/** + * This class supports greeting people by name. + * + * @property name The name of the person to be greeted. + */ +class Greeter(val name: String) { + + /** + * Prints the greeting to the standard output. + */ + fun greet() { + println("Hello $name!") + } +} + +fun main(args: Array) { + Greeter(args[0]).greet() +} diff --git a/examples/library-publishing-example/dokkatoo/settings.gradle.kts b/examples/library-publishing-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..198cfbdf --- /dev/null +++ b/examples/library-publishing-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "library-publishing-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/examples/multimodule-example/dokka/build.gradle.kts b/examples/multimodule-example/dokka/build.gradle.kts new file mode 100644 index 00000000..6b416abc --- /dev/null +++ b/examples/multimodule-example/dokka/build.gradle.kts @@ -0,0 +1,5 @@ +subprojects { + repositories { + mavenCentral() + } +} diff --git a/examples/multimodule-example/dokka/parentProject/build.gradle.kts b/examples/multimodule-example/dokka/parentProject/build.gradle.kts new file mode 100644 index 00000000..397ad22f --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + /** + * Kotlin plugin necessary because of potential Gradle bug! + * This is not necessary if the kotlin gradle plugin is added as buildscript + * dependency like + * + * buildscript { + * dependencies { + * classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") + * } + * } + */ + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} + diff --git a/examples/multimodule-example/dokka/parentProject/childProjectA/Module.md b/examples/multimodule-example/dokka/parentProject/childProjectA/Module.md new file mode 100644 index 00000000..e6cf0e04 --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectA/Module.md @@ -0,0 +1,5 @@ +# Module childProjectA +This is the child module a + +# Package demo +This package contains a few examples of Dokka usage. diff --git a/examples/multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts b/examples/multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts new file mode 100644 index 00000000..b3c42aba --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts @@ -0,0 +1,18 @@ +import org.jetbrains.dokka.gradle.DokkaTaskPartial + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} + +tasks.withType().configureEach { + dokkaSourceSets { + configureEach { + includes.from("Module.md") + } + } +} diff --git a/examples/multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt b/examples/multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt new file mode 100644 index 00000000..533b305c --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child project a + */ +class ChildProjectAClass diff --git a/examples/multimodule-example/dokka/parentProject/childProjectB/Module.md b/examples/multimodule-example/dokka/parentProject/childProjectB/Module.md new file mode 100644 index 00000000..27031edf --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectB/Module.md @@ -0,0 +1,5 @@ +# Module childProjectB +This is the child module b + +# Package demo +This package contains a few examples of Dokka usage. diff --git a/examples/multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts b/examples/multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts new file mode 100644 index 00000000..b3c42aba --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts @@ -0,0 +1,18 @@ +import org.jetbrains.dokka.gradle.DokkaTaskPartial + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} + +tasks.withType().configureEach { + dokkaSourceSets { + configureEach { + includes.from("Module.md") + } + } +} diff --git a/examples/multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt b/examples/multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt new file mode 100644 index 00000000..6bfd22eb --- /dev/null +++ b/examples/multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child module b + */ +class ChildProjectBClass diff --git a/examples/multimodule-example/dokka/settings.gradle.kts b/examples/multimodule-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..0631e30f --- /dev/null +++ b/examples/multimodule-example/dokka/settings.gradle.kts @@ -0,0 +1,12 @@ +pluginManagement { + plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") + } +} + +include(":parentProject") +include(":parentProject:childProjectA") +include(":parentProject:childProjectB") + +rootProject.name = "dokka-multimodule-example" diff --git a/examples/multimodule-example/dokkatoo/parentProject/build.gradle.kts b/examples/multimodule-example/dokkatoo/parentProject/build.gradle.kts new file mode 100644 index 00000000..7facb007 --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + kotlin("jvm") version "1.7.20" apply false + id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" +} + +dependencies { + dokkatoo(project(":parentProject:childProjectA")) + dokkatoo(project(":parentProject:childProjectB")) + dokkatooPluginHtml("org.jetbrains.dokka:all-modules-page-plugin:1.7.20") + dokkatooPluginHtml("org.jetbrains.dokka:templating-plugin:1.7.20") +} diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectA/Module.md b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/Module.md new file mode 100644 index 00000000..e6cf0e04 --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/Module.md @@ -0,0 +1,5 @@ +# Module childProjectA +This is the child module a + +# Package demo +This package contains a few examples of Dokka usage. diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectA/build.gradle.kts b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/build.gradle.kts new file mode 100644 index 00000000..5a7750b3 --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + kotlin("jvm") + id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" +} + +dokkatoo { + dokkatooSourceSets.configureEach { + includes.from("Module.md") + } + modulePath.set("childProjectA") // match the original dokka default +} + +tasks.withType().configureEach { + dokkaSourceSets.configureEach { + sourceSetScope.set(":parentProject:childProjectA:dokkaHtmlPartial") + } +} diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt new file mode 100644 index 00000000..533b305c --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child project a + */ +class ChildProjectAClass diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectB/Module.md b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/Module.md new file mode 100644 index 00000000..27031edf --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/Module.md @@ -0,0 +1,5 @@ +# Module childProjectB +This is the child module b + +# Package demo +This package contains a few examples of Dokka usage. diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectB/build.gradle.kts b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/build.gradle.kts new file mode 100644 index 00000000..f2d7c3ce --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + kotlin("jvm") + id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" +} + +dokkatoo { + dokkatooSourceSets.configureEach { + includes.from("Module.md") + } + modulePath.set("childProjectB") // match the original dokka default +} + +tasks.withType().configureEach { + dokkaSourceSets.configureEach { + sourceSetScope.set(":parentProject:childProjectB:dokkaHtmlPartial") + } +} diff --git a/examples/multimodule-example/dokkatoo/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt new file mode 100644 index 00000000..6bfd22eb --- /dev/null +++ b/examples/multimodule-example/dokkatoo/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child module b + */ +class ChildProjectBClass diff --git a/examples/multimodule-example/dokkatoo/settings.gradle.kts b/examples/multimodule-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..fef85372 --- /dev/null +++ b/examples/multimodule-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,24 @@ +rootProject.name = "dokkatoo-multimodule-example" + +pluginManagement { + plugins { + kotlin("jvm") version "1.7.20" + } + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +include(":parentProject") +include(":parentProject:childProjectA") +include(":parentProject:childProjectB") diff --git a/examples/multiplatform-example/dokka/build.gradle.kts b/examples/multiplatform-example/dokka/build.gradle.kts new file mode 100644 index 00000000..e2b7c4f3 --- /dev/null +++ b/examples/multiplatform-example/dokka/build.gradle.kts @@ -0,0 +1,44 @@ +@file:Suppress("UNUSED_VARIABLE") + +import org.jetbrains.dokka.gradle.DokkaTask +import org.jetbrains.dokka.Platform + +plugins { + kotlin("multiplatform") version "1.7.20" + id("org.jetbrains.dokka") version "1.7.10" +} + +repositories { + mavenCentral() +} + +group = "org.test" +version = "1.0-SNAPSHOT" + +kotlin { + jvm() // Create a JVM target with the default name "jvm" + linuxX64("linux") + macosX64("macos") + js() + sourceSets { + val commonMain by getting { + dependencies { + implementation(kotlin("stdlib-common")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1") + } + } + } +} + +tasks.withType().configureEach { + dokkaSourceSets { + /* + Create custom source set (not known to the Kotlin Gradle Plugin) + */ + register("customSourceSet") { + this.jdkVersion.set(9) + this.displayName.set("custom") + this.sourceRoots.from(file("src/customJdk9/kotlin")) + } + } +} diff --git a/examples/multiplatform-example/dokka/gradle.properties b/examples/multiplatform-example/dokka/gradle.properties new file mode 100644 index 00000000..29e08e8c --- /dev/null +++ b/examples/multiplatform-example/dokka/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/settings.gradle.kts b/examples/multiplatform-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..e9daf094 --- /dev/null +++ b/examples/multiplatform-example/dokka/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "dokka-multiplatform-example" + diff --git a/examples/multiplatform-example/dokka/src/commonMain/kotlin/org.kotlintestmpp.common/main.kt b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org.kotlintestmpp.common/main.kt new file mode 100644 index 00000000..1746d513 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org.kotlintestmpp.common/main.kt @@ -0,0 +1,4 @@ +package org.kotlintestmpp.common + +class Foo {} + diff --git a/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/coroutines.kt b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/coroutines.kt new file mode 100644 index 00000000..330cd83a --- /dev/null +++ b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/coroutines.kt @@ -0,0 +1,6 @@ +package org.kotlintestmpp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred + +expect fun CoroutineScope.asyncWithDealy(delay: Long, block: suspend () -> T): Deferred diff --git a/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/getCurrentDate.kt b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/getCurrentDate.kt new file mode 100644 index 00000000..46a1dd23 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/commonMain/kotlin/org/kotlintestmpp/getCurrentDate.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +expect fun getCurrentDate(): String + +fun getDate(): String { + return "Today's Date is ${getCurrentDate()}" +} + diff --git a/examples/multiplatform-example/dokka/src/customJdk9/kotlin/demo/CustomSourceSetFile.kt b/examples/multiplatform-example/dokka/src/customJdk9/kotlin/demo/CustomSourceSetFile.kt new file mode 100644 index 00000000..5b642416 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/customJdk9/kotlin/demo/CustomSourceSetFile.kt @@ -0,0 +1,11 @@ +package demo + +/** + * This class demonstrates custom dokka source sets + */ +class CustomSourceSetFile { + /** + * This function will not do anything + */ + fun thisIsAFunction() {} +} diff --git a/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt b/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt new file mode 100644 index 00000000..7b5fe652 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred + +actual fun CoroutineScope.asyncWithDealy(delay: Long, block: suspend () -> T): Deferred { + TODO("Not yet implemented") +} diff --git a/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/main.kt b/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/main.kt new file mode 100644 index 00000000..8cb66e6d --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jsMain/kotlin/org/kotlintestmpp/main.kt @@ -0,0 +1,17 @@ +package org.kotlintestmpp + +fun main(args : Array) { + console.log("Hello, world!") +} + +fun js(){} +fun shared(){} + +/** + * Actual function for js + */ +actual fun getCurrentDate(): String { + return "test" +} + +fun String.myExtension() = println("test") \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/src/jsMain/kotlin/shouldbesuppressed/supp.kt b/examples/multiplatform-example/dokka/src/jsMain/kotlin/shouldbesuppressed/supp.kt new file mode 100644 index 00000000..21dca566 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jsMain/kotlin/shouldbesuppressed/supp.kt @@ -0,0 +1,11 @@ +package shouldbesuppressed + +/** + * This function should not be visible + */ +fun thatShouldNotBeVisible(): String = "oops" + +/** + * This class should not be visible + */ +class DontLookAtMe(val stealth: Int = 9001) \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/MainCommand.java b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/MainCommand.java new file mode 100644 index 00000000..16de8ef3 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/MainCommand.java @@ -0,0 +1,16 @@ +package org.kotlintestmpp; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MainCommand { + String command(); + + String[] aliases(); + + String description(); +} \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt new file mode 100644 index 00000000..7b5fe652 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred + +actual fun CoroutineScope.asyncWithDealy(delay: Long, block: suspend () -> T): Deferred { + TODO("Not yet implemented") +} diff --git a/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/main.kt b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/main.kt new file mode 100644 index 00000000..bc5b53de --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/org/kotlintestmpp/main.kt @@ -0,0 +1,30 @@ +package org.kotlintestmpp +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import org.kotlintestmpp.common.Foo + +fun main(args : Array) { + println("Hello, world!") +} + +/** + * also see the [Foo] class + * @see org.kotlintestmpp.common.Foo + */ +fun jvm(){} +fun shared(){} +fun CoroutineScope.startConnectionPipeline( + input: String +): Job = launch { TODO () } + +/** + * Actual function for jvm + */ +actual fun getCurrentDate(): String { + return "test" +} + +fun String.myExtension() = println("test2") + + diff --git a/examples/multiplatform-example/dokka/src/jvmMain/kotlin/shouldbesuppressed/supp.kt b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/shouldbesuppressed/supp.kt new file mode 100644 index 00000000..21dca566 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/jvmMain/kotlin/shouldbesuppressed/supp.kt @@ -0,0 +1,11 @@ +package shouldbesuppressed + +/** + * This function should not be visible + */ +fun thatShouldNotBeVisible(): String = "oops" + +/** + * This class should not be visible + */ +class DontLookAtMe(val stealth: Int = 9001) \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt new file mode 100644 index 00000000..7b5fe652 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred + +actual fun CoroutineScope.asyncWithDealy(delay: Long, block: suspend () -> T): Deferred { + TODO("Not yet implemented") +} diff --git a/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/cinterop.kt b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/cinterop.kt new file mode 100644 index 00000000..efc60f23 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/cinterop.kt @@ -0,0 +1,10 @@ +@file:Suppress("unused") + +package org.kotlintestmpp + +import kotlinx.cinterop.CPointed +import kotlinx.cinterop.CPointer + +fun printPointerRawValue(pointer: CPointer) { + println(pointer.rawValue) +} diff --git a/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/getCurrentDate.kt b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/getCurrentDate.kt new file mode 100644 index 00000000..86f27c15 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/linuxMain/kotlin/org/kotlintestmpp/getCurrentDate.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +/** + * Actual function for linux + */ +actual fun getCurrentDate(): String { + TODO("Not yet implemented") +} \ No newline at end of file diff --git a/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt b/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt new file mode 100644 index 00000000..7b5fe652 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/asyncWithDealy.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred + +actual fun CoroutineScope.asyncWithDealy(delay: Long, block: suspend () -> T): Deferred { + TODO("Not yet implemented") +} diff --git a/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/getCurrentDate.kt b/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/getCurrentDate.kt new file mode 100644 index 00000000..3e7849b6 --- /dev/null +++ b/examples/multiplatform-example/dokka/src/macosMain/kotlin/org/kotlintestmpp/getCurrentDate.kt @@ -0,0 +1,8 @@ +package org.kotlintestmpp + +/** + * Actual function for mac os + */ +actual fun getCurrentDate(): String { + TODO("Not yet implemented") +} \ No newline at end of file diff --git a/examples/multiplatform-example/dokkatoo/settings.gradle.kts b/examples/multiplatform-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..30503c55 --- /dev/null +++ b/examples/multiplatform-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "multiplatform-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/examples/versioning-multimodule-example/dokka/build.gradle.kts b/examples/versioning-multimodule-example/dokka/build.gradle.kts new file mode 100644 index 00000000..4b874373 --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + kotlin("jvm") version "1.7.20" + id("org.jetbrains.dokka") version ("1.7.10") apply false +} + +// The versioning plugin should be applied in all submodules +subprojects { + repositories { + mavenCentral() + } + apply { + plugin("org.jetbrains.kotlin.jvm") + plugin("org.jetbrains.dokka") + } + val dokkaPlugin by configurations + dependencies { + dokkaPlugin("org.jetbrains.dokka:versioning-plugin:1.7.10") + } +} diff --git a/examples/versioning-multimodule-example/dokka/parentProject/build.gradle.kts b/examples/versioning-multimodule-example/dokka/parentProject/build.gradle.kts new file mode 100644 index 00000000..afbc6675 --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/parentProject/build.gradle.kts @@ -0,0 +1,25 @@ +import org.jetbrains.dokka.gradle.DokkaMultiModuleTask + +dependencies { + implementation(kotlin("stdlib")) +} + +val olderVersionsFolder = "olderVersions" + +// The previously documentations should be generated with the versioning plugin +val generatePreviouslyDocTask by tasks.register("dokkaPreviouslyDocumentation") { + dependencies { + dokkaPlugin("org.jetbrains.dokka:all-modules-page-plugin:1.7.10") + dokkaPlugin("org.jetbrains.dokka:versioning-plugin:1.7.10") + } + val configuredVersion = "0.9" + outputDirectory.set(file(projectDir.resolve(olderVersionsFolder).resolve(configuredVersion))) + pluginsMapConfiguration.set(mapOf("org.jetbrains.dokka.versioning.VersioningPlugin" to """{ "version": "$configuredVersion" }""")) + addChildTasks(listOf(project("childProjectA"), project("childProjectB")), "dokkaHtmlPartial") +} + +tasks.dokkaHtmlMultiModule { + dependsOn(generatePreviouslyDocTask) + val configuredVersion = "1.0" + pluginsMapConfiguration.set(mapOf("org.jetbrains.dokka.versioning.VersioningPlugin" to """{ "version": "$configuredVersion", "olderVersionsDir": "${projectDir.resolve(olderVersionsFolder).invariantSeparatorsPath}" }""")) +} diff --git a/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts b/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts new file mode 100644 index 00000000..dd9f5199 --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + implementation(kotlin("stdlib")) +} \ No newline at end of file diff --git a/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt b/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt new file mode 100644 index 00000000..533b305c --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/parentProject/childProjectA/src/main/kotlin/demo/ChildProjectAClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child project a + */ +class ChildProjectAClass diff --git a/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts b/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts new file mode 100644 index 00000000..fceff829 --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + implementation(kotlin("stdlib")) +} diff --git a/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt b/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt new file mode 100644 index 00000000..6bfd22eb --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/parentProject/childProjectB/src/main/kotlin/demo/ChildProjectBClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +package demo + +/** + * Class defined in child module b + */ +class ChildProjectBClass diff --git a/examples/versioning-multimodule-example/dokka/settings.gradle.kts b/examples/versioning-multimodule-example/dokka/settings.gradle.kts new file mode 100644 index 00000000..ec6614f0 --- /dev/null +++ b/examples/versioning-multimodule-example/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +include(":parentProject") +include(":parentProject:childProjectA") +include(":parentProject:childProjectB") + +rootProject.name = "dokka-versioning-multimodule-example" \ No newline at end of file diff --git a/examples/versioning-multimodule-example/dokkatoo/settings.gradle.kts b/examples/versioning-multimodule-example/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..850a82bf --- /dev/null +++ b/examples/versioning-multimodule-example/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "versioning-multimodule-example" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/externals/.gitignore b/externals/.gitignore deleted file mode 100644 index 7892be13..00000000 --- a/externals/.gitignore +++ /dev/null @@ -1 +0,0 @@ -kotlin-dokka/ diff --git a/externals/build.gradle.kts b/externals/build.gradle.kts deleted file mode 100644 index 37d3347d..00000000 --- a/externals/build.gradle.kts +++ /dev/null @@ -1,44 +0,0 @@ -import buildsrc.conventions.utils.* - -plugins { - buildsrc.conventions.base -} - -dependencies { - kotlinDokkaSource("kotlin:dokka:1.7.20@zip") -} - -val kotlinDokkaPrepareSource by tasks.registering(Sync::class) { - group = "externals" - description = "Download & unpack Kotlin Dokka source code" - from( - @Suppress("UnstableApiUsage") - configurations.kotlinDokkaSource.flatMap { src -> - src.incoming - .artifactView { lenient(true) } - .artifacts - .resolvedArtifacts - .map { artifacts -> artifacts.map { zipTree(it.file) } } - } - ) { - // drop the first dir (dokka-$version) - eachFile { - relativePath = relativePath.dropDirectories(1) - } - } - into(layout.projectDirectory.dir("kotlin-dokka")) - exclude( - "*.github", - "*.gradle", - "**/gradlew", - "**/gradlew.bat", - "**/gradle/wrapper/gradle-wrapper.jar", - "**/gradle/wrapper/gradle-wrapper.properties", - ) -} - -configurations.kotlinDokkaSourceElements.configure { - outgoing { - artifact(kotlinDokkaPrepareSource.map { it.destinationDir }) - } -} diff --git a/gradle.properties b/gradle.properties index dc880ef3..bbf2788f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ -org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx2g -XX:MaxMetaspaceSize=1g +# memory is set quite high because the tests launch a lot of processes +org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx4g -XX:MaxMetaspaceSize=2g org.gradle.caching=true # https://github.com/gradle/gradle/issues/20416 diff --git a/modules/dokkatoo-plugin-integration-tests/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/build.gradle.kts new file mode 100644 index 00000000..a7c8205f --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/build.gradle.kts @@ -0,0 +1,212 @@ +@file:Suppress("UnstableApiUsage") // jvm test suites & test report aggregation are incubating + +import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") //version embeddedKotlinVersion + kotlin("plugin.serialization") version embeddedKotlinVersion + `java-test-fixtures` + + `jvm-test-suite` + `test-report-aggregation` + + buildsrc.conventions.`dokka-source-downloader` + buildsrc.conventions.`maven-publish-test` + buildsrc.conventions.`dokkatoo-example-projects` +} + +dependencies { + testMavenPublication(projects.modules.dokkatooPlugin) + exampleProjects(projects.examples) + + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1") + + testFixturesApi(testFixtures(projects.modules.dokkatooPlugin)) + testFixturesImplementation(gradleTestKit()) + testFixturesImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1") + testFixturesImplementation(platform("io.kotest:kotest-bom:5.5.5")) + testFixturesImplementation("io.kotest:kotest-runner-junit5") + testFixturesImplementation("io.kotest:kotest-assertions-core") + testFixturesImplementation("io.kotest:kotest-assertions-json") + + val jacksonVersion = "2.12.7" + testFixturesImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion") + +// kotlinDokkaSource(projects.externals) + + // don't define test dependencies here, instead define them in the testing.suites {} configuration below +} + + +tasks.withType().configureEach { + kotlinOptions { + this.freeCompilerArgs += listOf( + "-opt-in=kotlin.RequiresOptIn", + //"-opt-in=dev.adamko.dokkatoo.internal.DokkatooInternalApi", + ) + } +} + +testing.suites { + + withType().configureEach { + useJUnitJupiter() + + dependencies { + implementation(project.dependencies.gradleTestKit()) + + implementation("org.jetbrains.kotlin:kotlin-test:1.7.20") + + implementation(project.dependencies.platform("io.kotest:kotest-bom:5.5.5")) + implementation("io.kotest:kotest-runner-junit5") + implementation("io.kotest:kotest-assertions-core") + implementation("io.kotest:kotest-assertions-json") + + implementation(project.dependencies.testFixtures(project())) + + implementation("org.jetbrains.dokka:dokka-core:1.7.20") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1") + } + + targets.configureEach { + testTask.configure { + val projectTestTempDirPath = "$buildDir/test-temp-dir" + inputs.property("projectTestTempDir", projectTestTempDirPath) + systemProperty("projectTestTempDir", projectTestTempDirPath) + + // depend on the test-publication configuration, but not the test-maven repo dir + // (otherwise this task will never be up-to-date) + dependsOn(configurations.testMavenPublication) + + // depend on example & integration-test projects setup + dependsOn(configurations.exampleProjects) + dependsOn(tasks.setupDokkaTemplateProjects) + dependsOn(tasks.updateGradlePropertiesInDokkatooExamples) + + val dokkatooExamplesDir = configurations.exampleProjects.map { + it.incoming.artifactView { lenient(true) }.files.singleFile.absolutePath + } + + systemProperty("integrationTestProjectsDir", "$projectDir/projects") + systemProperty("testMavenRepoDir", file(mavenPublishTest.testMavenRepo).canonicalPath) + doFirst { + // workaround for lazy-properties not working https://github.com/gradle/gradle/issues/12247 + systemProperty("exampleProjectsDir", dokkatooExamplesDir.get()) + } + } + } + } + + + /** Examples tests suite */ + val testExamples by registering(JvmTestSuite::class) { +// testType.set(TestSuiteType.FUNCTIONAL_TEST) + + targets.all { + testTask.configure { +// dependsOn(project.configurations.kotlinDokkaSource) + +// inputs.property("dokkaSourceDir", +// project.configurations.kotlinDokkaSource.map { dokkaSrcConf -> +// val files = dokkaSrcConf.incoming.artifactView { lenient(true) }.files +// files.singleOrNull()?.absolutePath +// ?: error("could not get Dokka source code directory from kotlinDokkaSource configuration. Got ${files.count()} files: $files") +// } +// ) +// +// systemProperty("dokkaSourceDir", inputs.properties["dokkaSourceDir"]!!) + } + } + } + + + /** Integration tests suite */ + val testIntegration by registering(JvmTestSuite::class) { +// testType.set(TestSuiteType.INTEGRATION_TEST) + + targets.all { + testTask.configure { +// dependsOn(project.configurations.kotlinDokkaSource) + +// inputs.property("dokkaSourceDir", +// project.configurations.kotlinDokkaSource.map { dokkaSrcConf -> +// val files = dokkaSrcConf.incoming.artifactView { lenient(true) }.files +// files.singleOrNull()?.absolutePath +// ?: error("could not get Dokka source code directory from kotlinDokkaSource configuration. Got ${files.count()} files: $files") +// } +// ) +// +// systemProperty("dokkaSourceDir", inputs.properties["dokkaSourceDir"]!!) + } + } + } + + tasks.check { dependsOn(testExamples, testIntegration) } +} + + +tasks.withType().configureEach { + + mustRunAfter(tasks.withType()) + + testLogging { + events = setOf( + TestLogEvent.STARTED, + TestLogEvent.PASSED, + TestLogEvent.SKIPPED, + TestLogEvent.FAILED, + TestLogEvent.STANDARD_OUT, + TestLogEvent.STANDARD_ERROR, + ) + showStandardStreams = true + showExceptions = true + showCauses = true + showStackTraces = true + } +} + + +// don't publish test fixtures (which causes warnings when publishing) +// https://docs.gradle.org/current/userguide/java_testing.html#publishing_test_fixtures +val javaComponent = components["java"] as AdhocComponentWithVariants +javaComponent.withVariantsFromConfiguration(configurations["testFixturesApiElements"]) { skip() } +javaComponent.withVariantsFromConfiguration(configurations["testFixturesRuntimeElements"]) { skip() } + +tasks.setupDokkaTemplateProjects { + destinationToSources.set( + mapOf( + //@formatter:off + "projects/it-android-0/dokka" to listOf("integration-tests/gradle/projects/it-android-0"), + "projects/it-basic/dokka" to listOf("integration-tests/gradle/projects/it-basic"), + "projects/it-basic-groovy/dokka" to listOf("integration-tests/gradle/projects/it-basic-groovy"), + "projects/it-collector-0/dokka" to listOf("integration-tests/gradle/projects/it-collector-0"), + "projects/it-js-ir-0/dokka" to listOf("integration-tests/gradle/projects/it-js-ir-0"), + "projects/it-multimodule-0/dokka" to listOf("integration-tests/gradle/projects/it-multimodule-0"), + "projects/it-multimodule-1/dokka" to listOf("integration-tests/gradle/projects/it-multimodule-1"), + "projects/it-multimodule-versioning-0/dokka" to listOf("integration-tests/gradle/projects/it-multimodule-versioning-0"), + "projects/it-multiplatform-0/dokka" to listOf("integration-tests/gradle/projects/it-multiplatform-0"), + + //"integration-tests/gradle/projects/coroutines" to "projects/coroutines/dokka", + //"integration-tests/gradle/projects/serialization" to "projects/serialization/dokka", + //"integration-tests/gradle/projects/stdlib" to "projects/stdlib/dokka", + //@formatter:on + ).mapKeys { (dest, _) -> + projectDir.resolve(dest) + }.mapValues { (_, sources) -> + sources + listOf( + "integration-tests/gradle/projects/template.root.gradle.kts", + "integration-tests/gradle/projects/template.settings.gradle.kts", + ) + } + ) +} + +tasks.withType().configureEach { + // this seems to help OOM errors in the Worker Daemons + setForkEvery(1) + jvmArgs( + "-Xmx1g", + "-XX:MaxMetaspaceSize=512m", + ) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/.gitignore b/modules/dokkatoo-plugin-integration-tests/projects/.gitignore new file mode 100644 index 00000000..72f2d93e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/.gitignore @@ -0,0 +1,5 @@ +.idea +**/gradle/wrapper/** +gradlew.bat +gradlew +gradle.properties diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/build.gradle.kts new file mode 100644 index 00000000..799ec22d --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + id("com.android.library") + id("org.jetbrains.dokka") + kotlin("android") +} + +apply(from = "../template.root.gradle.kts") + +android { + defaultConfig { + minSdkVersion(21) + setCompileSdkVersion(29) + } +} + +dependencies { + implementation(kotlin("stdlib")) + implementation("androidx.appcompat:appcompat:1.1.0") +} + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/gradle.properties new file mode 100644 index 00000000..6c0d7406 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/gradle.properties @@ -0,0 +1,3 @@ +dokka_it_kotlin_version=1.7.20 +dokka_it_android_gradle_plugin_version=4.0.0 +android.useAndroidX=true diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..664d2cb7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-android-0" + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/AndroidManifest.xml b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a35f86be --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/AndroidSpecificClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/AndroidSpecificClass.kt new file mode 100644 index 00000000..cb9046b1 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/AndroidSpecificClass.kt @@ -0,0 +1,16 @@ +@file:Suppress("unused") + +package it.android + +import android.content.Context +import android.util.SparseIntArray +import android.view.View + +/** + * This class is specific to android and uses android classes like: + * [Context], [SparseIntArray] or [View] + */ +class AndroidSpecificClass { + fun sparseIntArray() = SparseIntArray() + fun createView(context: Context): View = View(context) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/IntegrationTestActivity.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/IntegrationTestActivity.kt new file mode 100644 index 00000000..1792818b --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/src/main/java/it/android/IntegrationTestActivity.kt @@ -0,0 +1,22 @@ +package it.android + +import android.annotation.SuppressLint +import android.os.Bundle +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity + +/** + * Some Activity implementing [AppCompatActivity] from android x + */ +class IntegrationTestActivity : AppCompatActivity() { + /** + * Will show a small happy text + */ + @SuppressLint("SetTextI18n") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val textView = TextView(this) + textView.text = "I am so happy :)" + setContentView(textView) + } +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..a9891abc --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-android-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/build.gradle new file mode 100644 index 00000000..f368ed10 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/build.gradle @@ -0,0 +1,54 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' + id("org.jetbrains.dokka") +} + +apply from: '../template.root.gradle.kts' + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" +} + +dokkaHtml { + outputDirectory = new File(buildDir, "/dokka/customHtml") + failOnWarning = false + dokkaSourceSets { + customSourceSet { + sourceRoot(file("src/main/java")) + sourceRoot(file("src/main/kotlin")) + displayName.set("custom") + reportUndocumented.set(true) + } + + configureEach { + perPackageOption { // testing closures + matchingRegex.set(".*internal.*") + suppress.set(true) + } + + sourceLink { // testing closures + localDirectory.set(file("src/main")) + remoteUrl.set( + new URL( + "https://github.com/Kotlin/dokka/tree/master/" + + "integration-tests/gradle/projects/it-basic-groovy/src/main" + ) + ) + } + } + } + +} + +dokkaJavadoc { + outputDirectory = new File(buildDir, "dokka/customJavadoc") +} + +dokkaGfm { + outputDirectory = new File(buildDir, "dokka/customGfm") +} + +dokkaJekyll { + outputDirectory = new File(buildDir, "dokka/customJekyll") +} + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/gradle.properties new file mode 100644 index 00000000..fa6c65f6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.7.20 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/settings.gradle.kts new file mode 100644 index 00000000..cb6af4e9 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-basic-groovy" + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/java/it/basic/java/SampleJavaClass.java b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/java/it/basic/java/SampleJavaClass.java new file mode 100644 index 00000000..23b0202c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/java/it/basic/java/SampleJavaClass.java @@ -0,0 +1,17 @@ +package it.basic.java; + +import it.basic.PublicClass; + +/** + * This class is, unlike {@link PublicClass}, written in Java + */ +@SuppressWarnings("unused") +public class SampleJavaClass { + + /** + * @return Empty instance of {@link PublicClass} + */ + public PublicClass publicDocumentedFunction() { + return new PublicClass(); + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/kotlin/it/basic/PublicClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/kotlin/it/basic/PublicClass.kt new file mode 100644 index 00000000..71bc7e63 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/src/main/kotlin/it/basic/PublicClass.kt @@ -0,0 +1,48 @@ +@file:Suppress("unused") + +package it.basic + +class PublicClass { + /** + * This function is public and documented + */ + fun publicDocumentedFunction(): String = "" + + fun publicUndocumentedFunction(): String = "" + + /** + * This function is internal and documented + */ + internal fun internalDocumentedFunction(): String = "" + + internal fun internalUndocumentedFunction(): String = "" + + /** + * This function is private and documented + */ + private fun privateDocumentedFunction(): String = "" + + private fun privateUndocumentedFunction(): String = "" + + + /** + * This property is public and documented + */ + val publicDocumentedProperty: Int = 0 + + val publicUndocumentedProperty: Int = 0 + + /** + * This property internal and documented + */ + val internalDocumentedProperty: Int = 0 + + val internalUndocumentedProperty: Int = 0 + + /** + * This property private and documented + */ + private val privateDocumentedProperty: Int = 0 + + private val privateUndocumentedProperty: Int = 0 +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokkatoo/settings.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokkatoo/settings.gradle new file mode 100644 index 00000000..fd5763e1 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokkatoo/settings.gradle @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven { url = providers.gradleProperty("testMavenRepo") } + } +} + +rootProject.name = "it-basic-groovy" + +dependencyResolutionManagement { + repositories { + mavenCentral() + maven { url = providers.gradleProperty("testMavenRepo") } + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/build.gradle.kts new file mode 100644 index 00000000..b1484ac9 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/build.gradle.kts @@ -0,0 +1,64 @@ +import org.jetbrains.dokka.gradle.DokkaTask +import org.jetbrains.dokka.gradle.kotlinSourceSet +import org.jetbrains.dokka.base.DokkaBase +import org.jetbrains.dokka.base.DokkaBaseConfiguration +import org.jetbrains.dokka.DokkaConfiguration +import java.net.URL + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +buildscript { + dependencies { + classpath("org.jetbrains.dokka:dokka-base:${System.getenv("DOKKA_VERSION")}") + } +} + +version = "1.7.20-SNAPSHOT" + +apply(from = "../template.root.gradle.kts") + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) +} + +tasks.withType { + moduleName.set("Basic Project") + dokkaSourceSets { + configureEach { + documentedVisibilities.set( + setOf(DokkaConfiguration.Visibility.PUBLIC, DokkaConfiguration.Visibility.PROTECTED) + ) + suppressedFiles.from(file("src/main/kotlin/it/suppressedByPath")) + perPackageOption { + matchingRegex.set("it.suppressedByPackage.*") + suppress.set(true) + } + perPackageOption { + matchingRegex.set("it.overriddenVisibility.*") + documentedVisibilities.set( + setOf(DokkaConfiguration.Visibility.PRIVATE) + ) + } + sourceLink { + localDirectory.set(file("src/main")) + remoteUrl.set( + URL( + "https://github.com/Kotlin/dokka/tree/master/" + + "integration-tests/gradle/projects/it-basic/src/main" + ) + ) + } + } + + register("myTest") { + kotlinSourceSet(kotlin.sourceSets["test"]) + } + } + suppressObviousFunctions.set(false) + + pluginsMapConfiguration.set(mapOf(DokkaBase::class.qualifiedName to """{ "customStyleSheets": ["${file("../customResources/logo-styles.css").invariantSeparatorsPath}", "${file("../customResources/custom-style-to-add.css").invariantSeparatorsPath}"], "customAssets" : ["${file("../customResources/custom-resource.svg").invariantSeparatorsPath}"] }""")) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-resource.svg b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-resource.svg new file mode 100644 index 00000000..1865f739 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-resource.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-style-to-add.css b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-style-to-add.css new file mode 100644 index 00000000..408c210e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/custom-style-to-add.css @@ -0,0 +1 @@ +/* custom stylesheet */ \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/logo-styles.css b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/logo-styles.css new file mode 100644 index 00000000..2ac57218 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/customResources/logo-styles.css @@ -0,0 +1,3 @@ +#logo { + background-image: url('https://upload.wikimedia.org/wikipedia/commons/9/9d/Ubuntu_logo.svg'); +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/gradle.properties new file mode 100644 index 00000000..fa6c65f6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.7.20 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/settings.gradle.kts new file mode 100644 index 00000000..833995e5 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-basic" + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/java/it/basic/java/SampleJavaClass.java b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/java/it/basic/java/SampleJavaClass.java new file mode 100644 index 00000000..23b0202c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/java/it/basic/java/SampleJavaClass.java @@ -0,0 +1,17 @@ +package it.basic.java; + +import it.basic.PublicClass; + +/** + * This class is, unlike {@link PublicClass}, written in Java + */ +@SuppressWarnings("unused") +public class SampleJavaClass { + + /** + * @return Empty instance of {@link PublicClass} + */ + public PublicClass publicDocumentedFunction() { + return new PublicClass(); + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/RootPackageClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/RootPackageClass.kt new file mode 100644 index 00000000..8ff6c750 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/RootPackageClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +/** + * A class that lives inside the root package + */ +class RootPackageClass { + val description = "I do live in the root package!" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/basic/PublicClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/basic/PublicClass.kt new file mode 100644 index 00000000..2958948c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/basic/PublicClass.kt @@ -0,0 +1,69 @@ +@file:Suppress("unused") + +package it.basic + +import RootPackageClass + +/** + * This class, unlike [RootPackageClass] is located in a sub-package + * + * §PUBLIC§ (marker for asserts) + */ +class PublicClass { + /** + * This function is public and documented + */ + fun publicDocumentedFunction(): String = "" + + fun publicUndocumentedFunction(): String = "" + + /** + * This function is internal and documented + */ + internal fun internalDocumentedFunction(): String = "" + + internal fun internalUndocumentedFunction(): String = "" + + /** + * This function is protected and documented + */ + protected fun protectedDocumentedFunction(): String = "" + + protected fun protectedUndocumentedFunction(): String = "" + + /** + * This function is private and documented + */ + private fun privateDocumentedFunction(): String = "" + + private fun privateUndocumentedFunction(): String = "" + + + /** + * This property is public and documented + */ + val publicDocumentedProperty: Int = 0 + + val publicUndocumentedProperty: Int = 0 + + /** + * This property internal and documented + */ + val internalDocumentedProperty: Int = 0 + + val internalUndocumentedProperty: Int = 0 + + /** + * This property is protected and documented + */ + val protectedDocumentedProperty: Int = 0 + + val protectedUndocumentedProperty: Int = 0 + + /** + * This property private and documented + */ + private val privateDocumentedProperty: Int = 0 + + private val privateUndocumentedProperty: Int = 0 +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/internal/InternalClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/internal/InternalClass.kt new file mode 100644 index 00000000..6173d239 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/internal/InternalClass.kt @@ -0,0 +1,7 @@ +package it.internal + +/** + * §INTERNAL§ (marker for asserts) + * This class is internal and should not be rendered + */ +internal class InternalClass diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt new file mode 100644 index 00000000..230f5e0b --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt @@ -0,0 +1,12 @@ +package it.overriddenVisibility + +/** + * Private classes and methods generally should not be visible, but [documentedVisibilities] + * are overriden for this specific package to include private code + * + * §PRIVATE§ (marker for asserts) + */ +private class VisiblePrivateClass { + private val privateVal: Int = 0 + private fun privateMethod() {} +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/protected/ProtectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/protected/ProtectedClass.kt new file mode 100644 index 00000000..ad19f1a1 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/protected/ProtectedClass.kt @@ -0,0 +1,10 @@ +package it.protected + +/** + * Protected class should be visible because it's included in documentedVisibilities + * + * §PROTECTED§ (marker for asserts) + */ +protected class ProtectedClass { + protected fun protectedFun(): String = "protected" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt new file mode 100644 index 00000000..d8dc9cff --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt @@ -0,0 +1,7 @@ +package it.suppressedByPackage + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPackage diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt new file mode 100644 index 00000000..4dda9da4 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt @@ -0,0 +1,7 @@ +package it.suppressedByPath + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPath diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/test/kotlin/it/basic/TestClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/test/kotlin/it/basic/TestClass.kt new file mode 100644 index 00000000..3584bdef --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/src/test/kotlin/it/basic/TestClass.kt @@ -0,0 +1,17 @@ +package it.basic + +import kotlin.test.Test +import kotlin.test.assertTrue + +annotation class OurAnnotation + +class TestClass { + /** + * Asserts something. [PublicClass] + */ + @Test + @OurAnnotation + fun test() { + assertTrue(1 == 1) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/build.gradle.kts new file mode 100644 index 00000000..2337a83e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/build.gradle.kts @@ -0,0 +1,69 @@ +import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.dokka.gradle.kotlinSourceSet + +plugins { + kotlin("jvm") version "1.7.20" + id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" +} + +version = "1.7.20-SNAPSHOT" + +dependencies { + implementation(kotlin("stdlib")) + testImplementation(kotlin("test-junit")) +} + +dokkatoo { + moduleName.set("Basic Project") + dokkatooSourceSets.configureEach { + documentedVisibilities( + DokkaConfiguration.Visibility.PUBLIC, + DokkaConfiguration.Visibility.PROTECTED, + ) + suppressedFiles.from(file("src/main/kotlin/it/suppressedByPath")) + perPackageOption { + matchingRegex.set("it.suppressedByPackage.*") + suppress.set(true) + } + perPackageOption { + matchingRegex.set("it.overriddenVisibility.*") + documentedVisibilities.set( + setOf(DokkaConfiguration.Visibility.PRIVATE) + ) + } + sourceLink { + localDirectory.set(file("src/main")) + remoteUrl.set( + uri( + "https://github.com/Kotlin/dokka/tree/master/integration-tests/gradle/projects/it-basic/src/main" + ).toURL() + ) + } + } + dokkatooPublications.configureEach { + suppressObviousFunctions.set(true) + pluginsConfiguration.create("org.jetbrains.dokka.base.DokkaBase") { + serializationFormat.set(DokkaConfiguration.SerializationFormat.JSON) + values.set( + """ + { + "customStyleSheets": [ + "${file("./customResources/logo-styles.css").invariantSeparatorsPath}", + "${file("./customResources/custom-style-to-add.css").invariantSeparatorsPath}" + ], + "customAssets": [ + "${file("./customResources/custom-resource.svg").invariantSeparatorsPath}" + ] + } + """.trimIndent() + ) + } + suppressObviousFunctions.set(false) + } +} + +tasks.withType().configureEach { + dokkaSourceSets.configureEach { + sourceSetScope.set(":dokkaHtml") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-resource.svg b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-resource.svg new file mode 100644 index 00000000..1865f739 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-resource.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-style-to-add.css b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-style-to-add.css new file mode 100644 index 00000000..408c210e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/custom-style-to-add.css @@ -0,0 +1 @@ +/* custom stylesheet */ \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/logo-styles.css b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/logo-styles.css new file mode 100644 index 00000000..2ac57218 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/customResources/logo-styles.css @@ -0,0 +1,3 @@ +#logo { + background-image: url('https://upload.wikimedia.org/wikipedia/commons/9/9d/Ubuntu_logo.svg'); +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..a2872f47 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-basic" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/java/it/basic/java/SampleJavaClass.java b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/java/it/basic/java/SampleJavaClass.java new file mode 100644 index 00000000..23b0202c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/java/it/basic/java/SampleJavaClass.java @@ -0,0 +1,17 @@ +package it.basic.java; + +import it.basic.PublicClass; + +/** + * This class is, unlike {@link PublicClass}, written in Java + */ +@SuppressWarnings("unused") +public class SampleJavaClass { + + /** + * @return Empty instance of {@link PublicClass} + */ + public PublicClass publicDocumentedFunction() { + return new PublicClass(); + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/RootPackageClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/RootPackageClass.kt new file mode 100644 index 00000000..8ff6c750 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/RootPackageClass.kt @@ -0,0 +1,8 @@ +@file:Suppress("unused") + +/** + * A class that lives inside the root package + */ +class RootPackageClass { + val description = "I do live in the root package!" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/basic/PublicClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/basic/PublicClass.kt new file mode 100644 index 00000000..2958948c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/basic/PublicClass.kt @@ -0,0 +1,69 @@ +@file:Suppress("unused") + +package it.basic + +import RootPackageClass + +/** + * This class, unlike [RootPackageClass] is located in a sub-package + * + * §PUBLIC§ (marker for asserts) + */ +class PublicClass { + /** + * This function is public and documented + */ + fun publicDocumentedFunction(): String = "" + + fun publicUndocumentedFunction(): String = "" + + /** + * This function is internal and documented + */ + internal fun internalDocumentedFunction(): String = "" + + internal fun internalUndocumentedFunction(): String = "" + + /** + * This function is protected and documented + */ + protected fun protectedDocumentedFunction(): String = "" + + protected fun protectedUndocumentedFunction(): String = "" + + /** + * This function is private and documented + */ + private fun privateDocumentedFunction(): String = "" + + private fun privateUndocumentedFunction(): String = "" + + + /** + * This property is public and documented + */ + val publicDocumentedProperty: Int = 0 + + val publicUndocumentedProperty: Int = 0 + + /** + * This property internal and documented + */ + val internalDocumentedProperty: Int = 0 + + val internalUndocumentedProperty: Int = 0 + + /** + * This property is protected and documented + */ + val protectedDocumentedProperty: Int = 0 + + val protectedUndocumentedProperty: Int = 0 + + /** + * This property private and documented + */ + private val privateDocumentedProperty: Int = 0 + + private val privateUndocumentedProperty: Int = 0 +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/internal/InternalClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/internal/InternalClass.kt new file mode 100644 index 00000000..6173d239 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/internal/InternalClass.kt @@ -0,0 +1,7 @@ +package it.internal + +/** + * §INTERNAL§ (marker for asserts) + * This class is internal and should not be rendered + */ +internal class InternalClass diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt new file mode 100644 index 00000000..230f5e0b --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt @@ -0,0 +1,12 @@ +package it.overriddenVisibility + +/** + * Private classes and methods generally should not be visible, but [documentedVisibilities] + * are overriden for this specific package to include private code + * + * §PRIVATE§ (marker for asserts) + */ +private class VisiblePrivateClass { + private val privateVal: Int = 0 + private fun privateMethod() {} +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/protected/ProtectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/protected/ProtectedClass.kt new file mode 100644 index 00000000..ad19f1a1 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/protected/ProtectedClass.kt @@ -0,0 +1,10 @@ +package it.protected + +/** + * Protected class should be visible because it's included in documentedVisibilities + * + * §PROTECTED§ (marker for asserts) + */ +protected class ProtectedClass { + protected fun protectedFun(): String = "protected" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt new file mode 100644 index 00000000..d8dc9cff --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt @@ -0,0 +1,7 @@ +package it.suppressedByPackage + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPackage diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt new file mode 100644 index 00000000..4dda9da4 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt @@ -0,0 +1,7 @@ +package it.suppressedByPath + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPath diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/test/kotlin/it/basic/TestClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/test/kotlin/it/basic/TestClass.kt new file mode 100644 index 00000000..3584bdef --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo/src/test/kotlin/it/basic/TestClass.kt @@ -0,0 +1,17 @@ +package it.basic + +import kotlin.test.Test +import kotlin.test.assertTrue + +annotation class OurAnnotation + +class TestClass { + /** + * Asserts something. [PublicClass] + */ + @Test + @OurAnnotation + fun test() { + assertTrue(1 == 1) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/build.gradle.kts new file mode 100644 index 00000000..29b7550c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/build.gradle.kts @@ -0,0 +1 @@ +apply(from = "../template.root.gradle.kts") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/gradle.properties new file mode 100644 index 00000000..fa6c65f6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.7.20 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/build.gradle.kts new file mode 100644 index 00000000..ab86c333 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + // TODO: File bug report for gradle: :moduleA:moduleB:dokkaHtml is missing kotlin gradle plugin from + // the runtime classpath during execution without this plugin in the parent project + kotlin("jvm") + id("org.jetbrains.dokka") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/README.md b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/README.md new file mode 100644 index 00000000..f8c52880 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/README.md @@ -0,0 +1,2 @@ +# Module moduleB +Here is some description for module B diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/build.gradle.kts new file mode 100644 index 00000000..9492fdc8 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt new file mode 100644 index 00000000..430e2234 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt @@ -0,0 +1,6 @@ +package org.jetbrains.dokka.it.moduleB + +@Suppress("unused") +class ModuleB { + fun undocumentedPublicFunction() {} +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/README.md b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/README.md new file mode 100644 index 00000000..4ead5671 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/README.md @@ -0,0 +1,2 @@ +# Module moduleC +Here is some description for module C diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/build.gradle.kts new file mode 100644 index 00000000..9492fdc8 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt new file mode 100644 index 00000000..e14d68e0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt @@ -0,0 +1,6 @@ +package org.jetbrains.dokka.it.moduleC + +@Suppress("unused") +class ModuleC { + fun undocumentedPublicFunction() {} +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..a5c89291 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-multimodule-0" +include(":moduleA") +include(":moduleA:moduleB") +include(":moduleA:moduleC") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..13811d9a --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-collector-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/build.gradle.kts new file mode 100644 index 00000000..ec366c9d --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + id("org.jetbrains.dokka") + kotlin("js") +} + +apply(from = "../template.root.gradle.kts") + +kotlin { + js(IR) { + browser() + nodejs() + } +} + +dependencies { + implementation(kotlin("stdlib")) + implementation(npm("is-sorted", "1.0.5")) + + val reactVersion = properties["react_version"] + implementation("org.jetbrains.kotlin-wrappers:kotlin-react:$reactVersion") + implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom:$reactVersion") +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/gradle.properties new file mode 100644 index 00000000..6df9a408 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/gradle.properties @@ -0,0 +1,2 @@ +dokka_it_kotlin_version=1.7.20 +react_version=18.1.0-pre.345 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..ac6f7867 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/settings.gradle.kts @@ -0,0 +1,5 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-js-ir-0" + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/RootPackageClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/RootPackageClass.kt new file mode 100644 index 00000000..cbe6240e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/RootPackageClass.kt @@ -0,0 +1,26 @@ +@file:Suppress("unused") + +import org.w3c.dom.url.URLSearchParams +import org.w3c.dom.HTMLAnchorElement +import react.dom.html.AnchorHTMLAttributes +import react.Props +import react.State + +/** + * A class that lives inside the root package + */ +class RootPackageClass { + val description = "I do live in the root package!" +} + +// sample method that uses classes from dom and react, should compile +fun URLSearchParams.react(props: Props, state: State) {} + +fun test(list: MutableList) = "list" + +@JsModule("is-sorted") +@JsNonModule +external fun sorted(a: Array): Boolean + +// this declaration can be used to check deserialization of dynamic type +external interface TextLinkProps: AnchorHTMLAttributes \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/basic/PublicClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/basic/PublicClass.kt new file mode 100644 index 00000000..fc4b36bd --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/basic/PublicClass.kt @@ -0,0 +1,53 @@ +@file:Suppress("unused") + +package it.basic + +import RootPackageClass + +/** + * This class, unlike [RootPackageClass] is located in a sub-package + */ +class PublicClass { + /** + * This function is public and documented + */ + fun publicDocumentedFunction(): String = "" + + fun publicUndocumentedFunction(): String = "" + + /** + * This function is internal and documented + */ + internal fun internalDocumentedFunction(): String = "" + + internal fun internalUndocumentedFunction(): String = "" + + /** + * This function is private and documented + */ + private fun privateDocumentedFunction(): String = "" + + private fun privateUndocumentedFunction(): String = "" + + + /** + * This property is public and documented + */ + val publicDocumentedProperty: Int = 0 + + val publicUndocumentedProperty: Int = 0 + + /** + * This property internal and documented + */ + val internalDocumentedProperty: Int = 0 + + val internalUndocumentedProperty: Int = 0 + + /** + * This property private and documented + */ + private val privateDocumentedProperty: Int = 0 + + private val privateUndocumentedProperty: Int = 0 +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/internal/InternalClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/internal/InternalClass.kt new file mode 100644 index 00000000..7d42b978 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/internal/InternalClass.kt @@ -0,0 +1,7 @@ +package it.internal + +/** + * §INTERNAL§ + * This class is internal and should not be rendered + */ +internal class InternalClass diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt new file mode 100644 index 00000000..d8dc9cff --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPackage/SuppressedByPackage.kt @@ -0,0 +1,7 @@ +package it.suppressedByPackage + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPackage diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt new file mode 100644 index 00000000..4dda9da4 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/src/main/kotlin/it/suppressedByPath/SuppressedByPath.kt @@ -0,0 +1,7 @@ +package it.suppressedByPath + +/** + * §SUPPRESSED§ + * This should not be rendered. + */ +class SuppressedByPath diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..85b71839 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-js-ir-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/build.gradle.kts new file mode 100644 index 00000000..29b7550c --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/build.gradle.kts @@ -0,0 +1 @@ +apply(from = "../template.root.gradle.kts") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/gradle.properties new file mode 100644 index 00000000..fa6c65f6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.7.20 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/build.gradle.kts new file mode 100644 index 00000000..ab86c333 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + // TODO: File bug report for gradle: :moduleA:moduleB:dokkaHtml is missing kotlin gradle plugin from + // the runtime classpath during execution without this plugin in the parent project + kotlin("jvm") + id("org.jetbrains.dokka") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/Module.md b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/Module.md new file mode 100644 index 00000000..0570f467 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/Module.md @@ -0,0 +1,6 @@ +# Module !Module B! +Here is some description for Module B + +Module B: Second paragraph +# Module moduleB +§IGNORED$This documentation shall be ignored, because wrong module name§IGNORED$ diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/build.gradle.kts new file mode 100644 index 00000000..5f0b69c7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/build.gradle.kts @@ -0,0 +1,17 @@ +import org.jetbrains.dokka.gradle.DokkaTask + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} + +tasks.withType().configureEach { + moduleName.set("!Module B!") + dokkaSourceSets.configureEach { + includes.from("Module.md") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt new file mode 100644 index 00000000..430e2234 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleB/src/main/kotlin/org/jetbrains/dokka/it/moduleB/ModuleB.kt @@ -0,0 +1,6 @@ +package org.jetbrains.dokka.it.moduleB + +@Suppress("unused") +class ModuleB { + fun undocumentedPublicFunction() {} +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/Module.md b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/Module.md new file mode 100644 index 00000000..4ead5671 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/Module.md @@ -0,0 +1,2 @@ +# Module moduleC +Here is some description for module C diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/build.gradle.kts new file mode 100644 index 00000000..e471d375 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/build.gradle.kts @@ -0,0 +1,16 @@ +import org.jetbrains.dokka.gradle.DokkaTask + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} + +tasks.withType().configureEach { + dokkaSourceSets.configureEach { + includes.from("Module.md") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt new file mode 100644 index 00000000..e14d68e0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleC/src/main/kotlin/org/jetbrains/dokka/it/moduleC/ModuleC.kt @@ -0,0 +1,6 @@ +package org.jetbrains.dokka.it.moduleC + +@Suppress("unused") +class ModuleC { + fun undocumentedPublicFunction() {} +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/build.gradle.kts new file mode 100644 index 00000000..a16e038f --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/build.gradle.kts @@ -0,0 +1,10 @@ +import org.jetbrains.dokka.gradle.DokkaTask + +plugins { + kotlin("jvm") + id("org.jetbrains.dokka") +} + +dependencies { + implementation(kotlin("stdlib")) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/src/main/kotlin/org/jetbrains/dokka/it/moduleD/ModuleC.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/src/main/kotlin/org/jetbrains/dokka/it/moduleD/ModuleC.kt new file mode 100644 index 00000000..88174d53 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/moduleA/moduleD/src/main/kotlin/org/jetbrains/dokka/it/moduleD/ModuleC.kt @@ -0,0 +1,6 @@ +package org.jetbrains.dokka.it.moduleD + +@Suppress("unused") +class ModuleD { + fun undocumentedPublicFunction() {} +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..dda6558f --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/settings.gradle.kts @@ -0,0 +1,6 @@ +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-multimodule-0" +include(":moduleA") +include(":moduleA:moduleB") +include(":moduleA:moduleC") +include(":moduleA:moduleD") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..97712ae9 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-multimodule-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/build.gradle new file mode 100644 index 00000000..57d22b79 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' + id("org.jetbrains.dokka") +} + +apply from: '../template.root.gradle.kts' + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" + implementation project(':first') + implementation project(':second') +} + + +subprojects { + apply plugin: 'org.jetbrains.kotlin.jvm' + apply plugin: 'org.jetbrains.dokka' +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/build.gradle new file mode 100644 index 00000000..e69de29b diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstClass.kt new file mode 100644 index 00000000..93f73bf4 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstClass.kt @@ -0,0 +1,11 @@ +package foo + +/** + * First class description + */ +open class FirstClass{ + /** + * PropertyOne description + */ + val propertyOne: Int = 5 +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstSubclass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstSubclass.kt new file mode 100644 index 00000000..0deb65c0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/FirstSubclass.kt @@ -0,0 +1,12 @@ +package foo + +/** + * Subclass description + * @property surname Surname description + */ +class FirstSubclass(var surname: String) : FirstClass() { + /** + * printNewLine description + */ + fun printNewline() = print("\r\n") +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/Main.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/Main.kt new file mode 100644 index 00000000..8c7f58a7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/foo/Main.kt @@ -0,0 +1,8 @@ +package foo + +/** + * Main function + */ +fun main(args : Array) { + println("Hello, world!") +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/noPackage.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/noPackage.kt new file mode 100644 index 00000000..c41e218f --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/first/src/main/kotlin/noPackage.kt @@ -0,0 +1,3 @@ +fun noPackage(): String = "Hello there" + +open class NoPackage diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/gradle.properties new file mode 100644 index 00000000..fa6c65f6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/gradle.properties @@ -0,0 +1 @@ +dokka_it_kotlin_version=1.7.20 diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/build.gradle new file mode 100644 index 00000000..2b62f963 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/build.gradle @@ -0,0 +1,14 @@ +dependencies { + implementation project(":first") +} +dokkaHtml { + dependsOn(":first:dokkaHtml") + dokkaSourceSets { + "main" { + externalDocumentationLink { + url.set(new URL("file://" + rootProject.rootDir.toPath().toAbsolutePath().resolve("first/build/dokka/html/"))) + packageListUrl.set(new URL("file://" + rootProject.rootDir.toPath().toAbsolutePath().resolve("first/build/dokka/html/first/package-list"))) + } + } + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/NoPackageClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/NoPackageClass.kt new file mode 100644 index 00000000..d2f30ef7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/NoPackageClass.kt @@ -0,0 +1 @@ +class NoPackageClass : NoPackage() diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/bar/SecondClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/bar/SecondClass.kt new file mode 100644 index 00000000..6a0c935e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/bar/SecondClass.kt @@ -0,0 +1,21 @@ +package bar +/** + * Second class in second module description [foo.FirstClass] + * @author John Doe + * @version 0.1.3 + * @param name Name description text text text. +*/ +class SecondClass(val name: String) { + val firstProperty = "propertystring" + /** + * Second property in second module description [foo.FirstSubclass] + */ + var secondProperty: String = "" + set(value) { + println("Second property not set") + } + + init { + println("InitializerBlock") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/foo/ThirdClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/foo/ThirdClass.kt new file mode 100644 index 00000000..cc24a6b7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/second/src/main/kotlin/foo/ThirdClass.kt @@ -0,0 +1,11 @@ +package foo + +/** + * Third class description + */ +open class ThirdClass{ + /** + * PropertyOne description + */ + val propertyOne: Int = 5 +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/settings.gradle.kts new file mode 100644 index 00000000..c549ccb7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/settings.gradle.kts @@ -0,0 +1,4 @@ +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-multimodule-1" +include(":first") +include(":second") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..6ce1808e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-multimodule-1" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/build.gradle new file mode 100644 index 00000000..e04e412b --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/build.gradle @@ -0,0 +1,43 @@ +import org.jetbrains.dokka.gradle.DokkaMultiModuleTask + +plugins { + id 'org.jetbrains.kotlin.jvm' + id("org.jetbrains.dokka") +} + +apply from: '../template.root.gradle.kts' + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" + dokkaPlugin "org.jetbrains.dokka:versioning-plugin:${System.getenv("DOKKA_VERSION")}" +} + + +subprojects { + apply plugin: 'org.jetbrains.kotlin.jvm' + apply plugin: 'org.jetbrains.dokka' +} + +dokkaHtmlMultiModule { + pluginsMapConfiguration.set(["org.jetbrains.dokka.versioning.VersioningPlugin": """{ "version": "1.2", "olderVersionsDir": "$projectDir/dokkas" }"""]) +} + +tasks.register('dokkaHtmlMultiModuleBaseVersion', DokkaMultiModuleTask){ + dependencies { + dokkaPlugin("org.jetbrains.dokka:all-modules-page-plugin:${System.getenv("DOKKA_VERSION")}") + dokkaPlugin("org.jetbrains.dokka:versioning-plugin:${System.getenv("DOKKA_VERSION")}") + } + outputDirectory.set(file(projectDir.toPath().resolve("dokkas").resolve("1.0"))) + pluginsMapConfiguration.set(["org.jetbrains.dokka.versioning.VersioningPlugin": """{ "version": "1.0" }"""]) + addChildTasks([project(":first"), project(":second")], "dokkaHtmlPartial") +} + +tasks.register('dokkaHtmlMultiModuleNextVersion', DokkaMultiModuleTask){ + dependencies { + dokkaPlugin("org.jetbrains.dokka:all-modules-page-plugin:${System.getenv("DOKKA_VERSION")}") + dokkaPlugin("org.jetbrains.dokka:versioning-plugin:${System.getenv("DOKKA_VERSION")}") + } + outputDirectory.set(file(projectDir.toPath().resolve("dokkas").resolve("1.1"))) + pluginsMapConfiguration.set(["org.jetbrains.dokka.versioning.VersioningPlugin": """{ "version": "1.1", "olderVersionsDir": "$projectDir/dokkas" }"""]) + addChildTasks([project(":first"), project(":second")], "dokkaHtmlPartial") +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/first/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/first/build.gradle new file mode 100644 index 00000000..e69de29b diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/first/src/main/kotlin/foo/FirstClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/first/src/main/kotlin/foo/FirstClass.kt new file mode 100644 index 00000000..93f73bf4 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/first/src/main/kotlin/foo/FirstClass.kt @@ -0,0 +1,11 @@ +package foo + +/** + * First class description + */ +open class FirstClass{ + /** + * PropertyOne description + */ + val propertyOne: Int = 5 +} \ No newline at end of file diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/gradle.properties new file mode 100644 index 00000000..731bcb72 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/gradle.properties @@ -0,0 +1,2 @@ +dokka_it_kotlin_version=1.7.20 + diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/build.gradle b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/build.gradle new file mode 100644 index 00000000..cf1d1f21 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/build.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation project(":first") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/src/main/kotlin/bar/SecondClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/src/main/kotlin/bar/SecondClass.kt new file mode 100644 index 00000000..6a0c935e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/second/src/main/kotlin/bar/SecondClass.kt @@ -0,0 +1,21 @@ +package bar +/** + * Second class in second module description [foo.FirstClass] + * @author John Doe + * @version 0.1.3 + * @param name Name description text text text. +*/ +class SecondClass(val name: String) { + val firstProperty = "propertystring" + /** + * Second property in second module description [foo.FirstSubclass] + */ + var secondProperty: String = "" + set(value) { + println("Second property not set") + } + + init { + println("InitializerBlock") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..123b9af3 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/settings.gradle.kts @@ -0,0 +1,4 @@ +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-multimodule-versioning-0" +include(":first") +include(":second") diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..dbd0ee03 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-multimodule-versioning-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/build.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/build.gradle.kts new file mode 100644 index 00000000..2cea2076 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/build.gradle.kts @@ -0,0 +1,42 @@ +import org.jetbrains.dokka.gradle.DokkaTask +import java.net.URL + +plugins { + kotlin("multiplatform") + id("org.jetbrains.dokka") +} + +apply(from = "../template.root.gradle.kts") + +kotlin { + jvm() + linuxX64("linux") + macosX64("macos") + js() + sourceSets { + val commonMain by sourceSets.getting + val linuxMain by sourceSets.getting + val macosMain by sourceSets.getting + val desktopMain by sourceSets.creating { + dependsOn(commonMain) + linuxMain.dependsOn(this) + macosMain.dependsOn(this) + } + named("commonMain") { + dependencies { + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9") + } + } + } +} + +tasks.withType().configureEach { + dokkaSourceSets { + configureEach { + externalDocumentationLink { + url.set(URL("https://kotlinlang.org/api/kotlinx.coroutines/")) + //packageListUrl.set(URL("https://kotlinlang.org/api/kotlinx.coroutines/package-list")) + } + } + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/gradle.properties b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/gradle.properties new file mode 100644 index 00000000..9d87e55a --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/gradle.properties @@ -0,0 +1,5 @@ +dokka_it_kotlin_version=1.7.20 +#these flags are enabled by default since 1.6.20. +#remove when this test is executed with Kotlin >= 1.6.20 +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/settings.gradle.kts new file mode 100644 index 00000000..1894bed8 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/settings.gradle.kts @@ -0,0 +1,2 @@ +apply(from = "../template.settings.gradle.kts") +rootProject.name = "it-multiplatform-0" diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/CommonMainClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/CommonMainClass.kt new file mode 100644 index 00000000..499a4f1e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/CommonMainClass.kt @@ -0,0 +1,8 @@ +package it.mpp0 + +/** + * This class is defined in commonMain + */ +class CommonMainClass { + fun publicFunction(): String = "public" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..e610b09a --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +expect class ExpectedClass { + val platform: String +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/coroutines.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/coroutines.kt new file mode 100644 index 00000000..8eee326f --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/commonMain/kotlin/it/mpp0/coroutines.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +import kotlinx.coroutines.CoroutineScope + +expect fun CoroutineScope.runBlocking(block: suspend () -> T) : T diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/CPointerExtension.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/CPointerExtension.kt new file mode 100644 index 00000000..342a749e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/CPointerExtension.kt @@ -0,0 +1,11 @@ +package it.mpp0 + +import kotlinx.cinterop.CPointed +import kotlinx.cinterop.CPointer + +/** + * Will print the raw value + */ +fun CPointer.customExtension() { + println(this.rawValue) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..19070a96 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/desktopMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +actual class ExpectedClass { + actual val platform: String = "linux" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..1e4a6d22 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +actual class ExpectedClass { + actual val platform: String = "js" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/runBlocking.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/runBlocking.kt new file mode 100644 index 00000000..03b3b0ea --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jsMain/kotlin/it/mpp0/runBlocking.kt @@ -0,0 +1,7 @@ +package it.mpp0 + +import kotlinx.coroutines.CoroutineScope + +actual fun CoroutineScope.runBlocking(block: suspend () -> T): T { + TODO("Not yet implemented") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..6de30de6 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,11 @@ +package it.mpp0 + +actual class ExpectedClass { + actual val platform: String = "jvm" + + /** + * This function can only be used by JVM consumers + */ + fun jvmOnlyFunction() = Unit + +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/JvmOnlyClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/JvmOnlyClass.kt new file mode 100644 index 00000000..21101a89 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/JvmOnlyClass.kt @@ -0,0 +1,13 @@ +@file:Suppress("unused") + +package it.mpp0 + +/** + * This class can only be used by JVM consumers + */ +class JvmOnlyClass { + /** + * This function can only be used by JVM consumers + */ + fun myJvm() = println("HI") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/runBlocking.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/runBlocking.kt new file mode 100644 index 00000000..03b3b0ea --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/jvmMain/kotlin/it/mpp0/runBlocking.kt @@ -0,0 +1,7 @@ +package it.mpp0 + +import kotlinx.coroutines.CoroutineScope + +actual fun CoroutineScope.runBlocking(block: suspend () -> T): T { + TODO("Not yet implemented") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/CPointerExtension.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/CPointerExtension.kt new file mode 100644 index 00000000..342a749e --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/CPointerExtension.kt @@ -0,0 +1,11 @@ +package it.mpp0 + +import kotlinx.cinterop.CPointed +import kotlinx.cinterop.CPointer + +/** + * Will print the raw value + */ +fun CPointer.customExtension() { + println(this.rawValue) +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..19070a96 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +actual class ExpectedClass { + actual val platform: String = "linux" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/runBlocking.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/runBlocking.kt new file mode 100644 index 00000000..b56fb80a --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/linuxMain/kotlin/it/mpp0/runBlocking.kt @@ -0,0 +1,13 @@ +package it.mpp0 + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.async + +actual fun CoroutineScope.runBlocking(block: suspend () -> T): T { + TODO("Not yet implemented") +} + +fun CoroutineScope.customAsync(block: suspend () -> T): Deferred { + return async { block() } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/ExpectedClass.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/ExpectedClass.kt new file mode 100644 index 00000000..7a4a8f75 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/ExpectedClass.kt @@ -0,0 +1,5 @@ +package it.mpp0 + +actual class ExpectedClass { + actual val platform: String = "macos" +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/runBlocking.kt b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/runBlocking.kt new file mode 100644 index 00000000..03b3b0ea --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/src/macosMain/kotlin/it/mpp0/runBlocking.kt @@ -0,0 +1,7 @@ +package it.mpp0 + +import kotlinx.coroutines.CoroutineScope + +actual fun CoroutineScope.runBlocking(block: suspend () -> T): T { + TODO("Not yet implemented") +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.root.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.root.gradle.kts new file mode 100644 index 00000000..f63c28e7 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.root.gradle.kts @@ -0,0 +1,23 @@ +allprojects { + repositories { + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenLocal() + mavenCentral() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") { + content { + includeGroup("org.jetbrains.kotlinx") + } + } + } +} + +afterEvaluate { + logger.quiet("Gradle version: ${gradle.gradleVersion}") + logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}") + properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion -> + logger.quiet("Android version: $androidVersion") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.settings.gradle.kts new file mode 100644 index 00000000..8cb1f2d0 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokka/template.settings.gradle.kts @@ -0,0 +1,38 @@ +@file:Suppress("LocalVariableName", "UnstableApiUsage") + +pluginManagement { + val dokka_it_kotlin_version: String by settings + val dokka_it_android_gradle_plugin_version: String? by settings + + plugins { + id("org.jetbrains.kotlin.js") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version + id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version + } + + resolutionStrategy { + eachPlugin { + if (requested.id.id == "org.jetbrains.dokka") { + useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT") + } + + if (requested.id.id == "com.android.library") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:$dokka_it_android_gradle_plugin_version") + } + } + } + repositories { + mavenLocal() + maven("https://cache-redirector.jetbrains.com/jcenter.bintray.com") + mavenCentral() + gradlePluginPortal() + google() + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-eap") + maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev") + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokkatoo/settings.gradle.kts b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokkatoo/settings.gradle.kts new file mode 100644 index 00000000..3e4d074a --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokkatoo/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "it-multiplatform-0" + +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} + +@Suppress("UnstableApiUsage") +dependencyResolutionManagement { + repositories { + mavenCentral() + maven(providers.gradleProperty("testMavenRepo")) + } +} diff --git a/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt new file mode 100644 index 00000000..85d4ead3 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/GradleExampleTest.kt @@ -0,0 +1,149 @@ +package dev.adamko.dokkatoo.tests.examples + +import dev.adamko.dokkatoo.utils.* +import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.withClue +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.file.shouldHaveSameStructureAndContentAs +import io.kotest.matchers.file.shouldHaveSameStructureAs +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain +import java.io.File +import kotlin.text.Regex.Companion.escapeReplacement + +class GradleExampleTest : FunSpec({ + + val dokkaProject = initDokkaProject( + projectTestTempDir.resolve("it/examples/gradle-example/dokka").toFile() + ) + + val dokkatooProject = initDokkatooProject( + projectTestTempDir.resolve("it/examples/gradle-example/dokkatoo").toFile() + ) + + context("compare dokka and dokkatoo HTML generators") { + test("expect dokka can generate HTML") { + val dokkaBuild = dokkaProject.runner + .withArguments( + "clean", + "dokkaHtml", + "--stacktrace", + "--info", + ) + .forwardOutput() + .build() + + dokkaBuild.output shouldContain "BUILD SUCCESSFUL" + dokkaBuild.output shouldContain "Generation completed successfully" + } + + test("expect dokkatoo can generate HTML") { + val dokkatooBuild = dokkatooProject.runner + .withArguments( + "clean", + ":dokkatooGeneratePublicationHtml", + "--stacktrace", + "--info", + ) + .forwardOutput() + .build() + + dokkatooBuild.output shouldContain "BUILD SUCCESSFUL" + dokkatooBuild.output shouldContain "Generation completed successfully" + } + + context("expect dokka and dokkatoo HTML is the same") { + val dokkaHtmlDir = dokkaProject.projectDir.resolve("build/dokka/html") + val dokkatooHtmlDir = dokkatooProject.projectDir.resolve("build/dokka/html") + + test("expect file trees are the same") { + val expectedFileTree = dokkaHtmlDir.toTreeString() + val actualFileTree = dokkatooHtmlDir.toTreeString() + println((actualFileTree to expectedFileTree).sideBySide()) + expectedFileTree shouldBe actualFileTree + } + + test("expect directories are the same") { + dokkatooHtmlDir.toFile().shouldHaveSameStructureAs(dokkaHtmlDir.toFile()) + dokkatooHtmlDir.toFile().shouldHaveSameStructureAndContentAs(dokkaHtmlDir.toFile()) + } + } + } + context("Gradle caching") { + test("expect Dokkatoo is compatible with Gradle Build Cache") { + val dokkatooBuild = dokkatooProject.runner + .withArguments( + "clean", + ":dokkatooGeneratePublicationHtml", + "--info", + "--stacktrace", + ) + .forwardOutput() + .build() + + dokkatooBuild.output shouldContain "BUILD SUCCESSFUL" + dokkatooBuild.output shouldContain "Generation completed successfully" + + dokkatooProject.runner.withArguments( + ":dokkatooGeneratePublicationHtml", + "--stacktrace", + "--info", + "--build-cache", + ).forwardOutput() + .build().should { dokkatooBuildCache -> + + dokkatooBuildCache.output shouldContainAll listOf( + "> Task :prepareDokkatooParametersHtml UP-TO-DATE", + "> Task :dokkatooGeneratePublicationHtml UP-TO-DATE", + "BUILD SUCCESSFUL", + "2 actionable tasks: 2 up-to-date", + ) + withClue("Dokka Generator should not be triggered, so check it doesn't log anything") { + dokkatooBuildCache.output shouldNotContain "Generation completed successfully" + } + } + } + + xtest("expect Dokkatoo is compatible with Gradle Configuration Cache") { + val dokkatooBuild = dokkatooProject.runner + .withArguments( + "clean", + ":dokkatooGeneratePublicationHtml", + "--stacktrace", + "--info", + "--no-build-cache", + "--configuration-cache", + ) + .forwardOutput() + .build() + + dokkatooBuild.output shouldContain "BUILD SUCCESSFUL" + } + } +}) + + +private fun initDokkaProject( + destinationDir: File, +): GradleProjectTest { + return GradleProjectTest(destinationDir.toPath()).apply { + copyExampleProject("gradle-example/dokka") + + val dokkaVersion = "1.7.20" + buildGradleKts = buildGradleKts + .replace( + Regex("""id\("org\.jetbrains\.dokka"\) version \("[\d.]+"\)"""), + escapeReplacement("""id("org.jetbrains.dokka") version "$dokkaVersion""""), + ) + } +} + +private fun initDokkatooProject( + destinationDir: File, +): GradleProjectTest { + return GradleProjectTest(destinationDir.toPath()).apply { + copyExampleProject("gradle-example/dokkatoo") + } +} diff --git a/modules/dokkatoo-plugin/src/testIntegration/kotlin/examples/DokkaMultimoduleExampleTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt similarity index 64% rename from modules/dokkatoo-plugin/src/testIntegration/kotlin/examples/DokkaMultimoduleExampleTest.kt rename to modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt index 5a72b496..c04108cd 100644 --- a/modules/dokkatoo-plugin/src/testIntegration/kotlin/examples/DokkaMultimoduleExampleTest.kt +++ b/modules/dokkatoo-plugin-integration-tests/src/testExamples/kotlin/MultimoduleExampleTest.kt @@ -1,7 +1,6 @@ -package dev.adamko.dokkatoo.it.examples +package dev.adamko.dokkatoo.tests.examples import dev.adamko.dokkatoo.utils.* -import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.dokkaSrcExampleProjectsDir import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir import io.kotest.assertions.withClue import io.kotest.core.spec.style.FunSpec @@ -14,14 +13,14 @@ import io.kotest.matchers.string.shouldNotContain import java.io.File import kotlin.text.Regex.Companion.escapeReplacement -class DokkaMultimoduleExampleTest : FunSpec({ +class MultimoduleExampleTest : FunSpec({ val dokkaProject = initDokkaProject( - projectTestTempDir.resolve("it/examples/dokka-multimodule-example").toFile() + projectTestTempDir.resolve("it/examples/multimodule-example/dokka").toFile() ) val dokkatooProject = initDokkatooProject( - projectTestTempDir.resolve("it/examples/dokkatoo-multimodule-example").toFile() + projectTestTempDir.resolve("it/examples/multimodule-example/dokkatoo").toFile() ) context("compare dokka and dokkatoo HTML generators") { @@ -126,19 +125,11 @@ class DokkaMultimoduleExampleTest : FunSpec({ } }) - -private fun GradleProjectTest.copyExampleProject() { - dokkaSrcExampleProjectsDir - .resolve("dokka-multimodule-example") - .toFile() - .copyRecursively(projectDir.toFile(), overwrite = true) { _, _ -> OnErrorAction.SKIP } -} - private fun initDokkaProject( destinationDir: File, ): GradleProjectTest { return GradleProjectTest(destinationDir.toPath()).apply { - copyExampleProject() + copyExampleProject("multimodule-example/dokka") val dokkaVersion = "1.7.20" settingsGradleKts = settingsGradleKts @@ -201,100 +192,6 @@ private fun initDokkatooProject( destinationDir: File, ): GradleProjectTest { return GradleProjectTest(destinationDir.toPath()).apply { - copyExampleProject() - - settingsGradleKts = """ - |rootProject.name = "dokkatoo-multimodule-example" - | - |pluginManagement { - | plugins { - | kotlin("jvm") version "1.7.20" - | } - | repositories { - | gradlePluginPortal() - | mavenCentral() - | maven(file("$testMavenRepoRelativePath")) - | } - |} - | - |@Suppress("UnstableApiUsage") - |dependencyResolutionManagement { - | repositories { - | mavenCentral() - | maven(file("$testMavenRepoRelativePath")) - | } - |} - | - |include(":parentProject") - |include(":parentProject:childProjectA") - |include(":parentProject:childProjectB") - | - """.trimMargin() - - - file("build.gradle.kts").toFile().delete() - - dir("parentProject") { - - buildGradleKts = """ - |plugins { - | kotlin("jvm") version "1.7.20" apply false - | id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" - |} - | - |dependencies { - | dokkatoo(project(":parentProject:childProjectA")) - | dokkatoo(project(":parentProject:childProjectB")) - | dokkatooPluginHtml("org.jetbrains.dokka:all-modules-page-plugin:1.7.20") - | dokkatooPluginHtml("org.jetbrains.dokka:templating-plugin:1.7.20") - |} - | - """.trimMargin() - - dir("childProjectA") { - buildGradleKts = """ - |plugins { - | kotlin("jvm") - | id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" - |} - | - |dokkatoo { - | dokkatooSourceSets.configureEach { - | includes.from("Module.md") - | } - | modulePath.set("childProjectA") // match the original dokka default - |} - | - |tasks.withType().configureEach { - | dokkaSourceSets.configureEach { - | sourceSetScope.set(":parentProject:childProjectA:dokkaHtmlPartial") - | } - |} - | - """.trimMargin() - } - dir("childProjectB") { - buildGradleKts = """ - |plugins { - | kotlin("jvm") - | id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" - |} - | - |dokkatoo { - | dokkatooSourceSets.configureEach { - | includes.from("Module.md") - | } - | modulePath.set("childProjectB") // match the original dokka default - |} - | - |tasks.withType().configureEach { - | dokkaSourceSets.configureEach { - | sourceSetScope.set(":parentProject:childProjectB:dokkaHtmlPartial") - | } - |} - | - """.trimMargin() - } - } + copyExampleProject("multimodule-example/dokkatoo") } } diff --git a/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt b/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt new file mode 100644 index 00000000..9b9a3a73 --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/src/testFixtures/kotlin/templateProjectUtils.kt @@ -0,0 +1,17 @@ +package dev.adamko.dokkatoo.utils + + +fun GradleProjectTest.copyExampleProject(path: String) { + GradleProjectTest.exampleProjectsDir + .resolve(path) + .toFile() + .copyRecursively(projectDir.toFile(), overwrite = true) { _, _ -> OnErrorAction.SKIP } +} + + +fun GradleProjectTest.copyIntegrationTestProject(path: String) { + GradleProjectTest.integrationTestProjectsDir + .resolve(path) + .toFile() + .copyRecursively(projectDir.toFile(), overwrite = true) { _, _ -> OnErrorAction.SKIP } +} diff --git a/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt new file mode 100644 index 00000000..e77e9fac --- /dev/null +++ b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt @@ -0,0 +1,155 @@ +package dev.adamko.dokkatoo.tests.integration + +import dev.adamko.dokkatoo.utils.* +import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.integrationTestProjectsDir +import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir +import io.kotest.assertions.withClue +import io.kotest.matchers.file.shouldHaveSameStructureAndContentAs +import io.kotest.matchers.file.shouldHaveSameStructureAs +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain +import java.io.File +import org.junit.jupiter.api.Test + +/** + * Integration test for the `it-basic` project in Dokka + * + * Runs Dokka & Dokkatoo, and compares the resulting HTML site. + */ +class BasicProjectIntegrationTest { + + @Test + fun `test basic project`() { + + val basicProjectSrcDir = integrationTestProjectsDir.resolve("it-basic/dokka") + + val tempDir = projectTestTempDir.resolve("it/it-basic").toFile() + + val dokkaDir = tempDir.resolve("dokka") + basicProjectSrcDir.toFile().copyRecursively(dokkaDir, overwrite = true) { _, _ -> OnErrorAction.SKIP } + + val dokkaProject = initDokkaProject(dokkaDir) + + val dokkaBuild = dokkaProject.runner + .withArguments( + "clean", + "dokkaHtml", + "--stacktrace", + "--info", + ) + .forwardOutput() + .withEnvironment( + "DOKKA_VERSION" to "1.7.20", + ) + .build() + + dokkaBuild.output shouldContain "BUILD SUCCESSFUL" + dokkaBuild.output shouldContain "Generation completed successfully" + + val dokkatooDir = tempDir.resolve("dokkatoo") + + val dokkatooProject = initDokkatooProject(dokkatooDir) + + val dokkatooBuild = dokkatooProject.runner + .withArguments( + "clean", + "dokkatooGeneratePublicationHtml", + "--stacktrace", + "--info", + ) + .forwardOutput() + .build() + + dokkatooBuild.output shouldContain "BUILD SUCCESSFUL" + dokkatooBuild.output shouldContain "Generation completed successfully" + + val dokkaHtmlDir = dokkaProject.projectDir.resolve("build/dokka/html") + val dokkatooHtmlDir = dokkatooProject.projectDir.resolve("build/dokka/html") + + val expectedFileTree = dokkaHtmlDir.toTreeString() + val actualFileTree = dokkatooHtmlDir.toTreeString() + println((actualFileTree to expectedFileTree).sideBySide()) + expectedFileTree shouldBe actualFileTree + + dokkatooHtmlDir.toFile().shouldHaveSameStructureAs(dokkaHtmlDir.toFile()) + dokkatooHtmlDir.toFile().shouldHaveSameStructureAndContentAs(dokkaHtmlDir.toFile()) + + withClue("Dokkatoo tasks should be cacheable") { + dokkatooProject.runner.withArguments( + "dokkatooGeneratePublicationHtml", + "--stacktrace", + "--info", + "--build-cache", + ).forwardOutput() + .build().should { buildResult -> + buildResult.output shouldContainAll listOf( + "Task :prepareDokkatooParametersHtml UP-TO-DATE", + "Task :dokkatooGeneratePublicationHtml UP-TO-DATE", + ) + withClue("Dokka Generator should not be triggered, so check it doesn't log anything") { + buildResult.output shouldNotContain "Generation completed successfully" + } + } + } + + // TODO test configuration cache +// withClue("Dokkatoo tasks should be configuration-cache compatible") { +// val dokkatooBuildCache = +// dokkatooProject.runner.withArguments( +// "clean", +// "dokkatooGenerate", +// "--stacktrace", +// "--info", +// "--no-build-cache", +// "--configuration-cache", +// ).forwardOutput() +// .build() +// +// dokkatooBuildCache.output.shouldContainAll( +// "Task :prepareDokkatooParametersHtml UP-TO-DATE", +// "Task :dokkatooGeneratePublicationHtml UP-TO-DATE", +// ) +// } + } +} + + +private fun initDokkaProject( + destinationDir: File, +): GradleProjectTest { + return GradleProjectTest(destinationDir.toPath()).apply { + copyIntegrationTestProject("it-basic/dokka") + + buildGradleKts = buildGradleKts + .replace( + // no idea why this needs to be changed + """file("../customResources/""", + """file("./customResources/""", + ) + + // update relative paths to the template files - they're now in the same directory + settingsGradleKts = settingsGradleKts + .replace( + """../template.settings.gradle.kts""", + """./template.settings.gradle.kts""", + ) + buildGradleKts = buildGradleKts + .replace( + """../template.root.gradle.kts""", + """./template.root.gradle.kts""", + ) + var templateGradleSettings: String by projectFile("template.settings.gradle.kts") + templateGradleSettings = templateGradleSettings + .replace("for-integration-tests-SNAPSHOT", "1.7.20") + } +} + +private fun initDokkatooProject( + destinationDir: File, +): GradleProjectTest { + return GradleProjectTest(destinationDir.toPath()).apply { + copyIntegrationTestProject("it-basic/dokkatoo") + } +} diff --git a/modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/childProjectA.json b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/childProjectA.json similarity index 100% rename from modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/childProjectA.json rename to modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/childProjectA.json diff --git a/modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/childProjectB.json b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/childProjectB.json similarity index 100% rename from modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/childProjectB.json rename to modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/childProjectB.json diff --git a/modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/parentProject.json b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/parentProject.json similarity index 100% rename from modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/parentProject.json rename to modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/parentProject.json diff --git a/modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/readme.md b/modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/readme.md similarity index 100% rename from modules/dokkatoo-plugin/src/testIntegration/resources/it/example/dokka-multi-module/readme.md rename to modules/dokkatoo-plugin-integration-tests/src/testIntegration/resources/it/example/dokka-multi-module/readme.md diff --git a/modules/dokkatoo-plugin/build.gradle.kts b/modules/dokkatoo-plugin/build.gradle.kts index b2cd1e78..c061c79a 100644 --- a/modules/dokkatoo-plugin/build.gradle.kts +++ b/modules/dokkatoo-plugin/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { val jacksonVersion = "2.12.7" testFixturesImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion") - kotlinDokkaSource(projects.externals) +// kotlinDokkaSource(projects.externals) // don't define test dependencies here, instead define them in the testing.suites {} configuration below } @@ -167,17 +167,17 @@ testing.suites { testTask.configure { shouldRunAfter(test, testFunctional) - dependsOn(project.configurations.kotlinDokkaSource) - - inputs.property("dokkaSourceDir", - project.configurations.kotlinDokkaSource.map { dokkaSrcConf -> - val files = dokkaSrcConf.incoming.artifactView { lenient(true) }.files - files.singleOrNull()?.absolutePath - ?: error("could not get Dokka source code directory from kotlinDokkaSource configuration. Got ${files.count()} files: $files") - } - ) - - systemProperty("dokkaSourceDir", inputs.properties["dokkaSourceDir"]!!) +// dependsOn(project.configurations.kotlinDokkaSource) + +// inputs.property("dokkaSourceDir", +// project.configurations.kotlinDokkaSource.map { dokkaSrcConf -> +// val files = dokkaSrcConf.incoming.artifactView { lenient(true) }.files +// files.singleOrNull()?.absolutePath +// ?: error("could not get Dokka source code directory from kotlinDokkaSource configuration. Got ${files.count()} files: $files") +// } +// ) +// +// systemProperty("dokkaSourceDir", inputs.properties["dokkaSourceDir"]!!) } } } diff --git a/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt b/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt index 5b44442a..81fe8313 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt @@ -92,7 +92,11 @@ abstract class DokkatooBasePlugin @Inject constructor( target.tasks.withType().configureEach { cacheDirectory.convention(dokkatooExtension.dokkatooCacheDirectory) - enableWorkerDebug.convention(false) + workerDebugEnabled.convention(false) + // increase memory - DokkaGenerator is hungry https://github.com/Kotlin/dokka/issues/1405 + workerMinHeapSize.convention("256m") + workerMaxHeapSize.convention("1g") + workerJvmArgs.set(listOf("-XX:MaxMetaspaceSize=512m")) } target.tasks.withType().all task@{ @@ -111,7 +115,6 @@ abstract class DokkatooBasePlugin @Inject constructor( moduleVersion.convention(providers.provider { project.version.toString() }) modulePath.convention(project.pathAsFilePath()) - dokkatooCacheDirectory.convention(null) sourceSetScopeDefault.convention(project.path) dokkatooPublicationDirectory.convention(layout.buildDirectory.dir("dokka")) dokkatooModuleDirectory.convention(layout.buildDirectory.dir("dokka-module")) diff --git a/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceLinkGradleBuilder.kt b/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceLinkGradleBuilder.kt index 784cdb87..c46b64da 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceLinkGradleBuilder.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceLinkGradleBuilder.kt @@ -68,6 +68,20 @@ abstract class DokkaSourceLinkGradleBuilder : @get:Input abstract val remoteUrl: Property + /** + * Set the value of [remoteUrl]. + * + * @param[value] will be converted to a [URL] + */ + fun remoteUrl(value: String) = remoteUrl.set(URL(value)) + + /** + * Set the value of [remoteUrl]. + * + * @param[value] will be converted to a [URL] + */ + fun remoteUrl(value: Provider) = remoteUrl.set(value.map(::URL)) + /** * Suffix used to append source code line number to the URL. This will help readers navigate * not only to the file, but to the specific line number of the declaration. diff --git a/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooGenerateTask.kt b/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooGenerateTask.kt index c71de9c0..7288b301 100644 --- a/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooGenerateTask.kt +++ b/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooGenerateTask.kt @@ -9,11 +9,13 @@ import kotlinx.serialization.json.decodeFromStream import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.* import org.gradle.api.tasks.PathSensitivity.NAME_ONLY import org.gradle.api.tasks.PathSensitivity.RELATIVE import org.gradle.kotlin.dsl.submit +import org.gradle.process.JavaForkOptions import org.gradle.workers.WorkerExecutor /** @@ -55,9 +57,18 @@ abstract class DokkatooGenerateTask @Inject constructor( @get:PathSensitive(RELATIVE) abstract val dokkaModuleFiles: ConfigurableFileCollection + /** @see JavaForkOptions.getDebug */ @get:Input - @get:Optional - abstract val enableWorkerDebug: Property + abstract val workerDebugEnabled: Property + /** @see JavaForkOptions.getMinHeapSize */ + @get:Input + abstract val workerMinHeapSize: Property + /** @see JavaForkOptions.getMaxHeapSize */ + @get:Input + abstract val workerMaxHeapSize: Property + /** @see JavaForkOptions.jvmArgs */ + @get:Input + abstract val workerJvmArgs: ListProperty enum class GenerationType { MODULE, @@ -68,8 +79,7 @@ abstract class DokkatooGenerateTask @Inject constructor( @OptIn(ExperimentalSerializationApi::class) // jsonMapper.decodeFromStream fun generateDocumentation() { val dokkaParametersJsonFile = dokkaParametersJson.get().asFile - val generationType = - generationType.orNull ?: error("GenerationType is required, but no value was provided") + val generationType: GenerationType = generationType.get() val dokkaParameters = jsonMapper.decodeFromStream( DokkaParametersKxs.serializer(), @@ -95,7 +105,11 @@ abstract class DokkatooGenerateTask @Inject constructor( classpath.from(runtimeClasspath) forkOptions { defaultCharacterEncoding = "UTF-8" - debug = enableWorkerDebug.getOrElse(false) + minHeapSize = workerMinHeapSize.get() + maxHeapSize = workerMinHeapSize.get() + enableAssertions = true + debug = workerDebugEnabled.get() + jvmArgs = workerJvmArgs.get() } } diff --git a/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt b/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt index be2bd799..191f985b 100644 --- a/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt +++ b/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt @@ -17,12 +17,11 @@ import org.intellij.lang.annotations.Language class GradleProjectTest( override val projectDir: Path, ) : ProjectDirectoryScope { + constructor( testProjectName: String, baseDir: Path = funcTestTempDir, - ) : this( - projectDir = baseDir.resolve(testProjectName), - ) + ) : this(projectDir = baseDir.resolve(testProjectName)) val runner: GradleRunner = GradleRunner.create().withProjectDir(projectDir.toFile()) @@ -44,13 +43,9 @@ class GradleProjectTest( private val dokkaSourceDir: Path by systemProperty(Paths::get) /** Dokka Source directory that contains Gradle projects used for integration tests */ - val dokkaSrcIntegrationTestProjectsDir: Path by lazy { - dokkaSourceDir.resolve("integration-tests/gradle/projects") - } + val integrationTestProjectsDir: Path by systemProperty(Paths::get) /** Dokka Source directory that contains example Gradle projects */ - val dokkaSrcExampleProjectsDir: Path by lazy { - dokkaSourceDir.resolve("examples/gradle") - } + val exampleProjectsDir: Path by systemProperty(Paths::get) private fun systemProperty( convert: (String) -> T, @@ -64,17 +59,17 @@ class GradleProjectTest( } -/** - * Load a project from the [GradleProjectTest.dokkaSrcIntegrationTestProjectsDir] - */ -fun gradleKtsProjectIntegrationTest( - testProjectName: String, - build: GradleProjectTest.() -> Unit, -): GradleProjectTest = - GradleProjectTest( - baseDir = GradleProjectTest.dokkaSrcIntegrationTestProjectsDir, - testProjectName = testProjectName, - ).apply(build) +///** +// * Load a project from the [GradleProjectTest.dokkaSrcIntegrationTestProjectsDir] +// */ +//fun gradleKtsProjectIntegrationTest( +// testProjectName: String, +// build: GradleProjectTest.() -> Unit, +//): GradleProjectTest = +// GradleProjectTest( +// baseDir = GradleProjectTest.dokkaSrcIntegrationTestProjectsDir, +// testProjectName = testProjectName, +// ).apply(build) /** diff --git a/modules/dokkatoo-plugin/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt b/modules/dokkatoo-plugin/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt deleted file mode 100644 index efaa3a39..00000000 --- a/modules/dokkatoo-plugin/src/testIntegration/kotlin/BasicProjectIntegrationTest.kt +++ /dev/null @@ -1,367 +0,0 @@ -package dev.adamko.dokkatoo.it - -import dev.adamko.dokkatoo.utils.* -import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.dokkaSrcIntegrationTestProjectsDir -import dev.adamko.dokkatoo.utils.GradleProjectTest.Companion.projectTestTempDir -import io.kotest.assertions.withClue -import io.kotest.matchers.file.shouldHaveSameStructureAndContentAs -import io.kotest.matchers.file.shouldHaveSameStructureAs -import io.kotest.matchers.should -import io.kotest.matchers.shouldBe -import io.kotest.matchers.string.shouldContain -import io.kotest.matchers.string.shouldNotContain -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.DokkaConfigurationImpl -import org.junit.jupiter.api.Test - -/** - * Integration test for the `it-basic` project in Dokka - * - * Runs Dokka & Dokkatoo, and compares the resulting HTML site. - */ -class BasicProjectIntegrationTest { - - @Test - fun `test basic project`() { - - val basicProjectSrcDir = - dokkaSrcIntegrationTestProjectsDir.resolve("it-basic").toFile() - val templateRootGradleKts = - dokkaSrcIntegrationTestProjectsDir.resolve("template.root.gradle.kts").toFile() - val templateSettingsGradleKts = - dokkaSrcIntegrationTestProjectsDir.resolve("template.settings.gradle.kts").toFile() - - val tempDir = projectTestTempDir.resolve("it/it-basic").toFile() - - val dokkaDir = tempDir.resolve("dokka") - basicProjectSrcDir.copyRecursively(dokkaDir, overwrite = true) { _, _ -> OnErrorAction.SKIP } - templateRootGradleKts.copyInto(directory = dokkaDir, overwrite = true) - templateSettingsGradleKts.copyInto(directory = dokkaDir, overwrite = true) - - val dokkaProject = GradleProjectTest(dokkaDir.toPath()).apply { - buildGradleKts = buildGradleKts - .replace( - // no idea why this needs to be changed - """file("../customResources/""", - """file("./customResources/""", - ) - - // update relative paths to the template files - they're now in the same directory - settingsGradleKts = settingsGradleKts - .replace( - """../template.settings.gradle.kts""", - """./template.settings.gradle.kts""", - ) - buildGradleKts = buildGradleKts - .replace( - """../template.root.gradle.kts""", - """./template.root.gradle.kts""", - ) - var templateGradleSettings: String by projectFile("template.settings.gradle.kts") - templateGradleSettings = templateGradleSettings - .replace("for-integration-tests-SNAPSHOT", "1.7.20") - - } - - val dokkaBuild = dokkaProject.runner - .withArguments( - "clean", - "dokkaHtml", - "--stacktrace", - "--info", - ) - .forwardOutput() - .withEnvironment( - "DOKKA_VERSION" to "1.7.20", - ) - .build() - - dokkaBuild.output shouldContain "BUILD SUCCESSFUL" - dokkaBuild.output shouldContain "Generation completed successfully" - - val dokkatooDir = tempDir.resolve("dokkatoo") - basicProjectSrcDir.copyRecursively(dokkatooDir, overwrite = true) { _, _ -> OnErrorAction.SKIP } - - val dokkatooProject = GradleProjectTest(dokkatooDir.toPath()).apply { - buildGradleKts = """ -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.gradle.kotlinSourceSet - -plugins { - kotlin("jvm") version "1.7.20" - id("dev.adamko.dokkatoo") version "0.0.1-SNAPSHOT" -} - -version = "1.7.20-SNAPSHOT" - -dependencies { - implementation(kotlin("stdlib")) - testImplementation(kotlin("test-junit")) -} - -dokkatoo { - moduleName.set("Basic Project") - dokkatooSourceSets.configureEach { - documentedVisibilities( - DokkaConfiguration.Visibility.PUBLIC, - DokkaConfiguration.Visibility.PROTECTED, - ) - suppressedFiles.from(file("src/main/kotlin/it/suppressedByPath")) - perPackageOption { - matchingRegex.set("it.suppressedByPackage.*") - suppress.set(true) - } - perPackageOption { - matchingRegex.set("it.overriddenVisibility.*") - documentedVisibilities.set( - setOf(DokkaConfiguration.Visibility.PRIVATE) - ) - } - sourceLink { - localDirectory.set(file("src/main")) - remoteUrl.set( - uri( - "https://github.com/Kotlin/dokka/tree/master/integration-tests/gradle/projects/it-basic/src/main" - ).toURL() - ) - } - } - dokkatooPublications.configureEach { - suppressObviousFunctions.set(true) - pluginsConfiguration.create("org.jetbrains.dokka.base.DokkaBase") { - serializationFormat.set(DokkaConfiguration.SerializationFormat.JSON) - values.set( - ${"\"\"\""} - { - "customStyleSheets": [ - "${'$'}{file("./customResources/logo-styles.css").invariantSeparatorsPath}", - "${'$'}{file("./customResources/custom-style-to-add.css").invariantSeparatorsPath}" - ], - "customAssets": [ - "${'$'}{file("./customResources/custom-resource.svg").invariantSeparatorsPath}" - ] - } - ${"\"\"\""}.trimIndent() - ) - } - suppressObviousFunctions.set(false) - } -} - -tasks.withType().configureEach { - dokkaSourceSets.configureEach { - sourceSetScope.set(":dokkaHtml") - } -} - -""".trimIndent() - - settingsGradleKts = """ -rootProject.name = "dokkatoo-it-basic" - -pluginManagement { - repositories { - gradlePluginPortal() - mavenCentral() - maven(file("$testMavenRepoRelativePath")) - } -} - -@Suppress("UnstableApiUsage") -dependencyResolutionManagement { - repositories { - mavenCentral() - maven(file("$testMavenRepoRelativePath")) - } -} - -""".trimIndent() - } - - val dokkatooBuild = dokkatooProject.runner - .withArguments( - "clean", - "dokkatooGeneratePublicationHtml", - "--stacktrace", - "--info", - ) - .forwardOutput() - .build() - - dokkatooBuild.output shouldContain "BUILD SUCCESSFUL" - dokkatooBuild.output shouldContain "Generation completed successfully" - - val dokkaHtmlDir = dokkaProject.projectDir.resolve("build/dokka/html") - val dokkatooHtmlDir = dokkatooProject.projectDir.resolve("build/dokka/html") - - val expectedFileTree = dokkaHtmlDir.toTreeString() - val actualFileTree = dokkatooHtmlDir.toTreeString() - println((actualFileTree to expectedFileTree).sideBySide()) - expectedFileTree shouldBe actualFileTree - - dokkatooHtmlDir.toFile().shouldHaveSameStructureAs(dokkaHtmlDir.toFile()) - dokkatooHtmlDir.toFile().shouldHaveSameStructureAndContentAs(dokkaHtmlDir.toFile()) - - withClue("Dokkatoo tasks should be cacheable") { - dokkatooProject.runner.withArguments( - "dokkatooGeneratePublicationHtml", - "--stacktrace", - "--info", - "--build-cache", - ).forwardOutput() - .build().should { buildResult -> - buildResult.output shouldContainAll listOf( - "Task :prepareDokkatooParametersHtml UP-TO-DATE", - "Task :dokkatooGeneratePublicationHtml UP-TO-DATE", - ) - withClue("Dokka Generator should not be triggered, so check it doesn't log anything") { - buildResult.output shouldNotContain "Generation completed successfully" - } - } - } - - // TODO test configuration cache -// withClue("Dokkatoo tasks should be configuration-cache compatible") { -// val dokkatooBuildCache = -// dokkatooProject.runner.withArguments( -// "clean", -// "dokkatooGenerate", -// "--stacktrace", -// "--info", -// "--no-build-cache", -// "--configuration-cache", -// ).forwardOutput() -// .build() -// -// dokkatooBuildCache.output.shouldContainAll( -// "Task :prepareDokkatooParametersHtml UP-TO-DATE", -// "Task :dokkatooGeneratePublicationHtml UP-TO-DATE", -// ) -// } - } -} - - -private val expectedDokkaConf: DokkaConfiguration = parseJson( -// language=json - """ -{ - "moduleName": "Basic Project", - "moduleVersion": "1.7.20-SNAPSHOT", - "outputDir": ".../build/dokka/html", - "cacheRoot": null, - "offlineMode": false, - "sourceSets": [ - { - "displayName": "jvm", - "sourceSetID": { - "scopeId": ":dokkaHtml", - "sourceSetName": "main" - }, - "classpath": [ - ".../kotlin-stdlib-1.7.20.jar", - ".../kotlin-stdlib-common-1.7.20.jar", - ".../annotations-13.0.jar" - ], - "sourceRoots": [ - ".../src/main/kotlin", - ".../src/main/java" - ], - "dependentSourceSets": [], - "samples": [], - "includes": [], - "includeNonPublic": false, - "reportUndocumented": false, - "skipEmptyPackages": true, - "skipDeprecated": false, - "jdkVersion": 8, - "sourceLinks": [ - { - "localDirectory": ".../src/main", - "remoteUrl": "https://github.com/Kotlin/dokka/tree/master/integration-tests/gradle/projects/it-basic/src/main", - "remoteLineSuffix": "#L" - } - ], - "perPackageOptions": [ - { - "matchingRegex": "it.suppressedByPackage.*", - "includeNonPublic": false, - "reportUndocumented": false, - "skipDeprecated": false, - "suppress": true, - "documentedVisibilities": [ - "PUBLIC" - ] - }, - { - "matchingRegex": "it.overriddenVisibility.*", - "includeNonPublic": false, - "reportUndocumented": false, - "skipDeprecated": false, - "suppress": false, - "documentedVisibilities": [ - "PRIVATE" - ] - } - ], - "externalDocumentationLinks": [ - { - "url": "https://docs.oracle.com/javase/8/docs/api/", - "packageListUrl": "https://docs.oracle.com/javase/8/docs/api/package-list" - }, - { - "url": "https://kotlinlang.org/api/latest/jvm/stdlib/", - "packageListUrl": "https://kotlinlang.org/api/latest/jvm/stdlib/package-list" - } - ], - "languageVersion": null, - "apiVersion": null, - "noStdlibLink": false, - "noJdkLink": false, - "suppressedFiles": [ - ".../src/main/kotlin/it/suppressedByPath" - ], - "analysisPlatform": "jvm", - "documentedVisibilities": [ - "PUBLIC", - "PROTECTED" - ] - } - ], - "pluginsClasspath": [ - ".../dokka-analysis-1.8.0-SNAPSHOT.jar", - ".../dokka-base-1.8.0-SNAPSHOT.jar", - ".../kotlin-analysis-intellij-1.8.0-SNAPSHOT.jar", - ".../kotlin-analysis-compiler-1.8.0-SNAPSHOT.jar", - ".../kotlinx-html-jvm-0.7.5.jar", - ".../kotlinx-coroutines-core-jvm-1.6.3.jar", - ".../kotlin-stdlib-jdk8-1.7.20.jar", - ".../jackson-databind-2.12.7.1.jar", - ".../jackson-annotations-2.12.7.jar", - ".../jackson-core-2.12.7.jar", - ".../jackson-module-kotlin-2.12.7.jar", - ".../kotlin-reflect-1.7.20.jar", - ".../kotlin-stdlib-jdk7-1.7.20.jar", - ".../kotlin-stdlib-1.7.20.jar", - ".../jsoup-1.15.3.jar", - ".../freemarker-2.3.31.jar", - ".../kotlin-stdlib-common-1.7.20.jar", - ".../annotations-13.0.jar" - ], - "pluginsConfiguration": [ - { - "fqPluginName": "org.jetbrains.dokka.base.DokkaBase", - "serializationFormat": "JSON", - "values": "{ \"customStyleSheets\": [\".../customResources/logo-styles.css\", \".../customResources/custom-style-to-add.css\"], \"customAssets\" : [\".../customResources/custom-resource.svg\"] }" - } - ], - "modules": [], - "failOnWarning": false, - "delayTemplateSubstitution": false, - "suppressObviousFunctions": false, - "includes": [], - "suppressInheritedMembers": false, - "finalizeCoroutines": true -} -""".trimIndent() -) diff --git a/settings.gradle.kts b/settings.gradle.kts index 96b5a00e..6ee766d9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,14 +37,57 @@ dependencyResolutionManagement { include( ":modules:dokkatoo-plugin", + ":modules:dokkatoo-plugin-integration-tests", - ":externals", + ":examples", ) enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") enableFeaturePreview("STABLE_CONFIGURATION_CACHE") -//if (file("./externals/kotlin-dokka").exists()) { -// includeBuild("./externals/kotlin-dokka") +//if (file("./examples/build/tmp/prepareDokkaSource").exists()) { +// includeBuild("./examples/build/tmp/prepareDokkaSource") +//} + +// can only include one example project at a time https://github.com/gradle/gradle/issues/23939 +//@formatter:off +//includeBuild(file("./examples/multiplatform-example/dokkatoo" )) { name = "multiplatform-example" } +//includeBuild(file("./examples/kotlin-as-java-example/dokkatoo" )) { name = "kotlin-as-java-example" } +//includeBuild(file("./examples/versioning-multimodule-example/dokkatoo" )) { name = "versioning-multimodule-example" } +//includeBuild(file("./examples/custom-format-example/dokkatoo" )) { name = "custom-format-example" } +//includeBuild(file("./examples/gradle-example/dokkatoo" )) { name = "gradle-example" } +//includeBuild(file("./examples/library-publishing-example/dokkatoo" )) { name = "library-publishing-example" } +//includeBuild(file("./examples/multimodule-example/dokkatoo" )) { name = "multimodule-example" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-1/dokkatoo" )) { name = "it-multimodule-1" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-0/dokkatoo" )) { name = "it-multimodule-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-collector-0/dokkatoo" )) { name = "it-collector-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-multimodule-versioning-0/dokkatoo" )) { name = "it-multimodule-versioning-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-android-0/dokkatoo" )) { name = "it-android-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-basic/dokkatoo" )) { name = "it-basic" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-multiplatform-0/dokkatoo" )) { name = "it-multiplatform-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-js-ir-0/dokkatoo" )) { name = "it-js-ir-0" } +//includeBuild(file("./modules/dokkatoo-plugin-integration-tests/projects/it-basic-groovy/dokkatoo" )) { name = "it-basic-groovy" } +//@formatter:on + +//listOf( +// "examples", +// "modules/dokkatoo-plugin-integration-tests/projects", +//).forEach { exampleProjectDir -> +// file(exampleProjectDir) +// .walk() +// .filter { +// it.isDirectory +// && it.name == "dokkatoo" +// && ( +// it.resolve("settings.gradle.kts").exists() +// || +// it.resolve("settings.gradle").exists() +// ) +// }.forEach { file -> +// includeBuild(file) { +// name = file.parentFile.name +// println("$file $name") +// } +// } //}