From fbed0982653cd20019fe3d56c6b4e5d7e7a72aad Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 20 Jul 2020 10:38:22 +0200 Subject: Implement DokkaConfigurationSerializableTest --- core/src/main/kotlin/configuration.kt | 17 ++-- .../dokka/gradle/configurationImplementations.kt | 9 +-- .../dokka/gradle/DokkaConfigurationJsonTest.kt | 93 +++++++++++++++++++++ .../gradle/DokkaConfigurationSerializableTest.kt | 68 ++++++++++++++++ .../gradle/GradleDokkaConfigurationJsonTest.kt | 94 ---------------------- 5 files changed, 174 insertions(+), 107 deletions(-) create mode 100644 runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationJsonTest.kt create mode 100644 runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationSerializableTest.kt delete mode 100644 runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/GradleDokkaConfigurationJsonTest.kt diff --git a/core/src/main/kotlin/configuration.kt b/core/src/main/kotlin/configuration.kt index 08a3f07a..7e4a3d94 100644 --- a/core/src/main/kotlin/configuration.kt +++ b/core/src/main/kotlin/configuration.kt @@ -5,6 +5,7 @@ package org.jetbrains.dokka import org.jetbrains.dokka.utilities.toJsonString import org.jetbrains.dokka.utilities.parseJson import java.io.File +import java.io.Serializable import java.net.URL object DokkaDefaults { @@ -53,7 +54,7 @@ enum class Platform(val key: String) { data class DokkaSourceSetID( val moduleName: String, val sourceSetName: String -) { +) : Serializable { override fun toString(): String { return "$moduleName/$sourceSetName" } @@ -67,7 +68,7 @@ fun DokkaConfiguration.toJsonString(): String { return toJsonString(this) } -interface DokkaConfiguration { +interface DokkaConfiguration : Serializable { val outputDir: String val cacheRoot: String? val offlineMode: Boolean @@ -77,7 +78,7 @@ interface DokkaConfiguration { val pluginsClasspath: List val pluginsConfiguration: Map - interface DokkaSourceSet { + interface DokkaSourceSet: Serializable { val sourceSetID: DokkaSourceSetID val displayName: String val moduleDisplayName: String @@ -103,23 +104,23 @@ interface DokkaConfiguration { val analysisPlatform: Platform } - interface SourceRoot { + interface SourceRoot: Serializable { val path: String } - interface SourceLinkDefinition { + interface SourceLinkDefinition: Serializable { val path: String val url: String val lineSuffix: String? } - interface DokkaModuleDescription { + interface DokkaModuleDescription : Serializable { val name: String val path: String val docFile: String } - interface PackageOptions { + interface PackageOptions : Serializable{ val prefix: String val includeNonPublic: Boolean val reportUndocumented: Boolean? @@ -127,7 +128,7 @@ interface DokkaConfiguration { val suppress: Boolean } - interface ExternalDocumentationLink { + interface ExternalDocumentationLink : Serializable { val url: URL val packageListUrl: URL diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt index 84f35cb4..bed73d6d 100644 --- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt +++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt @@ -17,7 +17,6 @@ import org.jetbrains.dokka.DokkaDefaults import org.jetbrains.dokka.DokkaSourceSetID import org.jetbrains.dokka.Platform import java.io.File -import java.io.Serializable import java.net.URL import java.util.concurrent.Callable import kotlin.reflect.KMutableProperty @@ -25,7 +24,7 @@ import kotlin.reflect.full.memberProperties import org.gradle.api.tasks.SourceSet as GradleSourceSet import org.jetbrains.kotlin.gradle.model.SourceSet as KotlinSourceSet -class GradleSourceRootImpl : SourceRoot, Serializable { +class GradleSourceRootImpl : SourceRoot { override var path: String = "" set(value) { field = File(value).absolutePath @@ -208,13 +207,13 @@ fun GradleDokkaSourceSet.dependsOn(sourceSet: AndroidSourceSet) { dependsOn(DokkaSourceSetID(sourceSet.name)) } -class GradleSourceLinkDefinitionImpl : SourceLinkDefinition, Serializable { +class GradleSourceLinkDefinitionImpl : SourceLinkDefinition { override var path: String = "" override var url: String = "" override var lineSuffix: String? = null } -class GradleExternalDocumentationLinkImpl : ExternalDocumentationLink, Serializable { +class GradleExternalDocumentationLinkImpl : ExternalDocumentationLink { override var url: URL = URL("http://") override var packageListUrl: URL = URL("http://") } @@ -236,7 +235,7 @@ class GradleDokkaConfigurationImpl : DokkaConfiguration { override var modules: List = emptyList() } -class GradlePackageOptionsImpl : PackageOptions, Serializable { +class GradlePackageOptionsImpl : PackageOptions { override var prefix: String = "" override var includeNonPublic: Boolean = DokkaDefaults.includeNonPublic override var reportUndocumented: Boolean = DokkaDefaults.reportUndocumented diff --git a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationJsonTest.kt b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationJsonTest.kt new file mode 100644 index 00000000..d80f43e4 --- /dev/null +++ b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationJsonTest.kt @@ -0,0 +1,93 @@ +package org.jetbrains.dokka.gradle + +import org.gradle.kotlin.dsl.withType +import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.dokka.* +import java.net.URL +import kotlin.test.Test +import kotlin.test.assertEquals + +class DokkaConfigurationJsonTest { + + @Test + fun `DokkaTask configuration toJsonString then parseJson`() { + val project = ProjectBuilder.builder().build() + project.plugins.apply("org.jetbrains.dokka") + val dokkaTask = project.tasks.withType().first() + dokkaTask.plugins.withDependencies { dependencies -> + dependencies.clear() + } + dokkaTask.apply { + this.failOnWarning = true + this.offlineMode = true + this.outputDirectory = "customOutputDir" + this.cacheRoot = "customCacheRoot" + this.pluginsConfiguration["0"] = "a" + this.pluginsConfiguration["1"] = "b" + this.dokkaSourceSets.create("main") { sourceSet -> + sourceSet.moduleDisplayName = "moduleDisplayName" + sourceSet.displayName = "customSourceSetDisplayName" + sourceSet.reportUndocumented = true + + sourceSet.externalDocumentationLink { link -> + link.packageListUrl = URL("http://some.url") + link.url = URL("http://some.other.url") + } + sourceSet.collectKotlinTasks = { + println(this@DokkaConfigurationJsonTest) + println("This lambda is capturing the entire test") + emptyList() + } + + sourceSet.perPackageOption { packageOption -> + packageOption.includeNonPublic = true + packageOption.reportUndocumented = true + packageOption.skipDeprecated = true + } + } + } + + val sourceConfiguration = dokkaTask.getConfigurationOrThrow() + val configurationJson = sourceConfiguration.toJsonString() + val parsedConfiguration = DokkaConfigurationImpl(configurationJson) + + assertEquals( + DokkaConfigurationImpl( + failOnWarning = sourceConfiguration.failOnWarning, + offlineMode = sourceConfiguration.offlineMode, + outputDir = sourceConfiguration.outputDir, + cacheRoot = sourceConfiguration.cacheRoot, + pluginsClasspath = emptyList(), + pluginsConfiguration = sourceConfiguration.pluginsConfiguration.toMap(), + sourceSets = listOf( + DokkaSourceSetImpl( + moduleDisplayName = sourceConfiguration.sourceSets.single().moduleDisplayName, + displayName = sourceConfiguration.sourceSets.single().displayName, + reportUndocumented = sourceConfiguration.sourceSets.single().reportUndocumented, + externalDocumentationLinks = sourceConfiguration.sourceSets.single().externalDocumentationLinks + .map { link -> + ExternalDocumentationLinkImpl( + url = link.url, + packageListUrl = link.packageListUrl + ) + }, + perPackageOptions = sourceConfiguration.sourceSets.single().perPackageOptions.map { option -> + PackageOptionsImpl( + prefix = option.prefix, + includeNonPublic = option.includeNonPublic, + reportUndocumented = option.reportUndocumented, + skipDeprecated = option.skipDeprecated, + suppress = option.suppress + ) + }, + sourceSetID = sourceConfiguration.sourceSets.single().sourceSetID, + sourceRoots = sourceConfiguration.sourceSets.single().sourceRoots.map { sourceRoot -> + SourceRootImpl(sourceRoot.path) + } + ) + ) + ), parsedConfiguration + ) + println(parsedConfiguration) + } +} diff --git a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationSerializableTest.kt b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationSerializableTest.kt new file mode 100644 index 00000000..70ecfcf0 --- /dev/null +++ b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/DokkaConfigurationSerializableTest.kt @@ -0,0 +1,68 @@ +package org.jetbrains.dokka.gradle + +import org.gradle.kotlin.dsl.withType +import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.dokka.toJsonString +import org.junit.Rule +import org.junit.rules.TemporaryFolder +import java.io.ObjectInputStream +import java.io.ObjectOutputStream +import java.net.URL +import kotlin.test.Test +import kotlin.test.assertEquals + +class DokkaConfigurationSerializableTest { + + @get:Rule + val temporaryFolder = TemporaryFolder() + + @Test + fun `DokkaTask configuration write to file then parse`() { + val project = ProjectBuilder.builder().build() + project.plugins.apply("org.jetbrains.dokka") + val dokkaTask = project.tasks.withType().first() + dokkaTask.plugins.withDependencies { dependencies -> + dependencies.clear() + } + dokkaTask.apply { + this.failOnWarning = true + this.offlineMode = true + this.outputDirectory = "customOutputDir" + this.cacheRoot = "customCacheRoot" + this.pluginsConfiguration["0"] = "a" + this.pluginsConfiguration["1"] = "b" + this.dokkaSourceSets.create("main") { sourceSet -> + sourceSet.moduleDisplayName = "moduleDisplayName" + sourceSet.displayName = "customSourceSetDisplayName" + sourceSet.reportUndocumented = true + + sourceSet.externalDocumentationLink { link -> + link.packageListUrl = URL("http://some.url") + link.url = URL("http://some.other.url") + } + sourceSet.collectKotlinTasks = { + emptyList() + } + + sourceSet.perPackageOption { packageOption -> + packageOption.includeNonPublic = true + packageOption.reportUndocumented = true + packageOption.skipDeprecated = true + } + } + } + + val sourceConfiguration = dokkaTask.getConfigurationOrThrow() + val configurationFile = temporaryFolder.root.resolve("config.bin") + ObjectOutputStream(configurationFile.outputStream()).use { stream -> + stream.writeObject(sourceConfiguration) + } + val parsedConfiguration = ObjectInputStream(configurationFile.inputStream()).use { stream -> + stream.readObject() as DokkaConfiguration + } + + /* Abusing toJsonString, since there is no proper .equals on the gradle implementations yet */ + assertEquals(sourceConfiguration.toJsonString(), parsedConfiguration.toJsonString()) + } +} diff --git a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/GradleDokkaConfigurationJsonTest.kt b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/GradleDokkaConfigurationJsonTest.kt deleted file mode 100644 index b6cf2119..00000000 --- a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/GradleDokkaConfigurationJsonTest.kt +++ /dev/null @@ -1,94 +0,0 @@ -package org.jetbrains.dokka.gradle - -import org.gradle.api.artifacts.FileCollectionDependency -import org.gradle.kotlin.dsl.withType -import org.gradle.testfixtures.ProjectBuilder -import org.jetbrains.dokka.* -import java.net.URL -import kotlin.test.Test -import kotlin.test.assertEquals - -class GradleDokkaConfigurationJsonTest { - - @Test - fun `DokkaTask configuration toJsonString then parseJson`() { - val project = ProjectBuilder.builder().build() - project.plugins.apply("org.jetbrains.dokka") - val dokkaTask = project.tasks.withType().first() - dokkaTask.plugins.withDependencies { dependencies -> - dependencies.clear() - } - dokkaTask.apply { - this.failOnWarning = true - this.offlineMode = true - this.outputDirectory = "customOutputDir" - this.cacheRoot = "customCacheRoot" - this.pluginsConfiguration["0"] = "a" - this.pluginsConfiguration["1"] = "b" - this.dokkaSourceSets.create("main") { sourceSet -> - sourceSet.moduleDisplayName = "moduleDisplayName" - sourceSet.displayName = "customSourceSetDisplayName" - sourceSet.reportUndocumented = true - - sourceSet.externalDocumentationLink { link -> - link.packageListUrl = URL("http://some.url") - link.url = URL("http://some.other.url") - } - sourceSet.collectKotlinTasks = { - println(this@GradleDokkaConfigurationJsonTest) - println("This lambda is capturing the entire test") - emptyList() - } - - sourceSet.perPackageOption { packageOption -> - packageOption.includeNonPublic = true - packageOption.reportUndocumented = true - packageOption.skipDeprecated = true - } - } - } - - val sourceConfiguration = dokkaTask.getConfigurationOrThrow() - val configurationJson = sourceConfiguration.toJsonString() - val parsedConfiguration = DokkaConfigurationImpl(configurationJson) - - assertEquals( - DokkaConfigurationImpl( - failOnWarning = sourceConfiguration.failOnWarning, - offlineMode = sourceConfiguration.offlineMode, - outputDir = sourceConfiguration.outputDir, - cacheRoot = sourceConfiguration.cacheRoot, - pluginsClasspath = emptyList(), - pluginsConfiguration = sourceConfiguration.pluginsConfiguration.toMap(), - sourceSets = listOf( - DokkaSourceSetImpl( - moduleDisplayName = sourceConfiguration.sourceSets.single().moduleDisplayName, - displayName = sourceConfiguration.sourceSets.single().displayName, - reportUndocumented = sourceConfiguration.sourceSets.single().reportUndocumented, - externalDocumentationLinks = sourceConfiguration.sourceSets.single().externalDocumentationLinks - .map { link -> - ExternalDocumentationLinkImpl( - url = link.url, - packageListUrl = link.packageListUrl - ) - }, - perPackageOptions = sourceConfiguration.sourceSets.single().perPackageOptions.map { option -> - PackageOptionsImpl( - prefix = option.prefix, - includeNonPublic = option.includeNonPublic, - reportUndocumented = option.reportUndocumented, - skipDeprecated = option.skipDeprecated, - suppress = option.suppress - ) - }, - sourceSetID = sourceConfiguration.sourceSets.single().sourceSetID, - sourceRoots = sourceConfiguration.sourceSets.single().sourceRoots.map { sourceRoot -> - SourceRootImpl(sourceRoot.path) - } - ) - ) - ), parsedConfiguration - ) - println(parsedConfiguration) - } -} -- cgit