From c63ea36637ce956029fb15b1482c0683ecb8a587 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Wed, 30 Aug 2023 15:58:46 +0200 Subject: Migrate to JUnit 5 and unify used test API (#3138) --- .../org/jetbrains/conventions/base-java.gradle.kts | 16 +-- .../conventions/dokka-integration-test.gradle.kts | 6 +- core/build.gradle.kts | 2 +- core/content-matcher-test-utils/build.gradle.kts | 2 +- .../kotlin/matchers/content/ContentMatchersDsl.kt | 28 +++-- core/test-api/build.gradle.kts | 1 - .../main/kotlin/testApi/testRunner/TestRunner.kt | 130 +++++++++++---------- .../plugin-development/sample-plugin-tutorial.md | 2 +- .../dokka/plugin/HideInternalApiPluginTest.kt | 2 +- gradle/libs.versions.toml | 5 +- integration-tests/build.gradle.kts | 6 +- integration-tests/cli/build.gradle.kts | 2 +- .../dokka/it/cli/AbstractCliIntegrationTest.kt | 4 +- integration-tests/gradle/build.gradle.kts | 5 +- .../gradle/AbstractGradleCachingIntegrationTest.kt | 12 +- .../it/gradle/Android0GradleIntegrationTest.kt | 30 ++--- .../dokka/it/gradle/BasicCachingIntegrationTest.kt | 48 ++++---- .../dokka/it/gradle/BasicGradleIntegrationTest.kt | 28 ++--- .../dokka/it/gradle/BasicGroovyIntegrationTest.kt | 21 ++-- .../dokka/it/gradle/Collector0IntegrationTest.kt | 21 ++-- .../jetbrains/dokka/it/gradle/ConfigurationTest.kt | 23 ++-- .../GradleRelocatedCachingIntegrationTest.kt | 39 +++---- .../dokka/it/gradle/JsIRGradleIntegrationTest.kt | 29 +++-- .../dokka/it/gradle/MultiModule0IntegrationTest.kt | 16 ++- .../dokka/it/gradle/MultiModule1IntegrationTest.kt | 21 ++-- .../gradle/Multiplatform0GradleIntegrationTest.kt | 23 ++-- .../gradle/SequentialTasksExecutionStressTest.kt | 21 ++-- .../jetbrains/dokka/it/gradle/TestedVersions.kt | 14 +++ .../dokka/it/gradle/Versioning0IntegrationTest.kt | 20 ++-- .../dokka/it/gradle/WasmGradleIntegrationTest.kt | 36 +++--- .../kotlin/CoroutinesGradleIntegrationTest.kt | 44 ++++--- .../kotlin/SerializationGradleIntegrationTest.kt | 45 ++++--- .../it/gradle/AbstractGradleIntegrationTest.kt | 19 ++- integration-tests/maven/build.gradle.kts | 2 +- .../jetbrains/dokka/it/AbstractIntegrationTest.kt | 12 +- .../org/jetbrains/dokka/it/TestOutputCopier.kt | 4 +- plugins/all-modules-page/build.gradle.kts | 3 +- .../templates/MultiModuleDocumentationTest.kt | 26 ++--- .../templates/ResolveLinkCommandResolutionTest.kt | 63 +++++----- .../ResolveLinkGfmCommandResolutionTest.kt | 90 +++++++------- plugins/android-documentation/build.gradle.kts | 3 +- .../transformers/HideTagDocumentableFilterTest.kt | 2 +- plugins/base/base-test-utils/build.gradle.kts | 8 +- plugins/base/build.gradle.kts | 11 +- .../AbortGracefullyOnMissingDocumentablesTest.kt | 2 +- plugins/base/src/test/kotlin/basic/DRITest.kt | 5 +- .../base/src/test/kotlin/basic/DokkaBasicTests.kt | 2 +- .../src/test/kotlin/basic/FailOnWarningTest.kt | 8 +- plugins/base/src/test/kotlin/basic/LoggerTest.kt | 4 +- .../kotlin/content/ContentInDescriptionTest.kt | 4 +- .../src/test/kotlin/content/HighlightingTest.kt | 2 +- .../annotations/ContentForAnnotationsTest.kt | 8 +- .../content/annotations/JavaDeprecatedTest.kt | 7 +- .../content/annotations/KotlinDeprecatedTest.kt | 5 +- .../kotlin/content/annotations/SinceKotlinTest.kt | 23 ++-- .../content/exceptions/ContentForExceptions.kt | 7 +- .../content/functions/ContentForBriefTest.kt | 6 +- .../content/functions/ContentForConstructors.kt | 7 +- .../content/inheritors/ContentForInheritorsTest.kt | 2 +- .../kotlin/content/params/ContentForParamsTest.kt | 8 +- .../ContentForClassWithParamsAndPropertiesTest.kt | 2 +- .../content/receiver/ContentForReceiverTest.kt | 4 +- .../content/samples/ContentForSamplesTest.kt | 9 +- .../content/seealso/ContentForSeeAlsoTest.kt | 4 +- .../signatures/ConstructorsSignaturesTest.kt | 2 +- .../content/signatures/ContentForSignaturesTest.kt | 2 +- .../kotlin/content/typealiases/TypealiasTest.kt | 7 +- .../base/src/test/kotlin/enums/JavaEnumsTest.kt | 2 +- .../base/src/test/kotlin/enums/KotlinEnumsTest.kt | 6 +- .../src/test/kotlin/expect/AbstractExpectTest.kt | 9 +- .../base/src/test/kotlin/expect/ExpectGenerator.kt | 8 +- plugins/base/src/test/kotlin/expect/ExpectTest.kt | 6 +- .../test/kotlin/expectActuals/ExpectActualsTest.kt | 28 +++-- .../test/kotlin/filter/DeprecationFilterTest.kt | 18 +-- .../test/kotlin/filter/EmptyPackagesFilterTest.kt | 6 +- .../src/test/kotlin/filter/JavaFileFilterTest.kt | 6 +- .../test/kotlin/filter/JavaVisibilityFilterTest.kt | 5 +- .../filter/KotlinArrayDocumentableReplacerTest.kt | 31 ++--- .../src/test/kotlin/filter/VisibilityFilterTest.kt | 20 ++-- plugins/base/src/test/kotlin/issues/IssuesTest.kt | 2 +- .../kotlin/linkableContent/LinkableContentTest.kt | 53 +++++---- .../test/kotlin/linking/EnumValuesLinkingTest.kt | 8 +- .../AndroidExternalLocationProviderTest.kt | 4 +- .../DefaultExternalLocationProviderTest.kt | 4 +- .../Dokka010ExternalLocationProviderTest.kt | 4 +- .../locationProvider/DokkaLocationProviderTest.kt | 4 +- .../JavadocExternalLocationProviderTest.kt | 4 +- .../locationProvider/MultiModuleLinkingTest.kt | 4 +- plugins/base/src/test/kotlin/markdown/KDocTest.kt | 2 +- plugins/base/src/test/kotlin/markdown/LinkTest.kt | 6 +- .../base/src/test/kotlin/markdown/ParserTest.kt | 11 +- plugins/base/src/test/kotlin/model/ClassesTest.kt | 4 +- plugins/base/src/test/kotlin/model/CommentTest.kt | 2 +- .../base/src/test/kotlin/model/ExtensionsTest.kt | 4 +- .../base/src/test/kotlin/model/FunctionsTest.kt | 8 +- .../base/src/test/kotlin/model/InheritorsTest.kt | 4 +- plugins/base/src/test/kotlin/model/JavaTest.kt | 15 ++- .../kotlin/model/MultiLanguageInheritanceTest.kt | 2 +- plugins/base/src/test/kotlin/model/ObjectTest.kt | 2 +- plugins/base/src/test/kotlin/model/PackagesTest.kt | 2 +- plugins/base/src/test/kotlin/model/PropertyTest.kt | 2 +- .../JavaAnnotationsForParametersTest.kt | 5 +- .../model/annotations/JavaAnnotationsTest.kt | 6 +- .../KotlinAnnotationsForParametersTest.kt | 4 +- .../kotlin/multiplatform/BasicMultiplatformTest.kt | 4 +- .../src/test/kotlin/packageList/PackageListTest.kt | 4 +- .../test/kotlin/pageMerger/PageNodeMergerTest.kt | 42 ++++--- .../src/test/kotlin/parsers/JavadocParserTest.kt | 6 +- .../src/test/kotlin/renderers/html/BasicTest.kt | 2 +- .../test/kotlin/renderers/html/BreadcrumbsTest.kt | 2 +- .../test/kotlin/renderers/html/CoverPageTest.kt | 4 +- .../test/kotlin/renderers/html/CustomFooterTest.kt | 4 +- .../test/kotlin/renderers/html/DivergentTest.kt | 2 +- .../kotlin/renderers/html/FooterMessageTest.kt | 4 +- .../kotlin/renderers/html/FormattingUtilsTest.kt | 4 +- .../kotlin/renderers/html/GroupWrappingTest.kt | 2 +- .../test/kotlin/renderers/html/ListStylesTest.kt | 2 +- .../kotlin/renderers/html/NavigationIconTest.kt | 2 +- .../test/kotlin/renderers/html/NavigationTest.kt | 5 +- .../renderers/html/SearchbarDataInstallerTest.kt | 8 +- .../renderers/html/SourceSetDependentHintTest.kt | 2 +- .../kotlin/renderers/html/SourceSetFilterTest.kt | 4 +- .../kotlin/renderers/html/TabbedContentTest.kt | 4 +- .../test/kotlin/renderers/html/TextStylesTest.kt | 2 +- .../test/kotlin/resourceLinks/ResourceLinksTest.kt | 14 +-- .../kotlin/signatures/DivergentSignatureTest.kt | 25 ++-- .../FunctionalTypeConstructorsSignatureTest.kt | 12 +- .../signatures/InheritedAccessorsSignatureTest.kt | 9 +- .../test/kotlin/signatures/RawHtmlRenderingTest.kt | 8 +- .../src/test/kotlin/signatures/SignatureTest.kt | 8 +- .../kotlin/signatures/VarianceSignatureTest.kt | 2 +- .../superFields/DescriptorSuperPropertiesTest.kt | 4 +- .../test/kotlin/superFields/PsiSuperFieldsTest.kt | 9 +- .../PageTransformerBuilderTest.kt | 13 +-- .../transformers/CommentsToContentConverterTest.kt | 14 +-- ...textModuleAndPackageDocumentationReaderTest1.kt | 16 +-- ...textModuleAndPackageDocumentationReaderTest3.kt | 8 +- .../test/kotlin/transformers/DivisionSwitchTest.kt | 2 +- ...itedEntriesDocumentableFilterTransfromerTest.kt | 7 +- ...ntentModuleAndPackageDocumentationReaderTest.kt | 8 +- .../MergeImplicitExpectActualDeclarationsTest.kt | 4 +- ...ackageDocumentationTransformerFunctionalTest.kt | 2 +- ...leAndPackageDocumentationTransformerUnitTest.kt | 6 +- .../ReportUndocumentedTransformerTest.kt | 8 +- .../transformers/SourceLinkTransformerTest.kt | 2 +- .../kotlin/transformers/SuppressTagFilterTest.kt | 4 +- ...nfigurationDocumentableFilterTransformerTest.kt | 7 +- .../test/kotlin/transformers/isExceptionTest.kt | 5 +- .../kotlin/translators/AccessorMethodNamingTest.kt | 6 +- .../base/src/test/kotlin/translators/Bug1341.kt | 4 +- ...efaultDescriptorToDocumentableTranslatorTest.kt | 42 ++++--- .../DefaultPsiToDocumentableTranslatorTest.kt | 34 +++--- .../translators/ExternalDocumentablesTest.kt | 8 +- .../kotlin/translators/JavadocInheritDocsTest.kt | 8 +- .../translators/JavadocInheritedDocTagsTest.kt | 6 +- .../test/kotlin/translators/JavadocParserTest.kt | 6 +- plugins/base/src/test/kotlin/utils/TestUtils.kt | 9 +- plugins/gfm/build.gradle.kts | 3 +- .../gfm/gfm-template-processing/build.gradle.kts | 3 +- .../test/kotlin/renderers/gfm/CodeWrappingTest.kt | 2 +- .../src/test/kotlin/renderers/gfm/DivergentTest.kt | 25 ++-- .../test/kotlin/renderers/gfm/GroupWrappingTest.kt | 11 +- .../kotlin/renderers/gfm/SimpleElementsTest.kt | 4 +- .../renderers/gfm/SourceSetDependentHintTest.kt | 17 +-- plugins/javadoc/build.gradle.kts | 3 +- .../dokka/javadoc/JavadocAccessorNamingTest.kt | 4 +- .../javadoc/JavadocAllClassesTemplateMapTest.kt | 4 +- .../javadoc/JavadocClasslikeTemplateMapTest.kt | 4 +- .../dokka/javadoc/JavadocDeprecatedTest.kt | 25 ++-- .../jetbrains/dokka/javadoc/JavadocIndexTest.kt | 4 +- .../javadoc/JavadocLocationTemplateMapTest.kt | 6 +- .../dokka/javadoc/JavadocModuleTemplateMapTest.kt | 4 +- .../dokka/javadoc/JavadocPackageTemplateMapTest.kt | 4 +- .../dokka/javadoc/location/JavadocLinkingTest.kt | 2 +- .../dokka/javadoc/location/JavadocLocationTest.kt | 4 +- .../javadoc/packagelist/JavadocPackageListTest.kt | 4 +- .../dokka/javadoc/search/JavadocIndexSearchTest.kt | 6 +- .../JavadocDocumentableJVMSourceSetFilterTest.kt | 4 +- .../validity/MultiplatformConfiguredCheckerTest.kt | 4 +- plugins/jekyll/build.gradle.kts | 3 +- .../jekyll-template-processing/build.gradle.kts | 3 +- plugins/kotlin-as-java/build.gradle.kts | 3 +- .../src/test/kotlin/CompanionAsJavaTest.kt | 8 +- .../src/test/kotlin/DRITranslationTest.kt | 4 +- .../kotlin-as-java/src/test/kotlin/JvmFieldTest.kt | 6 +- .../kotlin-as-java/src/test/kotlin/JvmNameTest.kt | 4 +- .../src/test/kotlin/JvmOverloadsTest.kt | 4 +- .../src/test/kotlin/JvmSyntheticTest.kt | 4 +- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 35 +++--- .../src/test/kotlin/KotlinAsJavaSignatureTest.kt | 2 +- plugins/mathjax/build.gradle.kts | 4 +- .../mathjax/src/test/kotlin/MathjaxPluginTest.kt | 9 +- plugins/templating/build.gradle.kts | 5 +- .../AddToNavigationCommandResolutionTest.kt | 34 +++--- .../templates/AddToSearchCommandResolutionTest.kt | 61 +++++----- .../templates/SubstitutionCommandResolutionTest.kt | 41 +++---- plugins/versioning/build.gradle.kts | 3 +- runners/cli/build.gradle.kts | 2 +- .../src/test/kotlin/org/jetbrains/dokka/CliTest.kt | 3 +- runners/gradle-plugin/build.gradle.kts | 1 + .../gradle/ConfigureWithKotlinSourceSetGistTest.kt | 9 +- .../gradle/DokkaConfigurationSerializableTest.kt | 11 +- .../dokka/gradle/KotlinSourceSetGistTest.kt | 8 +- .../compiler/build.gradle.kts | 3 +- ...seModuleAndPackageDocumentationFragmentsTest.kt | 13 ++- 205 files changed, 1137 insertions(+), 1108 deletions(-) diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts index a4ed0ede..efeb8b17 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts @@ -27,24 +27,12 @@ tasks.withType().configureEach { } else { (Runtime.getRuntime().availableProcessors() / 2).takeIf { it > 0 } ?: 1 } + javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(dokkaBuild.testJavaLauncherVersion) }) } dependencies { - testImplementation(platform("org.junit:junit-bom:5.9.2")) - // TODO Upgrade all subprojects to use JUnit Jupiter https://github.com/Kotlin/dokka/issues/2924 - // Replace these dependencies with `testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")` - // See https://junit.org/junit5/docs/current/user-guide/#running-tests-build-gradle-engines-configure - // Ideally convention plugins should only provide sensible defaults that can be overridden by subprojects. - // If a convention plugin defines dependencies, these cannot be easily overridden by subprojects, and so - // this should be avoided. However, for now , both JUnit 4 and 5 must be supported, and since these are test - // runtime-only dependencies they are not going to have a significant impact subprojects. - // These dependencies should be revisited in #2924, and (for example) moved to each subproject (which is more - // repetitive, but more declarative and clear), or some other solution. - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testRuntimeOnly("org.junit.vintage:junit-vintage-engine") - // kotlin-test asserts for all projects - testImplementation(kotlin("test-junit")) + testImplementation(platform(libs.junit.bom)) } diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts index f9edb68e..cebdb541 100644 --- a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts +++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts @@ -45,15 +45,17 @@ val integrationTest by tasks.registering(NonCacheableIntegrationTest::class) { maxHeapSize = "2G" description = "Runs integration tests." group = "verification" - useJUnit() - testClassesDirs = integrationTestSourceSet.output.classesDirs classpath = integrationTestSourceSet.runtimeClasspath + useJUnitPlatform() + setForkEvery(1) project.properties["dokka_integration_test_parallelism"]?.toString()?.toIntOrNull()?.let { parallelism -> maxParallelForks = parallelism } + + environment( "isExhaustive", project.properties["dokka_integration_test_is_exhaustive"]?.toString()?.toBoolean() diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 2a5b668c..24e8ed5a 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -17,8 +17,8 @@ dependencies { } } + testImplementation(kotlin("test")) testImplementation(projects.core.testApi) - testImplementation(kotlin("test-junit")) } tasks { diff --git a/core/content-matcher-test-utils/build.gradle.kts b/core/content-matcher-test-utils/build.gradle.kts index 75602c64..f469c03d 100644 --- a/core/content-matcher-test-utils/build.gradle.kts +++ b/core/content-matcher-test-utils/build.gradle.kts @@ -6,5 +6,5 @@ dependencies { implementation(projects.core.testApi) implementation(kotlin("reflect")) - implementation(libs.assertk) + implementation(kotlin("test")) } diff --git a/core/content-matcher-test-utils/src/main/kotlin/matchers/content/ContentMatchersDsl.kt b/core/content-matcher-test-utils/src/main/kotlin/matchers/content/ContentMatchersDsl.kt index 6e05c11a..962841ba 100644 --- a/core/content-matcher-test-utils/src/main/kotlin/matchers/content/ContentMatchersDsl.kt +++ b/core/content-matcher-test-utils/src/main/kotlin/matchers/content/ContentMatchersDsl.kt @@ -1,12 +1,11 @@ package matchers.content -import assertk.assertThat -import assertk.assertions.contains -import assertk.assertions.isEqualTo import org.jetbrains.dokka.model.withDescendants import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.test.tools.matchers.content.* import kotlin.reflect.KClass +import kotlin.test.assertEquals +import kotlin.test.asserter // entry point: fun ContentNode.assertNode(block: ContentMatcherBuilder.() -> Unit) { @@ -48,7 +47,7 @@ private val ContentComposite.extractedText fun ContentMatcherBuilder.hasExactText(expected: String) { assertions += { - assertThat(this::extractedText).isEqualTo(expected) + assertEquals(expected, this.extractedText) } } @@ -74,7 +73,7 @@ fun ContentMatcherBuilder<*>.tabbedGroup( block: ContentMatcherBuilder.() -> Unit ) = composite { block() - check { assertThat(this::style).transform { style -> style.contains(ContentStyle.TabbedContent) }.isEqualTo(true) } + check { assertContains(this.style, ContentStyle.TabbedContent) } } fun ContentMatcherBuilder<*>.tab( @@ -82,21 +81,20 @@ fun ContentMatcherBuilder<*>.tab( ) = composite { block() check { - assertThat(this::extra).transform { extra -> extra[TabbedContentTypeExtra]?.value } - .isEqualTo(tabbedContentType) + assertEquals(tabbedContentType, this.extra[TabbedContentTypeExtra]?.value) } } fun ContentMatcherBuilder<*>.header(expectedLevel: Int? = null, block: ContentMatcherBuilder.() -> Unit) = composite { block() - check { if (expectedLevel != null) assertThat(this::level).isEqualTo(expectedLevel) } + check { if (expectedLevel != null) assertEquals(expectedLevel, this.level) } } fun ContentMatcherBuilder<*>.p(block: ContentMatcherBuilder.() -> Unit) = composite { block() - check { assertThat(this::style).contains(TextStyle.Paragraph) } + check { assertContains(this.style, TextStyle.Paragraph) } } fun ContentMatcherBuilder<*>.link(block: ContentMatcherBuilder.() -> Unit) = composite(block) @@ -114,7 +112,7 @@ fun ContentMatcherBuilder<*>.codeInline(block: ContentMatcherBuilder.caption(block: ContentMatcherBuilder.() -> Unit) = composite { block() - check { assertThat(this::style).contains(ContentStyle.Caption) } + check { assertContains(this.style, ContentStyle.Caption) } } fun ContentMatcherBuilder<*>.br() = node() @@ -139,3 +137,13 @@ fun ContentMatcherBuilder.divergent(block: ContentMatc fun ContentMatcherBuilder.after(block: ContentMatcherBuilder.() -> Unit) = composite(block) + +/* + * TODO replace with kotlin.test.assertContains after migrating to Kotlin language version 1.5+ + */ +private fun assertContains(iterable: Iterable, element: T) { + asserter.assertTrue( + { "Expected the collection to contain the element.\nCollection <$iterable>, element <$element>." }, + iterable.contains(element) + ) +} diff --git a/core/test-api/build.gradle.kts b/core/test-api/build.gradle.kts index 6b4b4d17..8db554b5 100644 --- a/core/test-api/build.gradle.kts +++ b/core/test-api/build.gradle.kts @@ -8,7 +8,6 @@ plugins { dependencies { api(projects.core) - implementation("junit:junit:4.13.2") // TODO: remove dependency to junit implementation(kotlin("reflect")) } diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt index cfb809ea..80c486b7 100644 --- a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt +++ b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt @@ -9,7 +9,6 @@ import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.DokkaPlugin import org.jetbrains.dokka.testApi.logger.TestLogger import org.jetbrains.dokka.utilities.DokkaLogger -import org.junit.rules.TemporaryFolder import testApi.testRunner.TestDokkaConfigurationBuilder import java.io.File import java.net.URL @@ -30,6 +29,9 @@ abstract class AbstractTest, D : DokkaTestGe ?: throw InvalidPathException(name, "Cannot be found") /** + * @param cleanupOutput if set to true, any temporary files will be cleaned up after execution. If set to false, + * it will be left to the user or the OS to delete it. Has no effect if [useOutputLocationFromConfig] + * is also set to true. * @param useOutputLocationFromConfig if set to true, output location specified in [DokkaConfigurationImpl.outputDir] * will be used. If set to false, a temporary folder will be used instead. */ @@ -40,24 +42,26 @@ abstract class AbstractTest, D : DokkaTestGe pluginOverrides: List = emptyList(), block: T.() -> Unit, ) { - val testMethods = testBuilder().apply(block).build() - val configurationToUse = - if (useOutputLocationFromConfig) { - configuration - } else { - val tempDir = getTempDir(cleanupOutput) + if (useOutputLocationFromConfig) { + runTests( + configuration = configuration, + pluginOverrides = pluginOverrides, + testLogger = logger, + block = block + ) + } else { + withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir -> if (!cleanupOutput) { - logger.info("Output generated under: ${tempDir.root.absolutePath}") + logger.info("Output will be generated under: ${tempDir.absolutePath}") } - configuration.copy(outputDir = tempDir.root) + runTests( + configuration = configuration.copy(outputDir = tempDir), + pluginOverrides = pluginOverrides, + testLogger = logger, + block = block + ) } - - dokkaTestGenerator( - configurationToUse, - logger, - testMethods, - pluginOverrides - ).generate() + } } protected fun testInline( @@ -68,42 +72,62 @@ abstract class AbstractTest, D : DokkaTestGe loggerForTest: DokkaLogger = logger, block: T.() -> Unit, ) { - val testMethods = testBuilder().apply(block).build() - val testDirPath = getTempDir(cleanupOutput).root.toPath().toAbsolutePath() - val fileMap = query.toFileMap() - fileMap.materializeFiles(testDirPath.toAbsolutePath()) - if (!cleanupOutput) - loggerForTest.info("Output generated under: ${testDirPath.toAbsolutePath()}") - val newConfiguration = configuration.copy( - outputDir = testDirPath.toFile(), - sourceSets = configuration.sourceSets.map { sourceSet -> - sourceSet.copy( - sourceRoots = sourceSet.sourceRoots.map { file -> - testDirPath.toFile().resolve(file) - }.toSet(), - suppressedFiles = sourceSet.suppressedFiles.map { file -> - testDirPath.toFile().resolve(file) - }.toSet(), - sourceLinks = sourceSet.sourceLinks.map { link -> - link.copy( - localDirectory = testDirPath.toFile().resolve(link.localDirectory).absolutePath - ) - }.toSet(), - includes = sourceSet.includes.map { file -> - testDirPath.toFile().resolve(file) - }.toSet() - ) + withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir -> + if (!cleanupOutput) { + loggerForTest.info("Output will be generated under: ${tempDir.absolutePath}") } - ) + + val fileMap = query.toFileMap() + fileMap.materializeFiles(tempDir.toPath().toAbsolutePath()) + + val newConfiguration = configuration.copy( + outputDir = tempDir, + sourceSets = configuration.sourceSets.map { sourceSet -> + sourceSet.copy( + sourceRoots = sourceSet.sourceRoots.map { file -> tempDir.resolve(file) }.toSet(), + suppressedFiles = sourceSet.suppressedFiles.map { file -> tempDir.resolve(file) }.toSet(), + sourceLinks = sourceSet.sourceLinks.map { + link -> link.copy(localDirectory = tempDir.resolve(link.localDirectory).absolutePath) + }.toSet(), + includes = sourceSet.includes.map { file -> tempDir.resolve(file) }.toSet() + ) + } + ) + runTests( + configuration = newConfiguration, + pluginOverrides = pluginOverrides, + testLogger = loggerForTest, + block = block + ) + } + } + + private fun withTempDirectory(cleanUpAfterUse: Boolean, block: (tempDirectory: File) -> Unit) { + val tempDir = this.createTempDir() + try { + block(tempDir) + } finally { + if (cleanUpAfterUse) { + tempDir.delete() + } + } + } + + private fun runTests( + configuration: DokkaConfiguration, + pluginOverrides: List, + testLogger: DokkaLogger = logger, + block: T.() -> Unit + ) { + val testMethods = testBuilder().apply(block).build() dokkaTestGenerator( - newConfiguration, - loggerForTest, + configuration, + testLogger, testMethods, pluginOverrides ).generate() } - private fun String.toFileMap(): Map { return this.trimIndent().trimMargin() .replace("\r\n", "\n") @@ -141,20 +165,8 @@ abstract class AbstractTest, D : DokkaTestGe Files.write(file, content.toByteArray(charset)) } - private fun getTempDir(cleanupOutput: Boolean) = - if (cleanupOutput) { - TemporaryFolder().apply { create() } - } else { - TemporaryFolderWithoutCleanup().apply { create() } - } - - /** - * Creates a temporary folder, but doesn't delete files - * right after it's been used, delegating it to the OS - */ - private class TemporaryFolderWithoutCleanup : TemporaryFolder() { - override fun after() { } - } + @Suppress("DEPRECATION") // TODO migrate to kotlin.io.path.createTempDirectory with languageVersion >= 1.5 + private fun createTempDir(): File = kotlin.io.createTempDir() protected fun dokkaConfiguration(block: TestDokkaConfigurationBuilder.() -> Unit): DokkaConfigurationImpl = testApi.testRunner.dokkaConfiguration(block) diff --git a/docs-developer/src/doc/docs/developer_guide/plugin-development/sample-plugin-tutorial.md b/docs-developer/src/doc/docs/developer_guide/plugin-development/sample-plugin-tutorial.md index 55d7001f..e0d0968d 100644 --- a/docs-developer/src/doc/docs/developer_guide/plugin-development/sample-plugin-tutorial.md +++ b/docs-developer/src/doc/docs/developer_guide/plugin-development/sample-plugin-tutorial.md @@ -228,7 +228,7 @@ Below you will find a complete unit test that passes, and the main takeaways bel package org.example.dokka.plugin import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest -import org.junit.Test +import kotlin.test.Test import kotlin.test.assertEquals class HideInternalApiPluginTest : BaseAbstractTest() { diff --git a/examples/plugin/hide-internal-api/src/test/kotlin/org/example/dokka/plugin/HideInternalApiPluginTest.kt b/examples/plugin/hide-internal-api/src/test/kotlin/org/example/dokka/plugin/HideInternalApiPluginTest.kt index f98208d0..64853492 100644 --- a/examples/plugin/hide-internal-api/src/test/kotlin/org/example/dokka/plugin/HideInternalApiPluginTest.kt +++ b/examples/plugin/hide-internal-api/src/test/kotlin/org/example/dokka/plugin/HideInternalApiPluginTest.kt @@ -1,7 +1,7 @@ package org.example.dokka.plugin import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest -import org.junit.Test +import kotlin.test.Test import kotlin.test.assertEquals class HideInternalApiPluginTest : BaseAbstractTest() { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9170c40b..815c479e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,7 +52,6 @@ gradlePlugin-gradleNode = "3.5.1" ## Test junit = "5.9.2" -assertk = "0.25" eclipse-jgit = "5.12.0.202106070339-r" [libraries] @@ -115,11 +114,11 @@ apacheMaven-artifact = { module = "org.apache.maven:maven-artifact", version.ref kotlinx-cli = { module = "org.jetbrains.kotlinx:kotlinx-cli-jvm", version.ref = "kotlinx-cli" } #### Test dependencies #### -assertk = { module = "com.willowtreeapps.assertk:assertk", version.ref = "assertk" } eclipse-jgit = { module = "org.eclipse.jgit:org.eclipse.jgit", version.ref = "eclipse-jgit" } junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } -junit-jupiter = { module = "org.junit.jupiter:junit-jupiter" } +junit-jupiterApi = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" } +junit-jupiterParams = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" } [plugins] # Gradle Plugins that are applied directly to subprojects diff --git a/integration-tests/build.gradle.kts b/integration-tests/build.gradle.kts index a3173af0..eba1dd47 100644 --- a/integration-tests/build.gradle.kts +++ b/integration-tests/build.gradle.kts @@ -3,7 +3,11 @@ plugins { } dependencies { - implementation(kotlin("test-junit")) + // Classes from src rely on JUnit's @TempDir and Kotlin's @AfterTest, + // thus these dependencies are needed. Ideally, they should be removed. + implementation(kotlin("test-junit5")) + implementation(libs.junit.jupiterApi) + implementation(libs.kotlinx.coroutines.core) implementation(libs.jsoup) implementation(libs.eclipse.jgit) diff --git a/integration-tests/cli/build.gradle.kts b/integration-tests/cli/build.gradle.kts index e20529a4..d5e70548 100644 --- a/integration-tests/cli/build.gradle.kts +++ b/integration-tests/cli/build.gradle.kts @@ -10,7 +10,7 @@ evaluationDependsOn(":runners:cli") evaluationDependsOn(":plugins:base") dependencies { - implementation(kotlin("test-junit")) + implementation(kotlin("test-junit5")) implementation(projects.integrationTests) } diff --git a/integration-tests/cli/src/main/kotlin/org/jetbrains/dokka/it/cli/AbstractCliIntegrationTest.kt b/integration-tests/cli/src/main/kotlin/org/jetbrains/dokka/it/cli/AbstractCliIntegrationTest.kt index 7f6f9433..881f1c28 100644 --- a/integration-tests/cli/src/main/kotlin/org/jetbrains/dokka/it/cli/AbstractCliIntegrationTest.kt +++ b/integration-tests/cli/src/main/kotlin/org/jetbrains/dokka/it/cli/AbstractCliIntegrationTest.kt @@ -8,11 +8,11 @@ import kotlin.test.assertTrue abstract class AbstractCliIntegrationTest : AbstractIntegrationTest() { protected val cliJarFile: File by lazy { - File(temporaryTestFolder.root, "dokka.jar") + File(tempFolder, "dokka.jar") } protected val basePluginJarFile: File by lazy { - File(temporaryTestFolder.root, "base-plugin.jar") + File(tempFolder, "base-plugin.jar") } @BeforeTest diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index 4c7a0398..7f0cb8d1 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -7,7 +7,10 @@ plugins { dependencies { implementation(projects.integrationTests) - implementation(kotlin("test-junit")) + implementation(kotlin("test-junit5")) + implementation(libs.junit.jupiterApi) + implementation(libs.junit.jupiterParams) + implementation(gradleTestKit()) implementation(libs.jsoup) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt index 539941e0..6fc4e691 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt @@ -2,10 +2,12 @@ package org.jetbrains.dokka.it.gradle import org.gradle.util.GradleVersion import java.io.File -import kotlin.test.* +import kotlin.test.assertEquals +import kotlin.test.assertTrue -abstract class AbstractGradleCachingIntegrationTest(override val versions: BuildVersions): AbstractGradleIntegrationTest() { - fun setupProject(project: File) { +abstract class AbstractGradleCachingIntegrationTest : AbstractGradleIntegrationTest() { + + fun setupProject(buildVersions: BuildVersions, project: File) { val templateProjectDir = File("projects", "it-basic") project.mkdirs() templateProjectDir.listFiles().orEmpty() @@ -22,7 +24,7 @@ abstract class AbstractGradleCachingIntegrationTest(override val versions: Build } // clean local cache for each test - if (versions.gradleVersion >= GradleVersion.version("7.0")) { + if (buildVersions.gradleVersion >= GradleVersion.version("7.0")) { //Gradle 7.0 removed the old syntax project.toPath().resolve("settings.gradle.kts").toFile().appendText( """ @@ -133,4 +135,4 @@ abstract class AbstractGradleCachingIntegrationTest(override val versions: Build } assertTrue(imagesDir.resolve("custom-resource.svg").isFile) } -} \ No newline at end of file +} diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt index 95eaf596..396183a8 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt @@ -1,19 +1,19 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.* -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* -import kotlin.test.Test +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class Android0GradleIntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { +internal class AndroidTestedVersionsArgumentsProvider : TestedVersionsArgumentsProvider(TestedVersions.ANDROID) - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = TestedVersions.ANDROID +class Android0GradleIntegrationTest : AbstractGradleIntegrationTest() { + companion object { /** * Indicating whether or not the current machine executing the test is a CI */ @@ -24,9 +24,10 @@ class Android0GradleIntegrationTest(override val versions: BuildVersions) : Abst fun assumeAndroidSdkInstalled() { if (isCI) return - Assume.assumeTrue(isAndroidSdkInstalled) + if (!isAndroidSdkInstalled) { + throw IllegalStateException("Expected Android SDK to be installed") + } } - } @BeforeTest @@ -43,9 +44,10 @@ class Android0GradleIntegrationTest(override val versions: BuildVersions) : Abst File(templateProjectDir, "src").copyRecursively(File(projectDir, "src")) } - @Test - fun execute() { - val result = createGradleRunner("dokkaHtml", "-i", "-s").buildRelaxed() + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AndroidTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + val result = createGradleRunner(buildVersions, "dokkaHtml", "-i", "-s").buildRelaxed() assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome) val htmlOutputDir = File(projectDir, "build/dokka/html") diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicCachingIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicCachingIntegrationTest.kt index 66a13f7e..4af7b82e 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicCachingIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicCachingIntegrationTest.kt @@ -1,31 +1,30 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class BasicCachingIntegrationTest(override val versions: BuildVersions) : AbstractGradleCachingIntegrationTest(versions) { +class BasicCachingIntegrationTest : AbstractGradleCachingIntegrationTest() { - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } - @BeforeTest - fun setupProjectFiles(){ - setupProject(projectDir) - } + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + setupProject(buildVersions, projectDir) - @Test - fun execute() { - runAndAssertOutcomeAndContents(TaskOutcome.SUCCESS) - runAndAssertOutcomeAndContents(TaskOutcome.FROM_CACHE) + runAndAssertOutcomeAndContents(buildVersions, TaskOutcome.SUCCESS) + runAndAssertOutcomeAndContents(buildVersions, TaskOutcome.FROM_CACHE) } - @Test - fun localDirectoryPointingToRoot() { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun localDirectoryPointingToRoot(buildVersions: BuildVersions) { + setupProject(buildVersions, projectDir) + fun String.findAndReplace(oldValue: String, newValue: String): String { assertTrue(oldValue in this, "Expected to replace '$oldValue'") return replace(oldValue, newValue) @@ -37,26 +36,27 @@ class BasicCachingIntegrationTest(override val versions: BuildVersions) : Abstra .findAndReplace("integration-tests/gradle/projects/it-basic/src/main", "integration-tests/gradle/projects/it-basic") .also { projectKts.writeText(it) } - runAndAssertOutcomeAndContents(TaskOutcome.SUCCESS) + runAndAssertOutcomeAndContents(buildVersions, TaskOutcome.SUCCESS) projectDir.resolve("unrelated.txt").writeText("modified") // despite projectDir is used as an input in localDirectory, changing its contents shouldn't invalidate the cache - runAndAssertOutcomeAndContents(TaskOutcome.FROM_CACHE) + runAndAssertOutcomeAndContents(buildVersions, TaskOutcome.FROM_CACHE) projectKts.readText() .findAndReplace("localDirectory.set(projectDir)", "localDirectory.set(file(\"src\"))") .also { projectKts.writeText(it) } // changing localDirectory path invalidates cached task results - runAndAssertOutcome(TaskOutcome.SUCCESS) + runAndAssertOutcome(buildVersions, TaskOutcome.SUCCESS) } - private fun runAndAssertOutcomeAndContents(expectedOutcome: TaskOutcome) { - runAndAssertOutcome(expectedOutcome) + private fun runAndAssertOutcomeAndContents(buildVersions: BuildVersions, expectedOutcome: TaskOutcome) { + runAndAssertOutcome(buildVersions, expectedOutcome) File(projectDir, "build/dokka/html").assertHtmlOutputDir() } - private fun runAndAssertOutcome(expectedOutcome: TaskOutcome) { + private fun runAndAssertOutcome(buildVersions: BuildVersions, expectedOutcome: TaskOutcome) { val result = createGradleRunner( + buildVersions, "clean", "dokkaHtml", "-i", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt index d3598591..212003a2 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt @@ -1,17 +1,15 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class BasicGradleIntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class BasicGradleIntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -32,14 +30,16 @@ class BasicGradleIntegrationTest(override val versions: BuildVersions) : Abstrac } } - @Test - fun execute() { - runAndAssertOutcome(TaskOutcome.SUCCESS) - runAndAssertOutcome(TaskOutcome.UP_TO_DATE) + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + runAndAssertOutcome(buildVersions, TaskOutcome.SUCCESS) + runAndAssertOutcome(buildVersions, TaskOutcome.UP_TO_DATE) } - private fun runAndAssertOutcome(expectedOutcome: TaskOutcome) { + private fun runAndAssertOutcome(buildVersions: BuildVersions, expectedOutcome: TaskOutcome) { val result = createGradleRunner( + buildVersions, "dokkaHtml", "dokkaJavadoc", "dokkaGfm", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt index e54a140c..f0d00ac3 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt @@ -1,21 +1,15 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File +import kotlin.test.BeforeTest import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertTrue -import kotlin.test.BeforeTest -import kotlin.test.Test -class BasicGroovyIntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameterized.Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class BasicGroovyIntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -28,9 +22,10 @@ class BasicGroovyIntegrationTest(override val versions: BuildVersions) : Abstrac File(templateProjectDir, "src").copyRecursively(File(projectDir, "src")) } - @Test - fun execute() { - val result = createGradleRunner("dokkaHtml", "dokkaJavadoc", "dokkaGfm", "dokkaJekyll", "-i", "-s") + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + val result = createGradleRunner(buildVersions, "dokkaHtml", "dokkaJavadoc", "dokkaGfm", "dokkaJekyll", "-i", "-s") .buildRelaxed() assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Collector0IntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Collector0IntegrationTest.kt index 0a0a48f7..637c16aa 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Collector0IntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Collector0IntegrationTest.kt @@ -1,16 +1,15 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class Collector0IntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - companion object { - @get:JvmStatic - @get:Parameterized.Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class Collector0IntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -21,9 +20,11 @@ class Collector0IntegrationTest(override val versions: BuildVersions) : Abstract File(templateProjectDir, "moduleA").copyRecursively(File(projectDir, "moduleA")) } - @Test - fun execute() { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { val result = createGradleRunner( + buildVersions, ":moduleA:dokkaHtmlCollector", ":moduleA:dokkaJavadocCollector", ":moduleA:dokkaGfmCollector", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/ConfigurationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/ConfigurationTest.kt index acb7c71e..735ea7aa 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/ConfigurationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/ConfigurationTest.kt @@ -1,9 +1,12 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull /** * Tests for Dokka's configuration options of the Gradle runner. @@ -17,13 +20,7 @@ import kotlin.test.* * key `name` and value `value`, which you can use to set the corresponding option's value * using Dokka's configuration DSL. */ -class ConfigurationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = listOf(TestedVersions.LATEST) - } +class ConfigurationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -40,10 +37,14 @@ class ConfigurationTest(override val versions: BuildVersions) : AbstractGradleIn * The test project contains some undocumented declarations, so if both `reportUndocumented` * and `failOnWarning` are enabled - it should fail */ - @Test + @ParameterizedTest(name = "{0}") + @ArgumentsSource(LatestTestedVersionsArgumentsProvider::class) @Suppress("FunctionName") - fun `should fail with DokkaException and readable message if failOnWarning is triggered`() { + fun `should fail with DokkaException and readable message if failOnWarning is triggered`( + buildVersions: BuildVersions + ) { val result = createGradleRunner( + buildVersions, "-info", "-stacktrace", "-Preport_undocumented=true", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/GradleRelocatedCachingIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/GradleRelocatedCachingIntegrationTest.kt index b45caf77..05703a15 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/GradleRelocatedCachingIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/GradleRelocatedCachingIntegrationTest.kt @@ -1,34 +1,29 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.assertEquals +import kotlin.test.assertNotNull -class GradleRelocatedCachingIntegrationTest(override val versions: BuildVersions) : AbstractGradleCachingIntegrationTest(versions) { +class GradleRelocatedCachingIntegrationTest : AbstractGradleCachingIntegrationTest() { - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } - - @BeforeTest - fun prepareProjectFiles() { - setupProject(projectFolder(1)) - setupProject(projectFolder(2)) - } + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + setupProject(buildVersions, projectFolder(1)) + setupProject(buildVersions, projectFolder(2)) - @Test - fun execute() { - runAndAssertOutcomeAndContents(projectFolder(1), TaskOutcome.SUCCESS) - runAndAssertOutcomeAndContents(projectFolder(2), TaskOutcome.FROM_CACHE) + runAndAssertOutcomeAndContents(buildVersions, projectFolder(1), TaskOutcome.SUCCESS) + runAndAssertOutcomeAndContents(buildVersions, projectFolder(2), TaskOutcome.FROM_CACHE) } - private fun runAndAssertOutcomeAndContents(project: File, expectedOutcome: TaskOutcome) { - val result = createGradleRunner("clean", "dokkaHtml", "-i", "-s", "-Dorg.gradle.caching.debug=true", "--build-cache") - .withProjectDir(project) - .buildRelaxed() + private fun runAndAssertOutcomeAndContents(buildVersions: BuildVersions, project: File, expectedOutcome: TaskOutcome) { + val result = createGradleRunner( + buildVersions, + "clean", "dokkaHtml", "-i", "-s", "-Dorg.gradle.caching.debug=true", "--build-cache" + ).withProjectDir(project).buildRelaxed() assertEquals(expectedOutcome, assertNotNull(result.task(":dokkaHtml")).outcome) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt index 25986c88..8b10e1d2 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/JsIRGradleIntegrationTest.kt @@ -1,17 +1,15 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class JsIRGradleIntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class JsIRGradleIntegrationTest : AbstractGradleIntegrationTest() { private val ignoredKotlinVersions = setOf( // There were some breaking refactoring changes in kotlin react wrapper libs in 1.4.0 -> 1.5.0, @@ -34,15 +32,16 @@ class JsIRGradleIntegrationTest(override val versions: BuildVersions) : Abstract File(templateProjectDir, "src").copyRecursively(File(projectDir, "src")) } - @Test - fun execute() { - if (ignoredKotlinVersions.contains(versions.kotlinVersion)) { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + if (ignoredKotlinVersions.contains(buildVersions.kotlinVersion)) { return } - val reactVersion = TestedVersions.KT_REACT_WRAPPER_MAPPING[versions.kotlinVersion] - ?: throw IllegalStateException("Unspecified version of react for kotlin " + versions.kotlinVersion) - val result = createGradleRunner("-Preact_version=$reactVersion", "dokkaHtml", "-i", "-s").buildRelaxed() + val reactVersion = TestedVersions.KT_REACT_WRAPPER_MAPPING[buildVersions.kotlinVersion] + ?: throw IllegalStateException("Unspecified version of react for kotlin " + buildVersions.kotlinVersion) + val result = createGradleRunner(buildVersions, "-Preact_version=$reactVersion", "dokkaHtml", "-i", "-s").buildRelaxed() assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome) val htmlOutputDir = File(projectDir, "build/dokka/html") diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt index 497dee0e..92cc33ee 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt @@ -1,16 +1,12 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File import kotlin.test.* -class MultiModule0IntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - companion object { - @get:JvmStatic - @get:Parameterized.Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class MultiModule0IntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -21,9 +17,11 @@ class MultiModule0IntegrationTest(override val versions: BuildVersions) : Abstra File(templateProjectDir, "moduleA").copyRecursively(File(projectDir, "moduleA")) } - @Test - fun execute() { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { val result = createGradleRunner( + buildVersions, ":moduleA:dokkaHtmlMultiModule", ":moduleA:dokkaGfmMultiModule", ":moduleA:dokkaJekyllMultiModule", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt index 8786e0da..c01acab2 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule1IntegrationTest.kt @@ -1,19 +1,18 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue /** * This tests mainly checks if linking to relocated methods with no package works */ -class MultiModule1IntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - companion object { - @get:JvmStatic - @get:Parameterized.Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class MultiModule1IntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -25,9 +24,11 @@ class MultiModule1IntegrationTest(override val versions: BuildVersions) : Abstra File(templateProjectDir, "second").copyRecursively(File(projectDir, "second")) } - @Test - fun execute() { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { val result = createGradleRunner( + buildVersions, ":second:dokkaHtml", "-i", "-s" ).buildRelaxed() diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt index e73f6c82..8be1ba4e 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Multiplatform0GradleIntegrationTest.kt @@ -1,17 +1,15 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue -class Multiplatform0GradleIntegrationTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameterized.Parameters(name = "{0}") - val versions = TestedVersions.ALL_SUPPORTED - } +class Multiplatform0GradleIntegrationTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -22,9 +20,10 @@ class Multiplatform0GradleIntegrationTest(override val versions: BuildVersions) File(templateProjectDir, "src").copyRecursively(File(projectDir, "src")) } - @Test - fun execute() { - val result = createGradleRunner("dokkaHtml", "-i", "-s").buildRelaxed() + @ParameterizedTest(name = "{0}") + @ArgumentsSource(AllSupportedTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { + val result = createGradleRunner(buildVersions, "dokkaHtml", "-i", "-s").buildRelaxed() assertEquals(TaskOutcome.SUCCESS, assertNotNull(result.task(":dokkaHtml")).outcome) diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/SequentialTasksExecutionStressTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/SequentialTasksExecutionStressTest.kt index 62eea6bf..49ebcbcc 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/SequentialTasksExecutionStressTest.kt +++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/SequentialTasksExecutionStressTest.kt @@ -1,9 +1,12 @@ package org.jetbrains.dokka.it.gradle import org.gradle.testkit.runner.TaskOutcome -import org.junit.runners.Parameterized.Parameters +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ArgumentsSource import java.io.File -import kotlin.test.* +import kotlin.test.BeforeTest +import kotlin.test.assertEquals +import kotlin.test.assertNotNull /** * Creates 100 tasks for the test project and runs them sequentially under low memory settings. @@ -11,13 +14,7 @@ import kotlin.test.* * If the test passes, it's likely there are no noticeable memory leaks. * If it fails, it's likely that memory is leaking somewhere. */ -class SequentialTasksExecutionStressTest(override val versions: BuildVersions) : AbstractGradleIntegrationTest() { - - companion object { - @get:JvmStatic - @get:Parameters(name = "{0}") - val versions = listOf(TestedVersions.LATEST) - } +class SequentialTasksExecutionStressTest : AbstractGradleIntegrationTest() { @BeforeTest fun prepareProjectFiles() { @@ -30,9 +27,11 @@ class SequentialTasksExecutionStressTest(override val versions: BuildVersions) : File(templateProjectDir, "src").copyRecursively(File(projectDir, "src")) } - @Test - fun execute() { + @ParameterizedTest(name = "{0}") + @ArgumentsSource(LatestTestedVersionsArgumentsProvider::class) + fun execute(buildVersions: BuildVersions) { val result = createGradleRunner( + buildVersions, "runTasks", "--info", "--stacktrace", diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt index eb39ef4f..d0423e44 100644 --- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/TestedVersions.kt +++ b/i