From 46b4bbb68ce1285a1aea700cc0d0000c6b7ed97b Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Wed, 12 Feb 2020 18:05:24 +0100 Subject: Moves all core tests to base plugin --- plugins/base/src/test/kotlin/basic/DRITest.kt | 168 +++++++++++++++++++++ .../base/src/test/kotlin/basic/DokkaBasicTests.kt | 41 +++++ 2 files changed, 209 insertions(+) create mode 100644 plugins/base/src/test/kotlin/basic/DRITest.kt create mode 100644 plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt new file mode 100644 index 00000000..c7dc85fb --- /dev/null +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -0,0 +1,168 @@ +package basic + +import org.jetbrains.dokka.links.* +import org.jetbrains.dokka.pages.ContentPage +import org.jetbrains.dokka.pages.asSequence +import org.junit.Assert.assertEquals +import org.junit.Test +import testApi.testRunner.AbstractCoreTest + +class DRITest : AbstractCoreTest() { + @Test + fun `#634`() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package toplevel + | + |inline fun > Array.mySortBy( + | crossinline selector: (T) -> R?): Array = TODO() + |} + """.trimMargin(), + configuration + ) { + documentablesMergingStage = { module -> + val expected = TypeConstructor( + "kotlin.Function1", listOf( + TypeParam(listOf(Nullable(TypeConstructor("kotlin.Any", emptyList())))), + Nullable(TypeParam(listOf(TypeConstructor("kotlin.Comparable", listOf(SelfType))))) + ) + ) + val actual = module.packages.single() + .functions.single() + .dri.callable?.params?.single() + assertEquals(expected, actual) + } + } + } + + @Test + fun `#634 with immediate nullable self`() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package toplevel + | + |fun > Array.doSomething(t: T?): Array = TODO() + |} + """.trimMargin(), + configuration + ) { + documentablesMergingStage = { module -> + val expected = Nullable(TypeParam(listOf(TypeConstructor("kotlin.Comparable", listOf(SelfType))))) + val actual = module.packages.single() + .functions.single() + .dri.callable?.params?.single() + assertEquals(expected, actual) + } + } + } + + @Test + fun `#634 with generic nullable receiver`() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package toplevel + | + |fun > T?.doSomethingWithNullable() = TODO() + |} + """.trimMargin(), + configuration + ) { + documentablesMergingStage = { module -> + val expected = Nullable(TypeParam(listOf(TypeConstructor("kotlin.Comparable", listOf(SelfType))))) + val actual = module.packages.single() + .functions.single() + .dri.callable?.receiver + assertEquals(expected, actual) + } + } + } + + @Test + fun `#642 with * and Any?`() { + val configuration = dokkaConfiguration { + passes { + pass { + analysisPlatform = "js" + sourceRoots = listOf("src/") + } + } + } + + testInline( + """ + |/src/main/kotlin/Test.kt + | + |open class Bar + |class ReBarBar : Bar() + |class Foo, R : List>> + | + |fun > Foo.qux(): String = TODO() + |fun > Foo.qux(): String = TODO() + | + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { module -> + // DRI(//qux/Foo[TypeParam(bounds=[kotlin.Comparable[kotlin.Any?]]),kotlin.Any?]#//) + val expectedDRI = DRI( + "", + null, + Callable( + "qux", + TypeConstructor( + "Foo", + listOf( + TypeParam( + listOf( + TypeConstructor( + "kotlin.Comparable", + listOf( + Nullable(TypeConstructor("kotlin.Any", emptyList())) + ) + ) + ) + ), + Nullable(TypeConstructor("kotlin.Any", emptyList())) + ) + ), + emptyList() + ) + ) + + val driCount = module + .asSequence() + .filterIsInstance() + .sumBy { it.dri.count { dri -> dri == expectedDRI } } + + assertEquals(1, driCount) + } + } + } +} \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt new file mode 100644 index 00000000..021f110c --- /dev/null +++ b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt @@ -0,0 +1,41 @@ +package basic + +import org.jetbrains.dokka.pages.ClasslikePageNode +import org.jetbrains.dokka.pages.ModulePageNode +import org.junit.Test +import testApi.testRunner.AbstractCoreTest + +class DokkaBasicTests : AbstractCoreTest() { + + @Test + fun basic1() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/main/kotlin/basic/Test.kt") + } + } + } + + testInline( + """ + |/src/main/kotlin/basic/Test.kt + |package basic + | + |class Test { + | val tI = 1 + | fun tF() = 2 + |} + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { + println(it.dri) + assert(it.getClasslikeToMemberMap().filterKeys { it.name == "Test" }.entries.firstOrNull()?.value?.size == 5) + } + } + } + + fun ModulePageNode.getClasslikeToMemberMap() = + this.parentMap.filterValues { it is ClasslikePageNode }.entries.groupBy ({it.value}){it.key} +} \ No newline at end of file -- cgit From 91b5b4cc19a4ef6155cadba04ad016625402b00e Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Tue, 18 Feb 2020 11:59:52 +0100 Subject: Fixes not recognizing star projection in dris --- core/src/main/kotlin/links/DRI.kt | 6 +++++- plugins/base/src/test/kotlin/basic/DRITest.kt | 15 ++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/core/src/main/kotlin/links/DRI.kt b/core/src/main/kotlin/links/DRI.kt index b7e5dd1c..220ed719 100644 --- a/core/src/main/kotlin/links/DRI.kt +++ b/core/src/main/kotlin/links/DRI.kt @@ -101,7 +101,7 @@ sealed class TypeReference { private fun fromProjection(t: TypeProjection, r: KotlinType? = null): TypeReference = if (t.isStarProjection) { - Nullable(TypeConstructor("kotlin.Any", emptyList())) + StarProjection } else { fromPossiblyNullable(t.type, r) } @@ -130,6 +130,10 @@ data class Nullable(val wrapped: TypeReference) : TypeReference() { override fun toString() = "$wrapped?" } +object StarProjection: TypeReference() { + override fun toString() = "*" +} + private operator fun List.component6(): T = get(5) private val KotlinType.constructorName diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index c7dc85fb..eb65c47b 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -130,26 +130,23 @@ class DRITest : AbstractCoreTest() { configuration ) { pagesGenerationStage = { module -> - // DRI(//qux/Foo[TypeParam(bounds=[kotlin.Comparable[kotlin.Any?]]),kotlin.Any?]#//) + // DRI(//qux/Foo[TypeParam(bounds=[kotlin.Comparable[kotlin.Any?]]),*]#//) val expectedDRI = DRI( "", null, Callable( - "qux", - TypeConstructor( - "Foo", - listOf( + "qux", TypeConstructor( + "Foo", listOf( TypeParam( listOf( TypeConstructor( - "kotlin.Comparable", - listOf( + "kotlin.Comparable", listOf( Nullable(TypeConstructor("kotlin.Any", emptyList())) ) ) ) ), - Nullable(TypeConstructor("kotlin.Any", emptyList())) + StarProjection ) ), emptyList() @@ -165,4 +162,4 @@ class DRITest : AbstractCoreTest() { } } } -} \ No newline at end of file +} -- cgit From ac590359174995a16a116a96dbb9df5dafa042f5 Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Fri, 28 Feb 2020 16:30:17 +0100 Subject: Test api moved to sensible package --- plugins/base/src/test/kotlin/basic/DRITest.kt | 2 +- plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt | 2 +- plugins/base/src/test/kotlin/enums/EnumsTest.kt | 2 +- plugins/base/src/test/kotlin/expect/ExpectTest.kt | 2 +- plugins/base/src/test/kotlin/markdown/KDocTest.kt | 2 +- .../test/kotlin/multiplatform/BasicMultiplatformTest.kt | 2 +- .../src/test/kotlin/pageMerger/PageNodeMergerTest.kt | 2 +- plugins/base/src/test/kotlin/utils/ModelUtils.kt | 2 +- plugins/base/src/test/kotlin/utils/TestUtils.kt | 2 +- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 2 +- .../main/kotlin/testApi/testRunner/DokkaTestGenerator.kt | 2 +- testApi/src/main/kotlin/testApi/testRunner/TestRunner.kt | 16 +++++++++++++--- 12 files changed, 24 insertions(+), 14 deletions(-) (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index eb65c47b..ca8e4bad 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -5,7 +5,7 @@ import org.jetbrains.dokka.pages.ContentPage import org.jetbrains.dokka.pages.asSequence import org.junit.Assert.assertEquals import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class DRITest : AbstractCoreTest() { @Test diff --git a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt index 021f110c..0405b91c 100644 --- a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt +++ b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt @@ -3,7 +3,7 @@ package basic import org.jetbrains.dokka.pages.ClasslikePageNode import org.jetbrains.dokka.pages.ModulePageNode import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class DokkaBasicTests : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/enums/EnumsTest.kt b/plugins/base/src/test/kotlin/enums/EnumsTest.kt index efc46595..9ea100a3 100644 --- a/plugins/base/src/test/kotlin/enums/EnumsTest.kt +++ b/plugins/base/src/test/kotlin/enums/EnumsTest.kt @@ -3,7 +3,7 @@ package enums import org.jetbrains.dokka.pages.ClasslikePageNode import org.jetbrains.dokka.pages.ModulePageNode import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class EnumsTest : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/expect/ExpectTest.kt b/plugins/base/src/test/kotlin/expect/ExpectTest.kt index 3a85db17..c6c252ed 100644 --- a/plugins/base/src/test/kotlin/expect/ExpectTest.kt +++ b/plugins/base/src/test/kotlin/expect/ExpectTest.kt @@ -1,7 +1,7 @@ package expect import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths diff --git a/plugins/base/src/test/kotlin/markdown/KDocTest.kt b/plugins/base/src/test/kotlin/markdown/KDocTest.kt index 5099c46f..e250670a 100644 --- a/plugins/base/src/test/kotlin/markdown/KDocTest.kt +++ b/plugins/base/src/test/kotlin/markdown/KDocTest.kt @@ -4,7 +4,7 @@ import org.jetbrains.dokka.model.Package import org.jetbrains.dokka.model.doc.DocumentationNode import org.jetbrains.dokka.pages.ModulePageNode import org.junit.Assert -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest open class KDocTest : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt index ae5b4e06..e9605c5f 100644 --- a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt +++ b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt @@ -2,7 +2,7 @@ package multiplatform import org.junit.Assert.assertEquals import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class BasicMultiplatformTest : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt b/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt index c6076d54..4b90604e 100644 --- a/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt +++ b/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt @@ -8,7 +8,7 @@ import org.jetbrains.dokka.base.transformers.pages.merger.SameMethodNamePageMerg import org.jetbrains.dokka.utilities.DokkaLogger import org.junit.Ignore import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class PageNodeMergerTest : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/utils/ModelUtils.kt b/plugins/base/src/test/kotlin/utils/ModelUtils.kt index 6893c65f..75c8e008 100644 --- a/plugins/base/src/test/kotlin/utils/ModelUtils.kt +++ b/plugins/base/src/test/kotlin/utils/ModelUtils.kt @@ -2,7 +2,7 @@ package utils import org.jetbrains.dokka.model.Module import org.jetbrains.dokka.model.doc.DocumentationNode -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest abstract class AbstractModelTest(val path: String? = null, val pkg: String) : ModelDSL(), AssertDSL { diff --git a/plugins/base/src/test/kotlin/utils/TestUtils.kt b/plugins/base/src/test/kotlin/utils/TestUtils.kt index 641c68a2..6913ba5b 100644 --- a/plugins/base/src/test/kotlin/utils/TestUtils.kt +++ b/plugins/base/src/test/kotlin/utils/TestUtils.kt @@ -5,7 +5,7 @@ import org.jetbrains.dokka.model.Documentable import org.jetbrains.dokka.model.Function import org.jetbrains.dokka.model.Property import org.jetbrains.dokka.model.doc.* -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest import kotlin.reflect.KClass import kotlin.reflect.full.safeCast diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt index 6186283f..780f326a 100644 --- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt +++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt @@ -5,7 +5,7 @@ import org.jetbrains.dokka.pages.ContentPage import org.jetbrains.dokka.pages.ContentTable import org.jetbrains.dokka.pages.children import org.junit.Test -import testApi.testRunner.AbstractCoreTest +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class KotlinAsJavaPluginTest : AbstractCoreTest() { diff --git a/testApi/src/main/kotlin/testApi/testRunner/DokkaTestGenerator.kt b/testApi/src/main/kotlin/testApi/testRunner/DokkaTestGenerator.kt index 33f0aff8..ddee7083 100644 --- a/testApi/src/main/kotlin/testApi/testRunner/DokkaTestGenerator.kt +++ b/testApi/src/main/kotlin/testApi/testRunner/DokkaTestGenerator.kt @@ -1,4 +1,4 @@ -package testApi.testRunner +package org.jetbrains.dokka.testApi.testRunner import org.jetbrains.dokka.DokkaConfiguration import org.jetbrains.dokka.DokkaGenerator diff --git a/testApi/src/main/kotlin/testApi/testRunner/TestRunner.kt b/testApi/src/main/kotlin/testApi/testRunner/TestRunner.kt index 485567ac..4c754211 100644 --- a/testApi/src/main/kotlin/testApi/testRunner/TestRunner.kt +++ b/testApi/src/main/kotlin/testApi/testRunner/TestRunner.kt @@ -1,4 +1,4 @@ -package testApi.testRunner +package org.jetbrains.dokka.testApi.testRunner import org.jetbrains.dokka.* import org.jetbrains.dokka.model.Module @@ -38,7 +38,12 @@ abstract class AbstractCoreTest { configuration.copy( outputDir = tempDir.root.toPath().toAbsolutePath().toString() ) - DokkaTestGenerator(newConfiguration, logger, testMethods, pluginOverrides).generate() + DokkaTestGenerator( + newConfiguration, + logger, + testMethods, + pluginOverrides + ).generate() } protected fun testInline( @@ -61,7 +66,12 @@ abstract class AbstractCoreTest { passesConfigurations = configuration.passesConfigurations .map { it.copy(sourceRoots = it.sourceRoots.map { it.copy(path = "${testDirPath.toAbsolutePath()}/${it.path}") }) } ) - DokkaTestGenerator(newConfiguration, logger, testMethods, pluginOverrides).generate() + DokkaTestGenerator( + newConfiguration, + logger, + testMethods, + pluginOverrides + ).generate() } private fun String.toFileMap(): Map = this.trimMargin().removePrefix("|") -- cgit From 4002c4e91cb42ef77e93cac57ac49823629d33da Mon Sep 17 00:00:00 2001 From: Szymon Świstun Date: Thu, 27 Feb 2020 14:50:27 +0100 Subject: Add expect with generation --- plugins/base/src/test/kotlin/basic/DRITest.kt | 5 +- .../base/src/test/kotlin/basic/DokkaBasicTests.kt | 9 +- plugins/base/src/test/kotlin/enums/EnumsTest.kt | 20 +- .../src/test/kotlin/expect/AbstractExpectTest.kt | 104 +++ .../base/src/test/kotlin/expect/ExpectGenerator.kt | 15 + plugins/base/src/test/kotlin/expect/ExpectTest.kt | 70 +- plugins/base/src/test/kotlin/expect/ExpectUtils.kt | 28 + plugins/base/src/test/kotlin/issues/IssuesTest.kt | 2 +- plugins/base/src/test/kotlin/markdown/KDocTest.kt | 4 +- .../base/src/test/kotlin/markdown/ParserTest.kt | 761 +++++++++++++-------- plugins/base/src/test/kotlin/model/ClassesTest.kt | 6 +- plugins/base/src/test/kotlin/model/CommentTest.kt | 2 +- .../base/src/test/kotlin/model/FunctionsTest.kt | 2 +- .../base/src/test/kotlin/model/InheritorsTest.kt | 2 +- plugins/base/src/test/kotlin/model/JavaTest.kt | 6 +- plugins/base/src/test/kotlin/model/PackagesTest.kt | 2 +- plugins/base/src/test/kotlin/model/PropertyTest.kt | 2 +- .../kotlin/multiplatform/BasicMultiplatformTest.kt | 4 +- .../test/kotlin/pageMerger/PageNodeMergerTest.kt | 19 +- .../kotlin/renderers/html/GroupWrappingTest.kt | 2 +- .../renderers/html/PlatformDependentHintTest.kt | 5 +- .../expect/annotatedFunction/out/html/-search.html | 23 + .../annotatedFunction/out/html/navigation.html | 10 + .../expect/annotatedFunction/out/html/root/f.html | 20 + .../annotatedFunction/out/html/root/index.html | 31 + .../annotatedFunction/src/annotatedFunction.kt | 2 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 25 + .../out/html/root/-fancy/-init-.html | 30 + .../out/html/root/-fancy/equals.html | 30 + .../out/html/root/-fancy/hash-code.html | 20 + .../out/html/root/-fancy/index.html | 61 ++ .../out/html/root/-fancy/to-string.html | 20 + .../out/html/root/f.html | 20 + .../out/html/root/index.html | 42 ++ .../annotatedFunctionWithAnnotationParameters.kt | 7 + .../expect/function/out/html/-search.html | 23 + .../expect/function/out/html/navigation.html | 10 + .../expect/function/out/html/root/fn.html | 23 + .../expect/function/out/html/root/index.html | 31 + .../test/resources/expect/function/src/function.kt | 5 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 25 + .../out/html/root/-fancy/-init-.html | 20 + .../out/html/root/-fancy/equals.html | 30 + .../out/html/root/-fancy/hash-code.html | 20 + .../out/html/root/-fancy/index.html | 51 ++ .../out/html/root/-fancy/to-string.html | 20 + .../out/html/root/function.html | 30 + .../out/html/root/index.html | 42 ++ .../src/functionWithAnnotatedParam.kt | 7 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 10 + .../out/html/root/f.html | 30 + .../out/html/root/index.html | 31 + .../src/functionWithDefaultParameter.kt | 1 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 10 + .../out/html/root/function.html | 30 + .../out/html/root/index.html | 31 + .../src/functionWithNoinlineParam.kt | 2 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 10 + .../out/html/root/f.html | 20 + .../out/html/root/index.html | 31 + .../src/functionWithNotDocumentedAnnotation.kt | 2 + .../functionWithParams/out/html/-search.html | 23 + .../functionWithParams/out/html/navigation.html | 10 + .../functionWithParams/out/html/root/function.html | 34 + .../functionWithParams/out/html/root/index.html | 31 + .../functionWithParams/src/functionWithParams.kt | 8 + .../functionWithReceiver/out/html/-search.html | 23 + .../functionWithReceiver/out/html/navigation.html | 10 + .../functionWithReceiver/out/html/root/fn.html | 38 + .../functionWithReceiver/out/html/root/index.html | 36 + .../src/functionWithReceiver.kt | 11 + .../expect/genericFunction/out/html/-search.html | 23 + .../genericFunction/out/html/navigation.html | 10 + .../genericFunction/out/html/root/generic.html | 23 + .../genericFunction/out/html/root/index.html | 31 + .../expect/genericFunction/src/genericFunction.kt | 5 + .../out/html/-search.html | 23 + .../out/html/navigation.html | 10 + .../out/html/root/generic.html | 23 + .../out/html/root/index.html | 31 + .../src/genericFunctionWithConstraints.kt | 6 + .../expect/inlineFunction/out/html/-search.html | 23 + .../expect/inlineFunction/out/html/navigation.html | 10 + .../expect/inlineFunction/out/html/root/f.html | 30 + .../expect/inlineFunction/out/html/root/index.html | 31 + .../expect/inlineFunction/src/inlineFunction.kt | 2 + .../inlineSuspendFunction/out/html/-search.html | 23 + .../inlineSuspendFunction/out/html/navigation.html | 10 + .../inlineSuspendFunction/out/html/root/f.html | 30 + .../inlineSuspendFunction/out/html/root/index.html | 31 + .../src/inlineSuspendFunction.kt | 2 + .../expect/sinceKotlin/out/html/-search.html | 23 + .../expect/sinceKotlin/out/html/navigation.html | 10 + .../out/html/root/available-since1.1.html | 23 + .../expect/sinceKotlin/out/html/root/index.html | 31 + .../expect/sinceKotlin/src/sinceKotlin.kt | 5 + .../expect/suspendFunction/out/html/-search.html | 23 + .../suspendFunction/out/html/navigation.html | 10 + .../expect/suspendFunction/out/html/root/f.html | 20 + .../suspendFunction/out/html/root/index.html | 31 + .../expect/suspendFunction/src/suspendFunction.kt | 2 + .../suspendInlineFunction/out/html/-search.html | 23 + .../suspendInlineFunction/out/html/navigation.html | 10 + .../suspendInlineFunction/out/html/root/f.html | 30 + .../suspendInlineFunction/out/html/root/index.html | 31 + .../src/suspendInlineFunction.kt | 2 + .../test/resources/expect/test/out/-search.html | 23 - .../expect/test/out/images/arrow_down.svg | 3 - .../resources/expect/test/out/images/logo-icon.svg | 3 - .../resources/expect/test/out/images/logo-text.svg | 6 - .../test/resources/expect/test/out/navigation.html | 10 - .../test/resources/expect/test/out/root/fn.html | 23 - .../test/resources/expect/test/out/root/index.html | 31 - .../expect/test/out/scripts/navigationLoader.js | 12 - .../resources/expect/test/out/scripts/pages.js | 5 - .../resources/expect/test/out/scripts/scripts.js | 11 - .../resources/expect/test/out/scripts/search.js | 5 - .../resources/expect/test/out/styles/style.css | 353 ---------- .../src/test/resources/expect/test/src/function.kt | 5 - plugins/build.gradle.kts | 10 +- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 2 +- 126 files changed, 2563 insertions(+), 885 deletions(-) create mode 100644 plugins/base/src/test/kotlin/expect/AbstractExpectTest.kt create mode 100644 plugins/base/src/test/kotlin/expect/ExpectGenerator.kt create mode 100644 plugins/base/src/test/kotlin/expect/ExpectUtils.kt create mode 100644 plugins/base/src/test/resources/expect/annotatedFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunction/src/annotatedFunction.kt create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/-init-.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/equals.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/hash-code.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/index.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/to-string.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt create mode 100644 plugins/base/src/test/resources/expect/function/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/function/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/function/out/html/root/fn.html create mode 100644 plugins/base/src/test/resources/expect/function/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/function/src/function.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/-init-.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/equals.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/hash-code.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/to-string.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/function.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithDefaultParameter/src/functionWithDefaultParameter.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/function.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNoinlineParam/src/functionWithNoinlineParam.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/src/functionWithNotDocumentedAnnotation.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithParams/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithParams/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithParams/out/html/root/function.html create mode 100644 plugins/base/src/test/resources/expect/functionWithParams/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithParams/src/functionWithParams.kt create mode 100644 plugins/base/src/test/resources/expect/functionWithReceiver/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/functionWithReceiver/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/fn.html create mode 100644 plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/functionWithReceiver/src/functionWithReceiver.kt create mode 100644 plugins/base/src/test/resources/expect/genericFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/genericFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/genericFunction/out/html/root/generic.html create mode 100644 plugins/base/src/test/resources/expect/genericFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/genericFunction/src/genericFunction.kt create mode 100644 plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/generic.html create mode 100644 plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/genericFunctionWithConstraints/src/genericFunctionWithConstraints.kt create mode 100644 plugins/base/src/test/resources/expect/inlineFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/inlineFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/inlineFunction/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/inlineFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/inlineFunction/src/inlineFunction.kt create mode 100644 plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/inlineSuspendFunction/src/inlineSuspendFunction.kt create mode 100644 plugins/base/src/test/resources/expect/sinceKotlin/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/sinceKotlin/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/available-since1.1.html create mode 100644 plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/sinceKotlin/src/sinceKotlin.kt create mode 100644 plugins/base/src/test/resources/expect/suspendFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/suspendFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/suspendFunction/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/suspendFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/suspendFunction/src/suspendFunction.kt create mode 100644 plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/-search.html create mode 100644 plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/navigation.html create mode 100644 plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/f.html create mode 100644 plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/index.html create mode 100644 plugins/base/src/test/resources/expect/suspendInlineFunction/src/suspendInlineFunction.kt delete mode 100644 plugins/base/src/test/resources/expect/test/out/-search.html delete mode 100644 plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg delete mode 100644 plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg delete mode 100644 plugins/base/src/test/resources/expect/test/out/images/logo-text.svg delete mode 100644 plugins/base/src/test/resources/expect/test/out/navigation.html delete mode 100644 plugins/base/src/test/resources/expect/test/out/root/fn.html delete mode 100644 plugins/base/src/test/resources/expect/test/out/root/index.html delete mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js delete mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/pages.js delete mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/scripts.js delete mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/search.js delete mode 100644 plugins/base/src/test/resources/expect/test/out/styles/style.css delete mode 100644 plugins/base/src/test/resources/expect/test/src/function.kt (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index ca8e4bad..0e1f095e 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -3,10 +3,11 @@ package basic import org.jetbrains.dokka.links.* import org.jetbrains.dokka.pages.ContentPage import org.jetbrains.dokka.pages.asSequence -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Test + class DRITest : AbstractCoreTest() { @Test fun `#634`() { diff --git a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt index 0405b91c..dae1b2be 100644 --- a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt +++ b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt @@ -2,7 +2,8 @@ package basic import org.jetbrains.dokka.pages.ClasslikePageNode import org.jetbrains.dokka.pages.ModulePageNode -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class DokkaBasicTests : AbstractCoreTest() { @@ -31,11 +32,11 @@ class DokkaBasicTests : AbstractCoreTest() { ) { pagesGenerationStage = { println(it.dri) - assert(it.getClasslikeToMemberMap().filterKeys { it.name == "Test" }.entries.firstOrNull()?.value?.size == 5) + assertTrue(it.getClasslikeToMemberMap().filterKeys { it.name == "Test" }.entries.firstOrNull()?.value?.size == 5) } } } - fun ModulePageNode.getClasslikeToMemberMap() = - this.parentMap.filterValues { it is ClasslikePageNode }.entries.groupBy ({it.value}){it.key} + private fun ModulePageNode.getClasslikeToMemberMap() = + this.parentMap.filterValues { it is ClasslikePageNode }.entries.groupBy({ it.value }) { it.key } } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/enums/EnumsTest.kt b/plugins/base/src/test/kotlin/enums/EnumsTest.kt index 34e92d82..55ad0fbc 100644 --- a/plugins/base/src/test/kotlin/enums/EnumsTest.kt +++ b/plugins/base/src/test/kotlin/enums/EnumsTest.kt @@ -3,9 +3,9 @@ package enums import org.jetbrains.dokka.model.DEnum import org.jetbrains.dokka.pages.ClasslikePageNode import org.jetbrains.dokka.pages.ModulePageNode -import org.junit.Assert.* -import org.junit.Test +import org.junit.jupiter.api.Test import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Assertions.* class EnumsTest : AbstractCoreTest() { @@ -65,11 +65,11 @@ class EnumsTest : AbstractCoreTest() { configuration ) { documentablesCreationStage = {m -> - assertTrue("Module list cannot be empty", m.isNotEmpty()) + assertTrue(m.isNotEmpty(), "Module list cannot be empty") m.first().packages.let { p -> - assertTrue("Package list cannot be empty", p.isNotEmpty()) + assertTrue(p.isNotEmpty(), "Package list cannot be empty") p.first().classlikes.let { c -> - assertTrue("Classlikes list cannot be empty", c.isNotEmpty()) + assertTrue(c.isNotEmpty(), "Classlikes list cannot be empty") val enum = c.first() as DEnum assertEquals(enum.name, "Test") @@ -78,12 +78,12 @@ class EnumsTest : AbstractCoreTest() { } } } - pagesGenerationStage = { - val map = it.getClasslikeToMemberMap() + pagesGenerationStage = { module -> + val map = module.getClasslikeToMemberMap() val test = map.filterKeys { it.name == "Test" }.values.firstOrNull() - assert(test != null) { "Test not found" } - assert(test!!.any { it.name == "E1" } && test.any { it.name == "E2" }) { "Enum entries missing in parent" } - assert(map.keys.any { it.name == "E1" } && map.keys.any { it.name == "E2" }) { "Enum entries missing" } + assertNotNull(test, "Test not found") + assertTrue(test!!.any { it.name == "E1" } && test.any { it.name == "E2" }) { "Enum entries missing in parent" } + assertTrue(map.keys.any { it.name == "E1" } && map.keys.any { it.name == "E2" }) { "Enum entries missing" } } } } diff --git a/plugins/base/src/test/kotlin/expect/AbstractExpectTest.kt b/plugins/base/src/test/kotlin/expect/AbstractExpectTest.kt new file mode 100644 index 00000000..ef97b04c --- /dev/null +++ b/plugins/base/src/test/kotlin/expect/AbstractExpectTest.kt @@ -0,0 +1,104 @@ +package expect + +import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Assertions.assertTrue +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.util.concurrent.TimeUnit + +abstract class AbstractExpectTest( + val testDir: Path? = Paths.get("src/test", "resources", "expect"), + val formats: List = listOf("html") +) : AbstractCoreTest() { + + protected fun generateOutput(path: Path, outFormat: String): Path? { + val config = dokkaConfiguration { + format = outFormat + passes { + pass { + sourceRoots = listOf(path.asString()) + } + } + } + + var result: Path? = null + testFromData(config, cleanupOutput = false) { + renderingStage = { _, context -> result = Paths.get(context.configuration.outputDir) } + } + return result + } + + protected fun compareOutput(expected: Path, obtained: Path?, gitTimeout: Long = 500) { + obtained?.let { path -> + val gitCompare = ProcessBuilder( + "git", + "--no-pager", + "diff", + expected.asString(), + path.asString() + ).also { logger.info("git diff command: ${it.command().joinToString(" ")}") } + .also { it.redirectErrorStream() }.start() + + assertTrue(gitCompare.waitFor(gitTimeout, TimeUnit.MILLISECONDS)) { "Git timed out after $gitTimeout" } + gitCompare.inputStream.bufferedReader().lines().forEach { logger.info(it) } + assertTrue(gitCompare.exitValue() == 0) { "${path.fileName}: outputs don't match" } + } ?: throw AssertionError("obtained path is null") + } + + protected fun compareOutputWithExcludes( + expected: Path, + obtained: Path?, + excludes: List, + timeout: Long = 500 + ) { + obtained?.let { path -> + val (res, out, err) = runDiff(expected, obtained, excludes, timeout) + assertTrue(res == 0, "Outputs differ:\nstdout - $out\n\nstderr - ${err ?: ""}") + } ?: throw AssertionError("obtained path is null") + } + + protected fun runDiff(exp: Path, obt: Path, excludes: List, timeout: Long): ProcessResult = + ProcessBuilder().command( + listOf("diff", "-ru") + excludes.flatMap { listOf("-x", it) } + listOf("--", exp.asString(), obt.asString()) + ).also { + it.redirectErrorStream() + }.start().also { assertTrue(it.waitFor(timeout, TimeUnit.MILLISECONDS), "diff timed out") }.let { + ProcessResult(it.exitValue(), it.inputStream.bufferResult()) + } + + + protected fun testOutput(p: Path, outFormat: String) { + val expectOut = p.resolve("out/$outFormat") + val testOut = generateOutput(p.resolve("src"), outFormat) + .also { logger.info("Test out: ${it?.asString()}") } + + compareOutput(expectOut.toAbsolutePath(), testOut?.toAbsolutePath()) + testOut?.deleteRecursively() + } + + protected fun testOutputWithExcludes( + p: Path, + outFormat: String, + ignores: List = emptyList(), + timeout: Long = 500 + ) { + val expected = p.resolve("out/$outFormat") + generateOutput(p.resolve("src"), outFormat) + ?.let { obtained -> + compareOutputWithExcludes(expected, obtained, ignores, timeout) + + obtained.deleteRecursively() + } ?: throw AssertionError("Output not generated for ${p.fileName}") + } + + protected fun generateExpect(p: Path, outFormat: String) { + val out = p.resolve("out/$outFormat/") + Files.createDirectories(out) + + val ret = generateOutput(p.resolve("src"), outFormat) + Files.list(out).forEach { it.deleteRecursively() } + ret?.let { Files.list(it).forEach { f -> f.copyRecursively(out.resolve(f.fileName)) } } + } + +} \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/expect/ExpectGenerator.kt b/plugins/base/src/test/kotlin/expect/ExpectGenerator.kt new file mode 100644 index 00000000..667fc249 --- /dev/null +++ b/plugins/base/src/test/kotlin/expect/ExpectGenerator.kt @@ -0,0 +1,15 @@ +package expect + +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import java.nio.file.Files +import java.nio.file.Path + +class ExpectGenerator : AbstractExpectTest() { + + @Disabled + @Test + fun generateAll() = testDir?.dirsWithFormats(formats).orEmpty().forEach { (p, f) -> + generateExpect(p, f) + } +} \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/expect/ExpectTest.kt b/plugins/base/src/test/kotlin/expect/ExpectTest.kt index c6c252ed..0423a5b4 100644 --- a/plugins/base/src/test/kotlin/expect/ExpectTest.kt +++ b/plugins/base/src/test/kotlin/expect/ExpectTest.kt @@ -1,62 +1,18 @@ package expect -import org.junit.Test -import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.Paths -import java.util.concurrent.TimeUnit - -class ExpectTest : AbstractCoreTest() { - - private fun generateOutput(path: Path): Path? { - val config = dokkaConfiguration { - passes { - pass { - sourceRoots = listOf(path.asString()) - } - } - } - - var result: Path? = null - testFromData(config, cleanupOutput = false) { - renderingStage = { _, context -> result = Paths.get(context.configuration.outputDir) } - } - return result - } - - private fun compareOutput(expected: Path, obtained: Path?, gitTimeout: Long = 500) { - obtained?.let { path -> - val gitCompare = ProcessBuilder( - "git", - "--no-pager", - "diff", - expected.asString(), - path.asString() - ).also { logger.info("git diff command: ${it.command().joinToString(" ")}") } - .start() - - assert(gitCompare.waitFor(gitTimeout, TimeUnit.MILLISECONDS)) { "Git timed out after $gitTimeout" } - gitCompare.inputStream.bufferedReader().lines().forEach { logger.info(it) } - gitCompare.errorStream.bufferedReader().lines().forEach { logger.info(it) } - assert(gitCompare.exitValue() == 0) { "${path.fileName}: outputs don't match" } - } ?: throw AssertionError("obtained path is null") +import org.junit.jupiter.api.DynamicTest.dynamicTest +import org.junit.jupiter.api.TestFactory + +class ExpectTest : AbstractExpectTest() { + private val ignores: List = listOf( + "*.js", + "*.css", + "*.svg" + ) + + @TestFactory + fun expectTest() = testDir?.dirsWithFormats(formats).orEmpty().map { (p, f) -> + dynamicTest("${p.fileName}-$f") { testOutputWithExcludes(p, f, ignores) } } - @Test - fun expectTest() { - val sources = Paths.get("src/test", "resources", "expect") - - Files.list(sources).forEach { p -> - val expectOut = p.resolve("out") - val testOut = generateOutput(p.resolve("src")) - .also { logger.info("Test out: ${it?.asString()}") } - - compareOutput(expectOut, testOut) - testOut?.toFile()?.deleteRecursively() - } - } - - fun Path.asString() = toAbsolutePath().normalize().toString() - } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/expect/ExpectUtils.kt b/plugins/base/src/test/kotlin/expect/ExpectUtils.kt new file mode 100644 index 00000000..4ea46dda --- /dev/null +++ b/plugins/base/src/test/kotlin/expect/ExpectUtils.kt @@ -0,0 +1,28 @@ +package expect + +import java.io.InputStream +import java.nio.file.Files +import java.nio.file.Path +import kotlin.streams.toList + +data class ProcessResult(val code: Int, val out: String, val err: String? = null) + +internal fun Path.dirsWithFormats(formats: List): List> = + Files.list(this).toList().flatMap { p -> formats.map { p to it } } + +internal fun Path.asString() = normalize().toString() +internal fun Path.deleteRecursively() = toFile().deleteRecursively() + +internal fun Path.copyRecursively(target: Path) = toFile().copyRecursively(target.toFile()) + +internal fun Path.listRecursively(filter: (Path) -> Boolean): List = when { + Files.isDirectory(this) -> listOfNotNull(takeIf(filter)) + Files.list(this).toList().flatMap { + it.listRecursively( + filter + ) + } + Files.isRegularFile(this) -> listOfNotNull(this.takeIf(filter)) + else -> emptyList() + } + +internal fun InputStream.bufferResult(): String = this.bufferedReader().lines().toList().joinToString("\n") \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/issues/IssuesTest.kt b/plugins/base/src/test/kotlin/issues/IssuesTest.kt index 1ad7a97b..41fc2632 100644 --- a/plugins/base/src/test/kotlin/issues/IssuesTest.kt +++ b/plugins/base/src/test/kotlin/issues/IssuesTest.kt @@ -2,7 +2,7 @@ package issues import org.jetbrains.dokka.model.DClass import org.jetbrains.dokka.model.DFunction -import org.junit.Test +import org.junit.jupiter.api.Test import utils.AbstractModelTest import utils.name diff --git a/plugins/base/src/test/kotlin/markdown/KDocTest.kt b/plugins/base/src/test/kotlin/markdown/KDocTest.kt index fa538c3e..a904f725 100644 --- a/plugins/base/src/test/kotlin/markdown/KDocTest.kt +++ b/plugins/base/src/test/kotlin/markdown/KDocTest.kt @@ -3,7 +3,7 @@ package markdown import org.jetbrains.dokka.model.DPackage import org.jetbrains.dokka.model.doc.DocumentationNode import org.jetbrains.dokka.pages.ModulePageNode -import org.junit.Assert +import org.junit.jupiter.api.Assertions.* import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest open class KDocTest : AbstractCoreTest() { @@ -37,7 +37,7 @@ open class KDocTest : AbstractCoreTest() { configuration ) { pagesGenerationStage = { - Assert.assertEquals( + assertEquals( expectedDocumentationNode, actualDocumentationNode(it) ) diff --git a/plugins/base/src/test/kotlin/markdown/ParserTest.kt b/plugins/base/src/test/kotlin/markdown/ParserTest.kt index dee8e907..332c9766 100644 --- a/plugins/base/src/test/kotlin/markdown/ParserTest.kt +++ b/plugins/base/src/test/kotlin/markdown/ParserTest.kt @@ -2,13 +2,14 @@ package org.jetbrains.dokka.tests import markdown.KDocTest import org.jetbrains.dokka.model.doc.* -import org.junit.Ignore -import org.junit.Test +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test class ParserTest : KDocTest() { - @Test fun `Simple text`() { + @Test + fun `Simple text`() { val kdoc = """ | This is simple test of string | Next line @@ -23,7 +24,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Simple text with new line`() { + @Test + fun `Simple text with new line`() { val kdoc = """ | This is simple test of string\ | Next line @@ -31,18 +33,21 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Text("This is simple test of string"), - Br, - Text("Next line") - )) + P( + listOf( + Text("This is simple test of string"), + Br, + Text("Next line") + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Text with Bold and Emphasis decorators`() { + @Test + fun `Text with Bold and Emphasis decorators`() { val kdoc = """ | This is **simple** test of _string_ | Next **_line_** @@ -66,7 +71,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Text with Colon`() { + @Test + fun `Text with Colon`() { val kdoc = """ | This is simple text with: colon! """.trimMargin() @@ -80,7 +86,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Multilined text`() { + @Test + fun `Multilined text`() { val kdoc = """ | Text | and @@ -96,7 +103,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Paragraphs`() { + @Test + fun `Paragraphs`() { val kdoc = """ | Paragraph number | one @@ -119,7 +127,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Emphasis with star`() { + @Test + fun `Emphasis with star`() { val kdoc = " *text*" val expectedDocumentationNode = DocumentationNode( listOf( @@ -131,7 +140,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Underscores that are not Emphasis`() { + @Test + fun `Underscores that are not Emphasis`() { val kdoc = "text_with_underscores" val expectedDocumentationNode = DocumentationNode( listOf( @@ -143,7 +153,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Emphasis with underscores`() { + @Test + fun `Emphasis with underscores`() { val kdoc = "_text_" val expectedDocumentationNode = DocumentationNode( listOf( @@ -155,7 +166,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Embedded star`() { + @Test + fun `Embedded star`() { val kdoc = "Embedded*Star" val expectedDocumentationNode = DocumentationNode( listOf( @@ -168,7 +180,8 @@ class ParserTest : KDocTest() { } - @Test fun `Unordered list`() { + @Test + fun `Unordered list`() { val kdoc = """ | * list item 1 | * list item 2 @@ -188,7 +201,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Unordered list with multilines`() { + @Test + fun `Unordered list with multilines`() { val kdoc = """ | * list item 1 | continue 1 @@ -210,7 +224,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Unordered list with Bold`() { + @Test + fun `Unordered list with Bold`() { val kdoc = """ | * list **item** 1 | continue 1 @@ -220,25 +235,40 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - Ul(listOf( - Li(listOf(P(listOf( - Text("list "), - B(listOf(Text("item"))), - Text(" 1 continue 1") - )))), - Li(listOf(P(listOf( - Text("list "), - B(listOf(Text("item"))), - Text(" 2 continue 2") - )))) - )) + Ul( + listOf( + Li( + listOf( + P( + listOf( + Text("list "), + B(listOf(Text("item"))), + Text(" 1 continue 1") + ) + ) + ) + ), + Li( + listOf( + P( + listOf( + Text("list "), + B(listOf(Text("item"))), + Text(" 2 continue 2") + ) + ) + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Unordered list with nested bullets`() { + @Test + fun `Unordered list with nested bullets`() { val kdoc = """ | * Outer first | Outer next line @@ -255,29 +285,38 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Ul(listOf( - Li(listOf(P(listOf(Text("Outer first Outer next line"))))), - Li(listOf(P(listOf(Text("Outer second"))))), - Ul(listOf( - Li(listOf(P(listOf(Text("Middle first Middle next line"))))), - Li(listOf(P(listOf(Text("Middle second"))))), - Ul(listOf( - Li(listOf(P(listOf(Text("Inner first Inner next line"))))) - )), - Li(listOf(P(listOf(Text("Middle third"))))) - )), - Li(listOf(P(listOf(Text("Outer third"))))) - )), - P(listOf(Text("New paragraph"))) - )) + P( + listOf( + Ul( + listOf( + Li(listOf(P(listOf(Text("Outer first Outer next line"))))), + Li(listOf(P(listOf(Text("Outer second"))))), + Ul( + listOf( + Li(listOf(P(listOf(Text("Middle first Middle next line"))))), + Li(listOf(P(listOf(Text("Middle second"))))), + Ul( + listOf( + Li(listOf(P(listOf(Text("Inner first Inner next line"))))) + ) + ), + Li(listOf(P(listOf(Text("Middle third"))))) + ) + ), + Li(listOf(P(listOf(Text("Outer third"))))) + ) + ), + P(listOf(Text("New paragraph"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Ordered list`() { + @Test + fun `Ordered list`() { val kdoc = """ | 1. list item 1 | 2. list item 2 @@ -299,7 +338,8 @@ class ParserTest : KDocTest() { } - @Test fun `Ordered list beginning from other number`() { + @Test + fun `Ordered list beginning from other number`() { val kdoc = """ | 9. list item 1 | 12. list item 2 @@ -320,7 +360,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Ordered list with multilines`() { + @Test + fun `Ordered list with multilines`() { val kdoc = """ | 2. list item 1 | continue 1 @@ -343,7 +384,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Ordered list with Bold`() { + @Test + fun `Ordered list with Bold`() { val kdoc = """ | 1. list **item** 1 | continue 1 @@ -353,17 +395,30 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - Ol(listOf( - Li(listOf(P(listOf( - Text("list "), - B(listOf(Text("item"))), - Text(" 1 continue 1") - )))), - Li(listOf(P(listOf( - Text("list "), - B(listOf(Text("item"))), - Text(" 2 continue 2") - )))) + Ol( + listOf( + Li( + listOf( + P( + listOf( + Text("list "), + B(listOf(Text("item"))), + Text(" 1 continue 1") + ) + ) + ) + ), + Li( + listOf( + P( + listOf( + Text("list "), + B(listOf(Text("item"))), + Text(" 2 continue 2") + ) + ) + ) + ) ), mapOf("start" to "1") ) @@ -373,7 +428,8 @@ class ParserTest : KDocTest() { executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Ordered list with nested bullets`() { + @Test + fun `Ordered list with nested bullets`() { val kdoc = """ | 1. Outer first | Outer next line @@ -390,35 +446,41 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Ol(listOf( - Li(listOf(P(listOf(Text("Outer first Outer next line"))))), - Li(listOf(P(listOf(Text("Outer second"))))), - Ol(listOf( - Li(listOf(P(listOf(Text("Middle first Middle next line"))))), - Li(listOf(P(listOf(Text("Middle second"))))), - Ol(listOf( - Li(listOf(P(listOf(Text("Inner first Inner next line"))))) + P( + listOf( + Ol( + listOf( + Li(listOf(P(listOf(Text("Outer first Outer next line"))))), + Li(listOf(P(listOf(Text("Outer second"))))), + Ol( + listOf( + Li(listOf(P(listOf(Text("Middle first Middle next line"))))), + Li(listOf(P(listOf(Text("Middle second"))))), + Ol( + listOf( + Li(listOf(P(listOf(Text("Inner first Inner next line"))))) + ), + mapOf("start" to "1") + ), + Li(listOf(P(listOf(Text("Middle third"))))) + ), + mapOf("start" to "1") ), - mapOf("start" to "1") - ), - Li(listOf(P(listOf(Text("Middle third"))))) + Li(listOf(P(listOf(Text("Outer third"))))) ), mapOf("start" to "1") ), - Li(listOf(P(listOf(Text("Outer third"))))) - ), - mapOf("start" to "1") - ), - P(listOf(Text("New paragraph"))) - )) + P(listOf(Text("New paragraph"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Ordered nested in Unordered nested in Ordered list`() { + @Test + fun `Ordered nested in Unordered nested in Ordered list`() { val kdoc = """ | 1. Outer first | Outer next line @@ -435,33 +497,40 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Ol(listOf( - Li(listOf(P(listOf(Text("Outer first Outer next line"))))), - Li(listOf(P(listOf(Text("Outer second"))))), - Ul(listOf( - Li(listOf(P(listOf(Text("Middle first Middle next line"))))), - Li(listOf(P(listOf(Text("Middle second"))))), - Ol(listOf( - Li(listOf(P(listOf(Text("Inner first Inner next line"))))) - ), - mapOf("start" to "1") + P( + listOf( + Ol( + listOf( + Li(listOf(P(listOf(Text("Outer first Outer next line"))))), + Li(listOf(P(listOf(Text("Outer second"))))), + Ul( + listOf( + Li(listOf(P(listOf(Text("Middle first Middle next line"))))), + Li(listOf(P(listOf(Text("Middle second"))))), + Ol( + listOf( + Li(listOf(P(listOf(Text("Inner first Inner next line"))))) + ), + mapOf("start" to "1") + ), + Li(listOf(P(listOf(Text("Middle third"))))) + ) + ), + Li(listOf(P(listOf(Text("Outer third"))))) ), - Li(listOf(P(listOf(Text("Middle third"))))) - )), - Li(listOf(P(listOf(Text("Outer third"))))) - ), - mapOf("start" to "1") - ), - P(listOf(Text("New paragraph"))) - )) + mapOf("start" to "1") + ), + P(listOf(Text("New paragraph"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Header and two paragraphs`() { + @Test + fun `Header and two paragraphs`() { val kdoc = """ | # Header 1 | Following text @@ -471,19 +540,22 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - H1(listOf(Text("Header 1"))), - P(listOf(Text("Following text"))), - P(listOf(Text("New paragraph"))) - )) + P( + listOf( + H1(listOf(Text("Header 1"))), + P(listOf(Text("Following text"))), + P(listOf(Text("New paragraph"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Ignore //TODO: ATX_2 to ATX_6 and sometimes ATX_1 from jetbrains parser consumes white space. Need to handle it in their library - @Test fun `All headers`() { + @Disabled //TODO: ATX_2 to ATX_6 and sometimes ATX_1 from jetbrains parser consumes white space. Need to handle it in their library + @Test + fun `All headers`() { val kdoc = """ | # Header 1 | Text 1 @@ -501,27 +573,30 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - H1(listOf(Text("Header 1"))), - P(listOf(Text("Text 1"))), - H2(listOf(Text("Header 2"))), - P(listOf(Text("Text 2"))), - H3(listOf(Text("Header 3"))), - P(listOf(Text("Text 3"))), - H4(listOf(Text("Header 4"))), - P(listOf(Text("Text 4"))), - H5(listOf(Text("Header 5"))), - P(listOf(Text("Text 5"))), - H6(listOf(Text("Header 6"))), - P(listOf(Text("Text 6"))) - )) + P( + listOf( + H1(listOf(Text("Header 1"))), + P(listOf(Text("Text 1"))), + H2(listOf(Text("Header 2"))), + P(listOf(Text("Text 2"))), + H3(listOf(Text("Header 3"))), + P(listOf(Text("Text 3"))), + H4(listOf(Text("Header 4"))), + P(listOf(Text("Text 4"))), + H5(listOf(Text("Header 5"))), + P(listOf(Text("Text 5"))), + H6(listOf(Text("Header 6"))), + P(listOf(Text("Text 6"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Bold New Line Bold`() { + @Test + fun `Bold New Line Bold`() { val kdoc = """ | **line 1**\ | **line 2** @@ -529,18 +604,21 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - B(listOf(Text("line 1"))), - Br, - B(listOf(Text("line 2"))) - )) + P( + listOf( + B(listOf(Text("line 1"))), + Br, + B(listOf(Text("line 2"))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Horizontal rule`() { + @Test + fun `Horizontal rule`() { val kdoc = """ | *** | text 1 @@ -555,24 +633,27 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - HorizontalRule, - P(listOf(Text("text 1"))), - HorizontalRule, - P(listOf(Text("text 2"))), - HorizontalRule, - P(listOf(Text("text 3"))), - HorizontalRule, - P(listOf(Text("text 4"))), - HorizontalRule - )) + P( + listOf( + HorizontalRule, + P(listOf(Text("text 1"))), + HorizontalRule, + P(listOf(Text("text 2"))), + HorizontalRule, + P(listOf(Text("text 3"))), + HorizontalRule, + P(listOf(Text("text 4"))), + HorizontalRule + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Blockquote`() { + @Test + fun `Blockquote`() { val kdoc = """ | > Blockquotes are very handy in email to emulate reply text. | > This line is part of the same quote. @@ -584,17 +665,25 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - BlockQuote(listOf( - P(listOf( - Text("Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.") - )) - )), - P(listOf(Text("Quote break."))), - BlockQuote(listOf( - P(listOf(Text("Quote"))) - )) - )) + P( + listOf( + BlockQuote( + listOf( + P( + listOf( + Text("Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.") + ) + ) + ) + ), + P(listOf(Text("Quote break."))), + BlockQuote( + listOf( + P(listOf(Text("Quote"))) + ) + ) + ) + ) ) ) ) @@ -602,7 +691,8 @@ class ParserTest : KDocTest() { } - @Test fun `Blockquote nested`() { + @Test + fun `Blockquote nested`() { val kdoc = """ | > text 1 | > text 2 @@ -618,27 +708,36 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - BlockQuote(listOf( - P(listOf(Text("text 1 text 2"))), - BlockQuote(listOf( - P(listOf(Text("text 3 text 4"))) - )), - P(listOf(Text("text 5"))) - )), - P(listOf(Text("Quote break."))), - BlockQuote(listOf( - P(listOf(Text("Quote"))) - )) - )) + P( + listOf( + BlockQuote( + listOf( + P(listOf(Text("text 1 text 2"))), + BlockQuote( + listOf( + P(listOf(Text("text 3 text 4"))) + ) + ), + P(listOf(Text("text 5"))) + ) + ), + P(listOf(Text("Quote break."))), + BlockQuote( + listOf( + P(listOf(Text("Quote"))) + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Ignore //TODO: Again ATX_1 consumes white space - @Test fun `Blockquote nested with fancy text enhancement`() { + @Disabled //TODO: Again ATX_1 consumes white space + @Test + fun `Blockquote nested with fancy text enhancement`() { val kdoc = """ | > text **1** | > text 2 @@ -655,36 +754,51 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - BlockQuote(listOf( - P(listOf( - Text("text "), - B(listOf(Text("1"))), - Text("\ntext 2") - )), - BlockQuote(listOf( - H1(listOf(Text("text 3"))), - Ul(listOf( - Li(listOf(P(listOf(Text("text 4"))))), - Ul(listOf( - Li(listOf(P(listOf(Text("text 5"))))) - ) - ))) - )), - P(listOf(Text("text 6"))) - )), - P(listOf(Text("Quote break."))), - BlockQuote(listOf( - P(listOf(Text("Quote"))) - )) - )) + P( + listOf( + BlockQuote( + listOf( + P( + listOf( + Text("text "), + B(listOf(Text("1"))), + Text("\ntext 2") + ) + ), + BlockQuote( + listOf( + H1(listOf(Text("text 3"))), + Ul( + listOf( + Li(listOf(P(listOf(Text("text 4"))))), + Ul( + listOf( + Li(listOf(P(listOf(Text("text 5"))))) + ) + ) + ) + ) + ) + ), + P(listOf(Text("text 6"))) + ) + ), + P(listOf(Text("Quote break."))), + BlockQuote( + listOf( + P(listOf(Text("Quote"))) + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Simple Code Block`() { + @Test + fun `Simple Code Block`() { val kdoc = """ | `Some code` | Sample text @@ -692,17 +806,20 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Code(listOf(Text("Some code"))), - Text(" Sample text") - )) + P( + listOf( + Code(listOf(Text("Some code"))), + Text(" Sample text") + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Multilined Code Block`() { + @Test + fun `Multilined Code Block`() { val kdoc = """ | ```kotlin | val x: Int = 0 @@ -718,20 +835,22 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Code( - listOf( - Text("val x: Int = 0"), Br, - Text("val y: String = \"Text\""), Br, Br, - Text(" val z: Boolean = true"), Br, - Text("for(i in 0..10) {"), Br, - Text(" println(i)"), Br, - Text("}") + P( + listOf( + Code( + listOf( + Text("val x: Int = 0"), Br, + Text("val y: String = \"Text\""), Br, Br, + Text(" val z: Boolean = true"), Br, + Text("for(i in 0..10) {"), Br, + Text(" println(i)"), Br, + Text("}") + ), + mapOf("lang" to "kotlin") ), - mapOf("lang" to "kotlin") - ), - P(listOf(Text("Sample text"))) - )) + P(listOf(Text("Sample text"))) + ) + ) ) ) ) @@ -739,41 +858,52 @@ class ParserTest : KDocTest() { } - @Test fun `Inline link`() { + @Test + fun `Inline link`() { val kdoc = """ | [I'm an inline-style link](https://www.google.com) """.trimMargin() val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf(A( - listOf(Text("I'm an inline-style link")), - mapOf("href" to "https://www.google.com") - ))) + P( + listOf( + A( + listOf(Text("I'm an inline-style link")), + mapOf("href" to "https://www.google.com") + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Inline link with title`() { + @Test + fun `Inline link with title`() { val kdoc = """ | [I'm an inline-style link with title](https://www.google.com "Google's Homepage") """.trimMargin() val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf(A( - listOf(Text("I'm an inline-style link with title")), - mapOf("href" to "https://www.google.com", "title" to "Google's Homepage") - ))) + P( + listOf( + A( + listOf(Text("I'm an inline-style link with title")), + mapOf("href" to "https://www.google.com", "title" to "Google's Homepage") + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Full reference link`() { + @Test + fun `Full reference link`() { val kdoc = """ | [I'm a reference-style link][Arbitrary case-insensitive reference text] | @@ -782,17 +912,26 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf(P(listOf(A( - listOf(Text("I'm a reference-style link")), - mapOf("href" to "https://www.mozilla.org") - ))))) + P( + listOf( + P( + listOf( + A( + listOf(Text("I'm a reference-style link")), + mapOf("href" to "https://www.mozilla.org") + ) + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Full reference link with number`() { + @Test + fun `Full reference link with number`() { val kdoc = """ | [You can use numbers for reference-style link definitions][1] | @@ -801,17 +940,26 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf(P(listOf(A( - listOf(Text("You can use numbers for reference-style link definitions")), - mapOf("href" to "http://slashdot.org") - ))))) + P( + listOf( + P( + listOf( + A( + listOf(Text("You can use numbers for reference-style link definitions")), + mapOf("href" to "http://slashdot.org") + ) + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Short reference link`() { + @Test + fun `Short reference link`() { val kdoc = """ | Or leave it empty and use the [link text itself]. | @@ -820,21 +968,28 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf(P(listOf( - Text("Or leave it empty and use the "), - A( - listOf(Text("link text itself")), - mapOf("href" to "http://www.reddit.com") - ), - Text(".") - )))) + P( + listOf( + P( + listOf( + Text("Or leave it empty and use the "), + A( + listOf(Text("link text itself")), + mapOf("href" to "http://www.reddit.com") + ), + Text(".") + ) + ) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Autolink`() { + @Test + fun `Autolink`() { val kdoc = """ | URLs and URLs in angle brackets will automatically get turned into links. | http://www.example.com or and sometimes @@ -843,21 +998,24 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Text("URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or "), - A( - listOf(Text("http://www.example.com")), - mapOf("href" to "http://www.example.com") - ), - Text(" and sometimes example.com (but not on Github, for example).") - )) + P( + listOf( + Text("URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or "), + A( + listOf(Text("http://www.example.com")), + mapOf("href" to "http://www.example.com") + ), + Text(" and sometimes example.com (but not on Github, for example).") + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Various links`() { + @Test + fun `Various links`() { val kdoc = """ | [I'm an inline-style link](https://www.google.com) | @@ -882,55 +1040,80 @@ class ParserTest : KDocTest() { val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - P(listOf(A( - listOf(Text("I'm an inline-style link")), - mapOf("href" to "https://www.google.com") - ))), - P(listOf(A( - listOf(Text("I'm an inline-style link with title")), - mapOf("href" to "https://www.google.com", "title" to "Google's Homepage") - ))), - P(listOf(A( - listOf(Text("I'm a reference-style link")), - mapOf("href" to "https://www.mozilla.org") - ))), - P(listOf(A( - listOf(Text("You can use numbers for reference-style link definitions")), - mapOf("href" to "http://slashdot.org") - ))), - P(listOf( - Text("Or leave it empty and use the "), - A( - listOf(Text("link text itself")), - mapOf("href" to "http://www.reddit.com") + P( + listOf( + P( + listOf( + A( + listOf(Text("I'm an inline-style link")), + mapOf("href" to "https://www.google.com") + ) + ) ), - Text(".") - )), - P(listOf( - Text("URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or "), - A( - listOf(Text("http://www.example.com")), - mapOf("href" to "http://www.example.com") + P( + listOf( + A( + listOf(Text("I'm an inline-style link with title")), + mapOf("href" to "https://www.google.com", "title" to "Google's Homepage") + ) + ) ), - Text(" and sometimes example.com (but not on Github, for example).") - )), - P(listOf(Text("Some text to show that the reference links can follow later."))) - )) + P( + listOf( + A( + listOf(Text("I'm a reference-style link")), + mapOf("href" to "https://www.mozilla.org") + ) + ) + ), + P( + listOf( + A( + listOf(Text("You can use numbers for reference-style link definitions")), + mapOf("href" to "http://slashdot.org") + ) + ) + ), + P( + listOf( + Text("Or leave it empty and use the "), + A( + listOf(Text("link text itself")), + mapOf("href" to "http://www.reddit.com") + ), + Text(".") + ) + ), + P( + listOf( + Text("URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or "), + A( + listOf(Text("http://www.example.com")), + mapOf("href" to "http://www.example.com") + ), + Text(" and sometimes example.com (but not on Github, for example).") + ) + ), + P(listOf(Text("Some text to show that the reference links can follow later."))) + ) + ) ) ) ) executeTest(kdoc, expectedDocumentationNode) } - @Test fun `Windows Carriage Return Line Feed`() { + @Test + fun `Windows Carriage Return Line Feed`() { val kdoc = "text\r\ntext" val expectedDocumentationNode = DocumentationNode( listOf( Description( - P(listOf( - Text("text text") - )) + P( + listOf( + Text("text text") + ) + ) ) ) ) diff --git a/plugins/base/src/test/kotlin/model/ClassesTest.kt b/plugins/base/src/test/kotlin/model/ClassesTest.kt index 4855056c..2f83d8c0 100644 --- a/plugins/base/src/test/kotlin/model/ClassesTest.kt +++ b/plugins/base/src/test/kotlin/model/ClassesTest.kt @@ -1,9 +1,9 @@ package model import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.KotlinModifier.* import org.jetbrains.dokka.model.DFunction -import org.junit.Test +import org.jetbrains.dokka.model.KotlinModifier.* +import org.junit.jupiter.api.Test import utils.AbstractModelTest import utils.assertNotNull import utils.name @@ -151,7 +151,7 @@ class ClassesTest : AbstractModelTest("/src/main/kotlin/classes/Test.kt", "class name equals "Klass" visibility.values allEquals KotlinVisibility.Public with(extra[AdditionalModifiers.AdditionalKey].assertNotNull("Extras")) { - content.find{it == ExtraModifiers.DATA}.assertNotNull("data modifier") + content.find { it == ExtraModifiers.DATA }.assertNotNull("data modifier") } } } diff --git a/plugins/base/src/test/kotlin/model/CommentTest.kt b/plugins/base/src/test/kotlin/model/CommentTest.kt index 055892af..b1faa07f 100644 --- a/plugins/base/src/test/kotlin/model/CommentTest.kt +++ b/plugins/base/src/test/kotlin/model/CommentTest.kt @@ -3,7 +3,7 @@ package model import org.jetbrains.dokka.model.DProperty import org.jetbrains.dokka.model.doc.CustomWrapperTag import org.jetbrains.dokka.model.doc.Text -import org.junit.Test +import org.junit.jupiter.api.Test import utils.* class CommentTest : AbstractModelTest("/src/main/kotlin/comment/Test.kt", "comment") { diff --git a/plugins/base/src/test/kotlin/model/FunctionsTest.kt b/plugins/base/src/test/kotlin/model/FunctionsTest.kt index 97d6b237..c8b8f2ba 100644 --- a/plugins/base/src/test/kotlin/model/FunctionsTest.kt +++ b/plugins/base/src/test/kotlin/model/FunctionsTest.kt @@ -2,7 +2,7 @@ package model import org.jetbrains.dokka.model.DFunction import org.jetbrains.dokka.model.DPackage -import org.junit.Test +import org.junit.jupiter.api.Test import utils.* class FunctionTest : AbstractModelTest("/src/main/kotlin/function/Test.kt", "function") { diff --git a/plugins/base/src/test/kotlin/model/InheritorsTest.kt b/plugins/base/src/test/kotlin/model/InheritorsTest.kt index b3d7bf92..da128803 100644 --- a/plugins/base/src/test/kotlin/model/InheritorsTest.kt +++ b/plugins/base/src/test/kotlin/model/InheritorsTest.kt @@ -7,7 +7,7 @@ import org.jetbrains.dokka.base.transformers.documentables.InheritorsInfo import org.jetbrains.dokka.model.DInterface import org.jetbrains.dokka.model.DPackage import org.jetbrains.dokka.plugability.DokkaPlugin -import org.junit.Test +import org.junit.jupiter.api.Test import utils.AbstractModelTest import utils.assertNotNull diff --git a/plugins/base/src/test/kotlin/model/JavaTest.kt b/plugins/base/src/test/kotlin/model/JavaTest.kt index 1e33d6fd..c6d111a4 100644 --- a/plugins/base/src/test/kotlin/model/JavaTest.kt +++ b/plugins/base/src/test/kotlin/model/JavaTest.kt @@ -3,8 +3,8 @@ package model import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.DEnum import org.jetbrains.dokka.model.DFunction -import org.junit.Assert.assertTrue -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test import utils.AbstractModelTest import utils.assertNotNull import utils.name @@ -112,8 +112,8 @@ class JavaTest : AbstractModelTest("/src/main/kotlin/java/Test.java", "java") { with((this / "java" / "Foo").cast()) { val sups = listOf("Exception", "Cloneable") assertTrue( - "Foo must extend ${sups.joinToString(", ")}", sups.all { s -> supertypes.map.values.flatten().any { it.classNames == s } }) + "Foo must extend ${sups.joinToString(", ")}" } } } diff --git a/plugins/base/src/test/kotlin/model/PackagesTest.kt b/plugins/base/src/test/kotlin/model/PackagesTest.kt index 008ae14d..8885dae0 100644 --- a/plugins/base/src/test/kotlin/model/PackagesTest.kt +++ b/plugins/base/src/test/kotlin/model/PackagesTest.kt @@ -1,7 +1,7 @@ package model import org.jetbrains.dokka.model.DPackage -import org.junit.Test +import org.junit.jupiter.api.Test import utils.AbstractModelTest class PackagesTest : AbstractModelTest("/src/main/kotlin/packages/Test.kt", "packages") { diff --git a/plugins/base/src/test/kotlin/model/PropertyTest.kt b/plugins/base/src/test/kotlin/model/PropertyTest.kt index 4af4ee5a..f391df4e 100644 --- a/plugins/base/src/test/kotlin/model/PropertyTest.kt +++ b/plugins/base/src/test/kotlin/model/PropertyTest.kt @@ -3,7 +3,7 @@ package model import org.jetbrains.dokka.model.KotlinVisibility import org.jetbrains.dokka.model.DPackage import org.jetbrains.dokka.model.DProperty -import org.junit.Test +import org.junit.jupiter.api.Test import utils.AbstractModelTest import utils.assertNotNull import utils.name diff --git a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt index e9605c5f..0111e8fb 100644 --- a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt +++ b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt @@ -1,7 +1,7 @@ package multiplatform -import org.junit.Assert.assertEquals -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class BasicMultiplatformTest : AbstractCoreTest() { diff --git a/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt b/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt index 4b90604e..15dc5581 100644 --- a/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt +++ b/plugins/base/src/test/kotlin/pageMerger/PageNodeMergerTest.kt @@ -1,13 +1,10 @@ package pageMerger -import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.pages.ContentPage import org.jetbrains.dokka.pages.PageNode -import org.jetbrains.dokka.plugability.DokkaPlugin -import org.jetbrains.dokka.base.transformers.pages.merger.SameMethodNamePageMergerStrategy -import org.jetbrains.dokka.utilities.DokkaLogger -import org.junit.Ignore -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest class PageNodeMergerTest : AbstractCoreTest() { @@ -70,16 +67,16 @@ class PageNodeMergerTest : AbstractCoreTest() { val testT = allChildren.filter { it.name == "testT" } val test = allChildren.filter { it.name == "test" } - assert(testT.size == 1) { "There can be only one testT page" } - assert(testT.first().dri.size == 2) { "testT page should have 2 DRI, but has ${testT.first().dri.size}" } + assertTrue(testT.size == 1) { "There can be only one testT page" } + assertTrue(testT.first().dri.size == 2) { "testT page should have 2 DRI, but has ${testT.first().dri.size}" } - assert(test.size == 1) { "There can be only one test page" } - assert(test.first().dri.size == 2) { "test page should have 2 DRI, but has ${test.first().dri.size}" } + assertTrue(test.size == 1) { "There can be only one test page" } + assertTrue(test.first().dri.size == 2) { "test page should have 2 DRI, but has ${test.first().dri.size}" } } } } - @Ignore("TODO: reenable when we have infrastructure for turning off extensions") + @Disabled("TODO: reenable when we have infrastructure for turning off extensions") @Test fun defaultStrategyTest() { val strList: MutableList = mutableListOf() diff --git a/plugins/base/src/test/kotlin/renderers/html/GroupWrappingTest.kt b/plugins/base/src/test/kotlin/renderers/html/GroupWrappingTest.kt index e98b97c0..f39d845a 100644 --- a/plugins/base/src/test/kotlin/renderers/html/GroupWrappingTest.kt +++ b/plugins/base/src/test/kotlin/renderers/html/GroupWrappingTest.kt @@ -2,7 +2,7 @@ package renderers.html import org.jetbrains.dokka.base.renderers.html.HtmlRenderer import org.jetbrains.dokka.pages.TextStyle -import org.junit.Test +import org.junit.jupiter.api.Test import renderers.RenderingOnlyTestBase import renderers.TestPage diff --git a/plugins/base/src/test/kotlin/renderers/html/PlatformDependentHintTest.kt b/plugins/base/src/test/kotlin/renderers/html/PlatformDependentHintTest.kt index 2fda1ee1..f1d50007 100644 --- a/plugins/base/src/test/kotlin/renderers/html/PlatformDependentHintTest.kt +++ b/plugins/base/src/test/kotlin/renderers/html/PlatformDependentHintTest.kt @@ -3,13 +3,12 @@ package renderers.html import org.jetbrains.dokka.Platform import org.jetbrains.dokka.base.renderers.html.HtmlRenderer import org.jetbrains.dokka.pages.PlatformData -import org.jetbrains.dokka.pages.Style import org.jetbrains.dokka.pages.TextStyle -import org.junit.Test +import org.junit.jupiter.api.Test import renderers.RenderingOnlyTestBase import renderers.TestPage -class PlatformDependentHintTest: RenderingOnlyTestBase() { +class PlatformDependentHintTest : RenderingOnlyTestBase() { private val pl1 = PlatformData("pl1", Platform.js, listOf("pl1")) private val pl2 = PlatformData("pl2", Platform.jvm, listOf("pl2")) private val pl3 = PlatformData("pl3", Platform.native, listOf("pl3")) diff --git a/plugins/base/src/test/resources/expect/annotatedFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/f.html b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/f.html new file mode 100644 index 00000000..7900fb98 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/f.html @@ -0,0 +1,20 @@ + + + f + + + + + + +
//root//f +

f

+final fun f()
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/index.html new file mode 100644 index 00000000..867d7faa --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f()
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunction/src/annotatedFunction.kt b/plugins/base/src/test/resources/expect/annotatedFunction/src/annotatedFunction.kt new file mode 100644 index 00000000..f7abbf6c --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunction/src/annotatedFunction.kt @@ -0,0 +1,2 @@ +@Strictfp fun f() { +} diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/-search.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/navigation.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/navigation.html new file mode 100644 index 00000000..fe9e499e --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/navigation.html @@ -0,0 +1,25 @@ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/-init-.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/-init-.html new file mode 100644 index 00000000..5ae21e5b --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/-init-.html @@ -0,0 +1,30 @@ + + + <init> + + + + + + +
//root//Fancy/<init> +

<init>

+final fun <init>(size: Int) +

Parameters

+ + + + + + + +
size
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/equals.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/equals.html new file mode 100644 index 00000000..004f5344 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/equals.html @@ -0,0 +1,30 @@ + + + equals + + + + + + +
//root//Fancy/equals +

equals

+open fun equals(other: Any): Boolean +

Parameters

+ + + + + + + +
other
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/hash-code.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/hash-code.html new file mode 100644 index 00000000..b395dcda --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/hash-code.html @@ -0,0 +1,20 @@ + + + hashCode + + + + + + +
//root//Fancy/hashCode +

hashCode

+open fun hashCode(): Int
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/index.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/index.html new file mode 100644 index 00000000..3da5f79b --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/index.html @@ -0,0 +1,61 @@ + + + Fancy + + + + + + +
//root//FancyFinal class Fancy : Annotation +

Constructors

+ + + + + + + + + +
<init>final fun <init>(size: Int)
+

Functions

+ + + + + + + + + + + + + + + + + + + +
equalsopen fun equals(other: Any): Boolean
hashCodeopen fun hashCode(): Int
toStringopen fun toString(): String
+

Properties

+ + + + + + + + +
size
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/to-string.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/to-string.html new file mode 100644 index 00000000..84da7873 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/-fancy/to-string.html @@ -0,0 +1,20 @@ + + + toString + + + + + + +
//root//Fancy/toString +

toString

+open fun toString(): String
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/f.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/f.html new file mode 100644 index 00000000..7900fb98 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/f.html @@ -0,0 +1,20 @@ + + + f + + + + + + +
//root//f +

f

+final fun f()
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/index.html b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/index.html new file mode 100644 index 00000000..bba04c93 --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/out/html/root/index.html @@ -0,0 +1,42 @@ + + + + + + + + + +
//root/ +

Package

+

Types

+ + + + + + + + + +
FancyFinal class Fancy : Annotation
+

Functions

+ + + + + + + + + +
ffinal fun f()
+
+ + + diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt new file mode 100644 index 00000000..e559713a --- /dev/null +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt @@ -0,0 +1,7 @@ +@Target(AnnotationTarget.VALUE_PARAMETER) +@Retention(AnnotationRetention.SOURCE) +@MustBeDocumented +public annotation class Fancy(val size: Int) + + +@Fancy(1) fun f() {} diff --git a/plugins/base/src/test/resources/expect/function/out/html/-search.html b/plugins/base/src/test/resources/expect/function/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/function/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/function/out/html/navigation.html b/plugins/base/src/test/resources/expect/function/out/html/navigation.html new file mode 100644 index 00000000..ebff817d --- /dev/null +++ b/plugins/base/src/test/resources/expect/function/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/function/out/html/root/fn.html b/plugins/base/src/test/resources/expect/function/out/html/root/fn.html new file mode 100644 index 00000000..e87d7bc4 --- /dev/null +++ b/plugins/base/src/test/resources/expect/function/out/html/root/fn.html @@ -0,0 +1,23 @@ + + + fn + + + + + + +
//root//fn +

fn

+final fun fn() +

Description

+Function fn +
+ + + diff --git a/plugins/base/src/test/resources/expect/function/out/html/root/index.html b/plugins/base/src/test/resources/expect/function/out/html/root/index.html new file mode 100644 index 00000000..25c65b11 --- /dev/null +++ b/plugins/base/src/test/resources/expect/function/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
fnfinal fun fn()Function fn
+
+ + + diff --git a/plugins/base/src/test/resources/expect/function/src/function.kt b/plugins/base/src/test/resources/expect/function/src/function.kt new file mode 100644 index 00000000..3ed81dfa --- /dev/null +++ b/plugins/base/src/test/resources/expect/function/src/function.kt @@ -0,0 +1,5 @@ +/** + * Function fn + */ +fun fn() { +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/navigation.html new file mode 100644 index 00000000..53fb1ca2 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/navigation.html @@ -0,0 +1,25 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/-init-.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/-init-.html new file mode 100644 index 00000000..acfc127a --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/-init-.html @@ -0,0 +1,20 @@ + + + <init> + + + + + + +
//root//Fancy/<init> +

<init>

+final fun <init>()
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/equals.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/equals.html new file mode 100644 index 00000000..004f5344 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/equals.html @@ -0,0 +1,30 @@ + + + equals + + + + + + +
//root//Fancy/equals +

equals

+open fun equals(other: Any): Boolean +

Parameters

+ + + + + + + +
other
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/hash-code.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/hash-code.html new file mode 100644 index 00000000..b395dcda --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/hash-code.html @@ -0,0 +1,20 @@ + + + hashCode + + + + + + +
//root//Fancy/hashCode +

hashCode

+open fun hashCode(): Int
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/index.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/index.html new file mode 100644 index 00000000..6a1d3c92 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/index.html @@ -0,0 +1,51 @@ + + + Fancy + + + + + + +
//root//FancyFinal class Fancy : Annotation +

Constructors

+ + + + + + + + + +
<init>final fun <init>()
+

Functions

+ + + + + + + + + + + + + + + + + + + +
equalsopen fun equals(other: Any): Boolean
hashCodeopen fun hashCode(): Int
toStringopen fun toString(): String
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/to-string.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/to-string.html new file mode 100644 index 00000000..84da7873 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/-fancy/to-string.html @@ -0,0 +1,20 @@ + + + toString + + + + + + +
//root//Fancy/toString +

toString

+open fun toString(): String
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/function.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/function.html new file mode 100644 index 00000000..2c0eb890 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/function.html @@ -0,0 +1,30 @@ + + + function + + + + + + +
//root//function +

function

+final fun function(notInlined: Function0<Unit>) +

Parameters

+ + + + + + + +
notInlined
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/index.html new file mode 100644 index 00000000..1797f269 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/out/html/root/index.html @@ -0,0 +1,42 @@ + + + + + + + + + +
//root/ +

Package

+

Types

+ + + + + + + + + +
FancyFinal class Fancy : Annotation
+

Functions

+ + + + + + + + + +
functionfinal fun function(notInlined: Function0<Unit>)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt new file mode 100644 index 00000000..f858e671 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt @@ -0,0 +1,7 @@ +@Target(AnnotationTarget.VALUE_PARAMETER) +@Retention(AnnotationRetention.SOURCE) +@MustBeDocumented +public annotation class Fancy + +fun function(@Fancy notInlined: () -> Unit) { +} diff --git a/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/f.html b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/f.html new file mode 100644 index 00000000..448fdf25 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/f.html @@ -0,0 +1,30 @@ + + + f + + + + + + +
//root//f +

f

+final fun f(x: String) +

Parameters

+ + + + + + + +
x
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/index.html new file mode 100644 index 00000000..d23b9737 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f(x: String)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithDefaultParameter/src/functionWithDefaultParameter.kt b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/src/functionWithDefaultParameter.kt new file mode 100644 index 00000000..3a3a102f --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithDefaultParameter/src/functionWithDefaultParameter.kt @@ -0,0 +1 @@ +fun f(x: String = "") {} diff --git a/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/navigation.html new file mode 100644 index 00000000..659c441f --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/function.html b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/function.html new file mode 100644 index 00000000..2c0eb890 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/function.html @@ -0,0 +1,30 @@ + + + function + + + + + + +
//root//function +

function

+final fun function(notInlined: Function0<Unit>) +

Parameters

+ + + + + + + +
notInlined
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/index.html new file mode 100644 index 00000000..2c53c3e2 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
functionfinal fun function(notInlined: Function0<Unit>)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNoinlineParam/src/functionWithNoinlineParam.kt b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/src/functionWithNoinlineParam.kt new file mode 100644 index 00000000..640bec83 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNoinlineParam/src/functionWithNoinlineParam.kt @@ -0,0 +1,2 @@ +fun function(noinline notInlined: () -> Unit) { +} diff --git a/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/f.html b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/f.html new file mode 100644 index 00000000..7900fb98 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/f.html @@ -0,0 +1,20 @@ + + + f + + + + + + +
//root//f +

f

+final fun f()
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/index.html new file mode 100644 index 00000000..867d7faa --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f()
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/src/functionWithNotDocumentedAnnotation.kt b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/src/functionWithNotDocumentedAnnotation.kt new file mode 100644 index 00000000..3c7e2ff9 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithNotDocumentedAnnotation/src/functionWithNotDocumentedAnnotation.kt @@ -0,0 +1,2 @@ +@Suppress("FOO") fun f() { +} diff --git a/plugins/base/src/test/resources/expect/functionWithParams/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithParams/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithParams/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithParams/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithParams/out/html/navigation.html new file mode 100644 index 00000000..659c441f --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithParams/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/function.html b/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/function.html new file mode 100644 index 00000000..0c62a13d --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/function.html @@ -0,0 +1,34 @@ + + + function + + + + + + +
//root//function +

function

+final fun function(x: Int) +

Description

+MultilineFunction Documentation + +

Parameters

+ + + + + + + + +
xparameter
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/index.html new file mode 100644 index 00000000..a5fdacb0 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithParams/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
functionfinal fun function(x: Int)Multiline Function Documentation
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithParams/src/functionWithParams.kt b/plugins/base/src/test/resources/expect/functionWithParams/src/functionWithParams.kt new file mode 100644 index 00000000..85c49368 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithParams/src/functionWithParams.kt @@ -0,0 +1,8 @@ +/** + * Multiline + * + * Function + * Documentation + */ +fun function(/** parameter */ x: Int) { +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/-search.html b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/navigation.html b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/navigation.html new file mode 100644 index 00000000..ebff817d --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/fn.html b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/fn.html new file mode 100644 index 00000000..fc3630fc --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/fn.html @@ -0,0 +1,38 @@ + + + fn + + + + + + +
//root//fn +

fn

+final fun String.fn() +

Description

+Function with receiver + +

fn

+final fun String.fn(x: Int) +

Description

+Function with receiver + +

Parameters

+ + + + + + + +
x
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/index.html b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/index.html new file mode 100644 index 00000000..cd92f78d --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithReceiver/out/html/root/index.html @@ -0,0 +1,36 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + + + + + + +
fnfinal fun String.fn()Function with receiver
fnfinal fun String.fn(x: Int)Function with receiver
+
+ + + diff --git a/plugins/base/src/test/resources/expect/functionWithReceiver/src/functionWithReceiver.kt b/plugins/base/src/test/resources/expect/functionWithReceiver/src/functionWithReceiver.kt new file mode 100644 index 00000000..c8473251 --- /dev/null +++ b/plugins/base/src/test/resources/expect/functionWithReceiver/src/functionWithReceiver.kt @@ -0,0 +1,11 @@ +/** + * Function with receiver + */ +fun String.fn() { +} + +/** + * Function with receiver + */ +fun String.fn(x: Int) { +} diff --git a/plugins/base/src/test/resources/expect/genericFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/genericFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/genericFunction/out/html/navigation.html new file mode 100644 index 00000000..dc7dcf2d --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/genericFunction/out/html/root/generic.html b/plugins/base/src/test/resources/expect/genericFunction/out/html/root/generic.html new file mode 100644 index 00000000..a8f1dbd1 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunction/out/html/root/generic.html @@ -0,0 +1,23 @@ + + + generic + + + + + + +
//root//generic +

generic

+private final fun generic<generic.T : Any>() +

Description

+generic function +
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/genericFunction/out/html/root/index.html new file mode 100644 index 00000000..e89383c9 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
genericprivate final fun generic<generic.T : Any>()generic function
+
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunction/src/genericFunction.kt b/plugins/base/src/test/resources/expect/genericFunction/src/genericFunction.kt new file mode 100644 index 00000000..05a65070 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunction/src/genericFunction.kt @@ -0,0 +1,5 @@ + +/** + * generic function + */ +private fun generic() {} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/-search.html b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/navigation.html b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/navigation.html new file mode 100644 index 00000000..dc7dcf2d --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/generic.html b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/generic.html new file mode 100644 index 00000000..cd1945f8 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/generic.html @@ -0,0 +1,23 @@ + + + generic + + + + + + +
//root//generic +

generic

+final fun generic<generic.T : org.jetbrains.kotlin.protobuf.GeneratedMessageLite$GeneratedExtension@5a8ec9b6, generic.R : Any>() +

Description

+generic function +
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/index.html b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/index.html new file mode 100644 index 00000000..016b01e7 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
genericfinal fun generic()generic function
+
+ + + diff --git a/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/src/genericFunctionWithConstraints.kt b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/src/genericFunctionWithConstraints.kt new file mode 100644 index 00000000..5f22f8c5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/genericFunctionWithConstraints/src/genericFunctionWithConstraints.kt @@ -0,0 +1,6 @@ + +/** + * generic function + */ +public fun generic() { +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/inlineFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/inlineFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/inlineFunction/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/f.html b/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/f.html new file mode 100644 index 00000000..0661e211 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/f.html @@ -0,0 +1,30 @@ + + + f + + + + + + +
//root//f +

f

+final fun f(a: Function0<String>) +

Parameters

+ + + + + + + +
a
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/index.html new file mode 100644 index 00000000..a5dd2a5d --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f(a: Function0<String>)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineFunction/src/inlineFunction.kt b/plugins/base/src/test/resources/expect/inlineFunction/src/inlineFunction.kt new file mode 100644 index 00000000..64a617a4 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineFunction/src/inlineFunction.kt @@ -0,0 +1,2 @@ +inline fun f(a: () -> String) { +} diff --git a/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/f.html b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/f.html new file mode 100644 index 00000000..0661e211 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/f.html @@ -0,0 +1,30 @@ + + + f + + + + + + +
//root//f +

f

+final fun f(a: Function0<String>) +

Parameters

+ + + + + + + +
a
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/index.html new file mode 100644 index 00000000..a5dd2a5d --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineSuspendFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f(a: Function0<String>)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/inlineSuspendFunction/src/inlineSuspendFunction.kt b/plugins/base/src/test/resources/expect/inlineSuspendFunction/src/inlineSuspendFunction.kt new file mode 100644 index 00000000..5f376267 --- /dev/null +++ b/plugins/base/src/test/resources/expect/inlineSuspendFunction/src/inlineSuspendFunction.kt @@ -0,0 +1,2 @@ +inline suspend fun f(a: () -> String) { +} diff --git a/plugins/base/src/test/resources/expect/sinceKotlin/out/html/-search.html b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/sinceKotlin/out/html/navigation.html b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/navigation.html new file mode 100644 index 00000000..5f182c80 --- /dev/null +++ b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/available-since1.1.html b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/available-since1.1.html new file mode 100644 index 00000000..42aa89c4 --- /dev/null +++ b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/available-since1.1.html @@ -0,0 +1,23 @@ + + + availableSince1.1 + + + + + + +
//root//availableSince1.1 +

availableSince1.1

+final fun availableSince1.1(): String +

Description

+Quite useful String +
+ + + diff --git a/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/index.html b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/index.html new file mode 100644 index 00000000..65836c49 --- /dev/null +++ b/plugins/base/src/test/resources/expect/sinceKotlin/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
availableSince1.1final fun availableSince1.1(): StringQuite useful String
+
+ + + diff --git a/plugins/base/src/test/resources/expect/sinceKotlin/src/sinceKotlin.kt b/plugins/base/src/test/resources/expect/sinceKotlin/src/sinceKotlin.kt new file mode 100644 index 00000000..cdcd3357 --- /dev/null +++ b/plugins/base/src/test/resources/expect/sinceKotlin/src/sinceKotlin.kt @@ -0,0 +1,5 @@ +/** + * Quite useful [String] + */ +@SinceKotlin("1.1") +fun `availableSince1.1`(): String = "1.1 rulezz" \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/suspendFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/suspendFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/suspendFunction/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/f.html b/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/f.html new file mode 100644 index 00000000..7900fb98 --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/f.html @@ -0,0 +1,20 @@ + + + f + + + + + + +
//root//f +

f

+final fun f()
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/index.html new file mode 100644 index 00000000..867d7faa --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f()
+
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendFunction/src/suspendFunction.kt b/plugins/base/src/test/resources/expect/suspendFunction/src/suspendFunction.kt new file mode 100644 index 00000000..49ecca2a --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendFunction/src/suspendFunction.kt @@ -0,0 +1,2 @@ +suspend fun f() { +} diff --git a/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/-search.html b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/navigation.html b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/navigation.html new file mode 100644 index 00000000..ad2005c3 --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/navigation.html @@ -0,0 +1,10 @@ + + diff --git a/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/f.html b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/f.html new file mode 100644 index 00000000..0661e211 --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/f.html @@ -0,0 +1,30 @@ + + + f + + + + + + +
//root//f +

f

+final fun f(a: Function0<String>) +

Parameters

+ + + + + + + +
a
+
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/index.html b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/index.html new file mode 100644 index 00000000..a5dd2a5d --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendInlineFunction/out/html/root/index.html @@ -0,0 +1,31 @@ + + + + + + + + + +
//root/ +

Package

+

Functions

+ + + + + + + + + +
ffinal fun f(a: Function0<String>)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/suspendInlineFunction/src/suspendInlineFunction.kt b/plugins/base/src/test/resources/expect/suspendInlineFunction/src/suspendInlineFunction.kt new file mode 100644 index 00000000..54f65658 --- /dev/null +++ b/plugins/base/src/test/resources/expect/suspendInlineFunction/src/suspendInlineFunction.kt @@ -0,0 +1,2 @@ +suspend inline fun f(a: () -> String) { +} diff --git a/plugins/base/src/test/resources/expect/test/out/-search.html b/plugins/base/src/test/resources/expect/test/out/-search.html deleted file mode 100644 index 1ee812bb..00000000 --- a/plugins/base/src/test/resources/expect/test/out/-search.html +++ /dev/null @@ -1,23 +0,0 @@ - - - Search - - - - - - -
-

Search results for

- - -
-
- - - diff --git a/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg b/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg deleted file mode 100644 index 89e7df47..00000000 --- a/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg b/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg deleted file mode 100644 index 1b3b3670..00000000 --- a/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg b/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg deleted file mode 100644 index 7bf3e6c5..00000000 --- a/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/plugins/base/src/test/resources/expect/test/out/navigation.html b/plugins/base/src/test/resources/expect/test/out/navigation.html deleted file mode 100644 index ebff817d..00000000 --- a/plugins/base/src/test/resources/expect/test/out/navigation.html +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/plugins/base/src/test/resources/expect/test/out/root/fn.html b/plugins/base/src/test/resources/expect/test/out/root/fn.html deleted file mode 100644 index e87d7bc4..00000000 --- a/plugins/base/src/test/resources/expect/test/out/root/fn.html +++ /dev/null @@ -1,23 +0,0 @@ - - - fn - - - - - - -
//root//fn -

fn

-final fun fn() -

Description

-Function fn -
- - - diff --git a/plugins/base/src/test/resources/expect/test/out/root/index.html b/plugins/base/src/test/resources/expect/test/out/root/index.html deleted file mode 100644 index 25c65b11..00000000 --- a/plugins/base/src/test/resources/expect/test/out/root/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - -
//root/ -

Package

-

Functions

- - - - - - - - - -
fnfinal fun fn()Function fn
-
- - - diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js b/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js deleted file mode 100644 index 99a885a9..00000000 --- a/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js +++ /dev/null @@ -1,12 +0,0 @@ -onload = () => { - fetch(pathToRoot + "navigation.html") - .then(response => response.text()) - .then(data => { - document.getElementById("sideMenu").innerHTML = data; - }).then(() => { - document.querySelectorAll(".overview > a").forEach(link => { - link.setAttribute("href", pathToRoot + link.getAttribute("href")) - console.log(link.attributes["href"]) - }) - }) -} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/pages.js b/plugins/base/src/test/resources/expect/test/out/scripts/pages.js deleted file mode 100644 index c0bd7a2f..00000000 --- a/plugins/base/src/test/resources/expect/test/out/scripts/pages.js +++ /dev/null @@ -1,5 +0,0 @@ -var pages = [ -{ "name": "root", "location": "root/index.html" }, -{ "name": "", "location": "root//index.html" }, -{ "name": "fn", "location": "root//fn.html" } -] diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js b/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js deleted file mode 100644 index c2e29b9f..00000000 --- a/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js +++ /dev/null @@ -1,11 +0,0 @@ -document.getElementById("navigationFilter").oninput = function (e) { - var input = e.target.value; - var menuParts = document.getElementsByClassName("sideMenuPart") - for (let part of menuParts) { - if(part.querySelector("a").textContent.startsWith(input)) { - part.classList.remove("filtered"); - } else { - part.classList.add("filtered"); - } - } -} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/search.js b/plugins/base/src/test/resources/expect/test/out/scripts/search.js deleted file mode 100644 index 63112ac5..00000000 --- a/plugins/base/src/test/resources/expect/test/out/scripts/search.js +++ /dev/null @@ -1,5 +0,0 @@ -var query = new URLSearchParams(window.location.search).get("query"); - document.getElementById("searchTitle").innerHTML += '"' + query + '":'; - document.getElementById("searchTable").innerHTML = pages.filter(el => el.name.startsWith(query)).reduce((acc, element) => { return acc + - '' + element.name + '' - }, ""); \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/styles/style.css b/plugins/base/src/test/resources/expect/test/out/styles/style.css deleted file mode 100644 index 4a76dd96..00000000 --- a/plugins/base/src/test/resources/expect/test/out/styles/style.css +++ /dev/null @@ -1,353 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Open+Sans:300i,400,700); - - -#content { - margin-top: 3em; - margin-left: 15em; -} - -#navigation { - position: relative -} - -#sideMenu, #searchBar { - position: absolute; -} - -#sideMenu { - width: 14em; - padding-left: 0.5em; -} - -#sideMenu .sideMenuPart { - margin-left: 1em; -} - -#sideMenu img { - margin: 1em 0.25em; -} - -#sideMenu hr { - background: #DADFE6; -} - -#searchBar { - width: 100%; - pointer-events: none; -} - -#searchForm { - float: right; - pointer-events: all; -} - -.sideMenuPart > .navButton { - margin-left:0.25em -} - -.sideMenuPart > .overview .navButtonContent::after { - float: right; - content: url("../images/arrow_down.svg"); -} - -.sideMenuPart.hidden > .navButton .navButtonContent::after { - content: '\02192'; -} - -.sideMenuPart.hidden > .sideMenuPart { - display: none; -} - -.filtered > a, .filtered > .navButton { - display: none; -} - -body, table{ - font:14px/1.5 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif; - background: #F4F4F4; - font-weight:300; - margin-left: auto; - margin-right: auto; - max-width: 1440px; -} - -table { - display: flex; - padding:5px; -} - -td:first-child { - width: 20vw; -} - -.keyword { - color:black; - font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; - font-size:12px; -} - -.symbol { - font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; - font-size:12px; -} - -.identifier { - color: darkblue; - font-size:12px; - font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; -} - -h1, h2, h3, h4, h5, h6 { - color:#222; - margin:0 0 20px; -} - -p, ul, ol, table, pre, dl { - margin:0 0 20px; -} - -h1, h2, h3 { - line-height:1.1; -} - -h1 { - font-size:28px; -} - -h2 { - color:#393939; -} - -h3, h4, h5, h6 { - color:#494949; -} - -a { - color:#258aaf; - font-weight:400; - text-decoration:none; -} - -a:hover { - color: inherit; - text-decoration:underline; -} - -a small { - font-size:11px; - color:#555; - margin-top:-0.6em; - display:block; -} - -.wrapper { - width:860px; - margin:0 auto; -} - -blockquote { - border-left:1px solid #e5e5e5; - margin:0; - padding:0 0 0 20px; - font-style:italic; -} - -code, pre { - font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; - color:#333; - font-size:12px; -} - -pre { - display: block; -/* - padding:8px 8px; - background: #f8f8f8; - border-radius:5px; - border:1px solid #e5e5e5; -*/ - overflow-x: auto; -} - -table { - width:100%; - border-collapse:collapse; -} - -th, td { - text-align:left; - vertical-align: top; - padding:5px 10px; -} - -dt { - color:#444; - font-weight:700; -} - -th { - color:#444; -} - -img { - max-width:100%; -} - -header { - width:270px; - float:left; - position:fixed; -} - -header ul { - list-style:none; - height:40px; - - padding:0; - - background: #eee; - background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); - background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); - background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); - background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); - background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%); - - border-radius:5px; - border:1px solid #d2d2d2; - box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0; - width:270px; -} - -header li { - width:89px; - float:left; - border-right:1px solid #d2d2d2; - height:40px; -} - -header ul a { - line-height:1; - font-size:11px; - color:#999; - display:block; - text-align:center; - padding-top:6px; - height:40px; -} - -strong { - color:#222; - font-weight:700; -} - -header ul li + li { - width:88px; - border-left:1px solid #fff; -} - -header ul li + li + li { - border-right:none; - width:89px; -} - -header ul a strong { - font-size:14px; - display:block; - color:#222; -} - -section { - width:500px; - float:right; - padding-bottom:50px; -} - -small { - font-size:11px; -} - -hr { - border:0; - background:#e5e5e5; - height:1px; - margin:0 0 20px; -} - -footer { - width:270px; - float:left; - position:fixed; - bottom:50px; -} - -@media print, screen and (max-width: 960px) { - - div.wrapper { - width:auto; - margin:0; - } - - header, section, footer { - float:none; - position:static; - width:auto; - } - - header { - padding-right:320px; - } - - section { - border:1px solid #e5e5e5; - border-width:1px 0; - padding:20px 0; - margin:0 0 20px; - } - - header a small { - display:inline; - } - - header ul { - position:absolute; - right:50px; - top:52px; - } -} - -@media print, screen and (max-width: 720px) { - body { - word-wrap:break-word; - } - - header { - padding:0; - } - - header ul, header p.view { - position:static; - } - - pre, code { - word-wrap:normal; - } -} - -@media print, screen and (max-width: 480px) { - body { - padding:15px; - } - - header ul { - display:none; - } -} - -@media print { - body { - padding:0.4in; - font-size:12pt; - color:#444; - } -} diff --git a/plugins/base/src/test/resources/expect/test/src/function.kt b/plugins/base/src/test/resources/expect/test/src/function.kt deleted file mode 100644 index 3ed81dfa..00000000 --- a/plugins/base/src/test/resources/expect/test/src/function.kt +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Function fn - */ -fun fn() { -} \ No newline at end of file diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts index a95b612e..c7c29140 100644 --- a/plugins/build.gradle.kts +++ b/plugins/build.gradle.kts @@ -9,6 +9,14 @@ subprojects { implementation(kotlin("stdlib-jdk8")) testImplementation(project(":testApi")) - testImplementation("junit:junit:4.13") + testImplementation("org.junit.jupiter:junit-jupiter:5.6.0") + } + + tasks.test { + useJUnitPlatform() + ignoreFailures = true + testLogging { + events("passed", "skipped", "failed") + } } } \ No newline at end of file diff --git a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt index 780f326a..2a9ddf0e 100644 --- a/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt +++ b/plugins/kotlin-as-java/src/test/kotlin/KotlinAsJavaPluginTest.kt @@ -4,8 +4,8 @@ import org.jetbrains.dokka.pages.ContentGroup import org.jetbrains.dokka.pages.ContentPage import org.jetbrains.dokka.pages.ContentTable import org.jetbrains.dokka.pages.children -import org.junit.Test import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest +import org.junit.jupiter.api.Test class KotlinAsJavaPluginTest : AbstractCoreTest() { -- cgit From ca2d5042c608951cd2f12ccc324543b59b7cc154 Mon Sep 17 00:00:00 2001 From: Błażej Kardyś Date: Tue, 24 Mar 2020 23:10:27 +0100 Subject: Restricting pages generation for inherited functions --- .../main/kotlin/model/documentableProperties.kt | 7 +++--- .../DefaultDescriptorToDocumentableTranslator.kt | 14 ++++++++--- .../documentables/DefaultPageCreator.kt | 7 ++++-- .../psi/DefaultPsiToDocumentableTranslator.kt | 28 ++++++++++------------ .../base/src/test/kotlin/basic/DokkaBasicTests.kt | 2 +- plugins/base/src/test/kotlin/enums/EnumsTest.kt | 2 -- .../kotlin/multiplatform/BasicMultiplatformTest.kt | 2 +- .../PageTransformerBuilderTest.kt | 2 +- .../annotatedFunctionWithAnnotationParameters.kt | 14 ++++++++++- .../src/functionWithAnnotatedParam.kt | 15 +++++++++++- 10 files changed, 62 insertions(+), 31 deletions(-) (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/core/src/main/kotlin/model/documentableProperties.kt b/core/src/main/kotlin/model/documentableProperties.kt index 67e5e88d..f630ba3b 100644 --- a/core/src/main/kotlin/model/documentableProperties.kt +++ b/core/src/main/kotlin/model/documentableProperties.kt @@ -4,11 +4,10 @@ import org.jetbrains.dokka.model.properties.ExtraProperty import org.jetbrains.dokka.model.properties.MergeStrategy data class InheritedFunction(val isInherited: Boolean): ExtraProperty { - object InheritedFunctionKey: ExtraProperty.Key { - override fun mergeStrategyFor(left: Boolean, right: Boolean) = MergeStrategy.Fail { + companion object : ExtraProperty.Key { + override fun mergeStrategyFor(left: InheritedFunction, right: InheritedFunction) = MergeStrategy.Fail { throw IllegalArgumentException("Function inheritance should be consistent!") } } - override val key: ExtraProperty.Key = - InheritedFunctionKey + override val key: ExtraProperty.Key = InheritedFunction } \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt index 1c374626..dd154ce2 100644 --- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies import org.jetbrains.kotlin.idea.kdoc.findKDoc import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic @@ -270,8 +269,14 @@ private class DokkaDescriptorVisitor( // TODO: close this class and make it priv ) } + fun CallableMemberDescriptor.createDRI(wasOverriden: Boolean = false): Pair = + if (kind == CallableMemberDescriptor.Kind.DECLARATION || overriddenDescriptors.isEmpty()) + Pair(DRI.from(this), wasOverriden) + else + overriddenDescriptors.first().createDRI(true) + override fun visitFunctionDescriptor(descriptor: FunctionDescriptor, parent: DRIWithPlatformInfo): DFunction { - val dri = parent.dri.copy(callable = Callable.from(descriptor)) + val (dri, isInherited) = descriptor.createDRI() val isExpect = descriptor.isExpect val actual = descriptor.createSources() @@ -294,7 +299,10 @@ private class DokkaDescriptorVisitor( // TODO: close this class and make it priv else PlatformDependent.from(platformData, descriptor.modifier()), type = descriptor.returnType!!.toBound(), platformData = listOf(platformData), - extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations()) + extra = PropertyContainer.withAll( + InheritedFunction(isInherited), + descriptor.additionalExtras(), descriptor.getAnnotations() + ) ) } diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt index b217117b..11f57696 100644 --- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt +++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt @@ -33,7 +33,7 @@ open class DefaultPageCreator( ClasslikePageNode( e.name.orEmpty(), contentForEnumEntry(e), setOf(e.dri), e, e.classlikes.map(::pageForClasslike) + - e.functions.map(::pageForFunction) + e.filteredFunctions.map(::pageForFunction) ) open fun pageForClasslike(c: DClasslike): ClasslikePageNode { @@ -43,13 +43,16 @@ open class DefaultPageCreator( c.name.orEmpty(), contentForClasslike(c), setOf(c.dri), c, constructors.map(::pageForFunction) + c.classlikes.map(::pageForClasslike) + - c.functions.map(::pageForFunction) + + c.filteredFunctions.map(::pageForFunction) + if (c is DEnum) c.entries.map(::pageForEnumEntry) else emptyList() ) } open fun pageForFunction(f: DFunction) = MemberPageNode(f.name, contentForFunction(f), setOf(f.dri), f) + private val WithScope.filteredFunctions + get() = functions.filter { it.extra[InheritedFunction]?.isInherited != true } + protected open fun contentForModule(m: DModule) = contentBuilder.contentFor(m) { header(1) { text(m.name) } block("Packages", 2, ContentKind.Packages, m.packages, m.platformData.toSet()) { diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index ee862fb8..87c78aa8 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -5,7 +5,6 @@ import com.intellij.lang.jvm.types.JvmReferenceType import com.intellij.psi.* import com.intellij.psi.impl.source.PsiClassReferenceType import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.links.DriOfAny import org.jetbrains.dokka.links.withClass import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.properties.PropertyContainer @@ -116,8 +115,8 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { parseSupertypes(superTypes) val (regularFunctions, accessors) = splitFunctionsAndAccessors() val documentation = javadocParser.parseDocumentation(this).toPlatformDependant() - val allFunctions = regularFunctions.mapNotNull { if (!it.isConstructor) parseFunction(it, dri) else null } + - superMethods.map { parseFunction(it, dri, isInherited = true) } + val allFunctions = regularFunctions.mapNotNull { if (!it.isConstructor) parseFunction(it) else null } + + superMethods.map { parseFunction(it, isInherited = true) } val source = PsiDocumentableSource(this).toPlatformDependant() val classlikes = innerClasses.map { parseClasslike(it, dri) } val visibility = getVisibility().toPlatformDependant() @@ -131,11 +130,11 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { documentation, source, allFunctions, - fields.mapNotNull { parseField(it, dri, accessors[it].orEmpty()) }, + fields.mapNotNull { parseField(it, accessors[it].orEmpty()) }, classlikes, visibility, null, - constructors.map { parseFunction(it, dri, true) }, + constructors.map { parseFunction(it, true) }, listOf(platformData), PropertyContainer.empty() + annotations.toList().toExtra() ) @@ -157,11 +156,11 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { documentation, source, allFunctions, - fields.filter { it !is PsiEnumConstant }.map { parseField(it, dri, accessors[it].orEmpty()) }, + fields.filter { it !is PsiEnumConstant }.map { parseField(it, accessors[it].orEmpty()) }, classlikes, visibility, null, - constructors.map { parseFunction(it, dri, true) }, + constructors.map { parseFunction(it, true) }, ancestors, listOf(platformData), PropertyContainer.empty() + annotations.toList().toExtra() @@ -172,7 +171,7 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { documentation, source, allFunctions, - fields.mapNotNull { parseField(it, dri, accessors[it].orEmpty()) }, + fields.mapNotNull { parseField(it, accessors[it].orEmpty()) }, classlikes, visibility, null, @@ -184,9 +183,9 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { else -> DClass( dri, name.orEmpty(), - constructors.map { parseFunction(it, dri, true) }, + constructors.map { parseFunction(it, true) }, allFunctions, - fields.mapNotNull { parseField(it, dri, accessors[it].orEmpty()) }, + fields.mapNotNull { parseField(it, accessors[it].orEmpty()) }, classlikes, source, visibility, @@ -203,11 +202,10 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { private fun parseFunction( psi: PsiMethod, - parent: DRI, isConstructor: Boolean = false, isInherited: Boolean = false ): DFunction { - val dri = DRI.from(psi).copy(classNames = parent.classNames) + val dri = DRI.from(psi) return DFunction( dri, if (isConstructor) "" else psi.name, @@ -328,7 +326,7 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { return regularMethods to accessors } - private fun parseField(psi: PsiField, parent: DRI, accessors: List): DProperty { + private fun parseField(psi: PsiField, accessors: List): DProperty { val dri = DRI.from(psi) return DProperty( dri, @@ -338,8 +336,8 @@ object DefaultPsiToDocumentableTranslator : PsiToDocumentableTranslator { psi.getVisibility().toPlatformDependant(), getBound(psi.type), null, - accessors.firstOrNull { it.hasParameters() }?.let { parseFunction(it, parent) }, - accessors.firstOrNull { it.returnType == psi.type }?.let { parseFunction(it, parent) }, + accessors.firstOrNull { it.hasParameters() }?.let { parseFunction(it) }, + accessors.firstOrNull { it.returnType == psi.type }?.let { parseFunction(it) }, psi.getModifier().toPlatformDependant(), listOf(platformData), PropertyContainer.empty() + psi.annotations.toList().toExtra() diff --git a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt index dae1b2be..c1044e09 100644 --- a/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt +++ b/plugins/base/src/test/kotlin/basic/DokkaBasicTests.kt @@ -32,7 +32,7 @@ class DokkaBasicTests : AbstractCoreTest() { ) { pagesGenerationStage = { println(it.dri) - assertTrue(it.getClasslikeToMemberMap().filterKeys { it.name == "Test" }.entries.firstOrNull()?.value?.size == 5) + assertTrue(it.getClasslikeToMemberMap().filterKeys { it.name == "Test" }.entries.firstOrNull()?.value?.size == 2) } } } diff --git a/plugins/base/src/test/kotlin/enums/EnumsTest.kt b/plugins/base/src/test/kotlin/enums/EnumsTest.kt index c9024a72..e765d203 100644 --- a/plugins/base/src/test/kotlin/enums/EnumsTest.kt +++ b/plugins/base/src/test/kotlin/enums/EnumsTest.kt @@ -36,7 +36,6 @@ class EnumsTest : AbstractCoreTest() { val test = map.filterKeys { it.name == "Test" }.values.firstOrNull() assertTrue(test != null) { "Test not found" } assertTrue(test!!.any { it.name == "E1" } && test.any { it.name == "E2" }) { "Enum entries missing in parent" } - assertTrue(map.keys.any { it.name == "E1" } && map.keys.any { it.name == "E2" }) { "Enum entries missing" } } } } @@ -83,7 +82,6 @@ class EnumsTest : AbstractCoreTest() { val test = map.filterKeys { it.name == "Test" }.values.firstOrNull() assertNotNull(test, "Test not found") assertTrue(test!!.any { it.name == "E1" } && test.any { it.name == "E2" }) { "Enum entries missing in parent" } - assertTrue(map.keys.any { it.name == "E1" } && map.keys.any { it.name == "E2" }) { "Enum entries missing" } } } } diff --git a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt index 0111e8fb..5facd194 100644 --- a/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt +++ b/plugins/base/src/test/kotlin/multiplatform/BasicMultiplatformTest.kt @@ -47,7 +47,7 @@ class BasicMultiplatformTest : AbstractCoreTest() { configuration ) { pagesGenerationStage = { - assertEquals(6, it.parentMap.size) + assertEquals(3, it.parentMap.size) } } } diff --git a/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt b/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt index 20ee7490..e66490c1 100644 --- a/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt +++ b/plugins/base/src/test/kotlin/transformerBuilders/PageTransformerBuilderTest.kt @@ -49,7 +49,7 @@ class PageTransformerBuilderTest : AbstractCoreTest() { orig = it } pagesTransformationStage = { root -> - list.assertCount(7, "Page list: ") + list.assertCount(4, "Page list: ") orig?.let { root.assertTransform(it) } } } diff --git a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt index e559713a..2f872c11 100644 --- a/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt +++ b/plugins/base/src/test/resources/expect/annotatedFunctionWithAnnotationParameters/src/annotatedFunctionWithAnnotationParameters.kt @@ -1,7 +1,19 @@ @Target(AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.SOURCE) @MustBeDocumented -public annotation class Fancy(val size: Int) +public annotation class Fancy(val size: Int) { + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override fun toString(): String { + return super.toString() + } +} @Fancy(1) fun f() {} diff --git a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt index f858e671..0988d4b3 100644 --- a/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt +++ b/plugins/base/src/test/resources/expect/functionWithAnnotatedParam/src/functionWithAnnotatedParam.kt @@ -1,7 +1,20 @@ @Target(AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.SOURCE) @MustBeDocumented -public annotation class Fancy +public annotation class Fancy { + + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override fun toString(): String { + return super.toString() + } +} fun function(@Fancy notInlined: () -> Unit) { } -- cgit From ccb5ec383c942cd87856f7af572f20e36f519ee7 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Thu, 14 May 2020 19:51:17 +0200 Subject: Add github actions CI --- .github/workflows/gradle-build.pr.yml | 16 ++++++++++++++++ plugins/base/src/test/kotlin/basic/DRITest.kt | 8 ++++---- 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/gradle-build.pr.yml (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/.github/workflows/gradle-build.pr.yml b/.github/workflows/gradle-build.pr.yml new file mode 100644 index 00000000..2723ecf4 --- /dev/null +++ b/.github/workflows/gradle-build.pr.yml @@ -0,0 +1,16 @@ +name: CI + +on: pull_request + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - run: ./gradlew clean build --stacktrace \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index 0e1f095e..e85ca30e 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test class DRITest : AbstractCoreTest() { @Test - fun `#634`() { + fun issue634() { val configuration = dokkaConfiguration { passes { pass { @@ -46,7 +46,7 @@ class DRITest : AbstractCoreTest() { } @Test - fun `#634 with immediate nullable self`() { + fun issue634WithImmediateNullableSelf() { val configuration = dokkaConfiguration { passes { pass { @@ -76,7 +76,7 @@ class DRITest : AbstractCoreTest() { } @Test - fun `#634 with generic nullable receiver`() { + fun issue634WithGenericNullableReceiver() { val configuration = dokkaConfiguration { passes { pass { @@ -106,7 +106,7 @@ class DRITest : AbstractCoreTest() { } @Test - fun `#642 with * and Any?`() { + fun issue642WithStarAndAny() { val configuration = dokkaConfiguration { passes { pass { -- cgit From 3aeb65472be150a6098f2fac17dbdf0bb2a40013 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Thu, 7 May 2020 17:10:10 +0200 Subject: Missing generics on class. Add generics to annotation #834 --- core/src/main/kotlin/links/DRI.kt | 71 ++++++++++--- core/src/main/kotlin/model/Documentable.kt | 5 +- .../kotlin/signatures/KotlinSignatureProvider.kt | 16 +-- .../documentables/DefaultDocumentableMerger.kt | 3 +- .../documentables/DocumentableVisibilityFilter.kt | 1 + .../DefaultDescriptorToDocumentableTranslator.kt | 21 ++-- .../psi/DefaultPsiToDocumentableTranslator.kt | 10 +- plugins/base/src/test/kotlin/basic/DRITest.kt | 118 ++++++++++++++++++++- plugins/base/src/test/kotlin/markdown/LinkTest.kt | 36 ++++++- plugins/base/src/test/kotlin/model/ClassesTest.kt | 27 ++++- plugins/base/src/test/kotlin/model/JavaTest.kt | 1 - .../kotlin/converters/KotlinToJavaConverter.kt | 7 +- .../kotlin/signatures/JavaSignatureProvider.kt | 2 +- 13 files changed, 271 insertions(+), 47 deletions(-) (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/core/src/main/kotlin/links/DRI.kt b/core/src/main/kotlin/links/DRI.kt index 3d9012ec..1c823d92 100644 --- a/core/src/main/kotlin/links/DRI.kt +++ b/core/src/main/kotlin/links/DRI.kt @@ -1,9 +1,6 @@ package org.jetbrains.dokka.links -import com.intellij.psi.PsiClass -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiParameter +import com.intellij.psi.* import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe @@ -20,17 +17,15 @@ data class DRI( val packageName: String? = null, val classNames: String? = null, val callable: Callable? = null, - val target: Int? = null, - val genericTarget: Int? = null, + val target: DriTarget = PointingToDeclaration, val extra: String? = null ) { override fun toString(): String = - "${packageName.orEmpty()}/${classNames.orEmpty()}/${callable?.name.orEmpty()}/${callable?.signature().orEmpty()}/${target?.toString().orEmpty()}/${extra.orEmpty()}" + "${packageName.orEmpty()}/${classNames.orEmpty()}/${callable?.name.orEmpty()}/${callable?.signature().orEmpty()}/$target/${extra.orEmpty()}" companion object { fun from(descriptor: DeclarationDescriptor) = descriptor.parentsWithSelf.run { val callable = firstIsInstanceOrNull() - val params = callable?.let { listOfNotNull(it.extensionReceiverParameter) + it.valueParameters }.orEmpty() DRI( firstIsInstanceOrNull()?.fqName?.asString(), (filterIsInstance() + filterIsInstance()).toList() @@ -38,20 +33,18 @@ data class DRI( ?.asReversed() ?.joinToString(separator = ".") { it.name.asString() }, callable?.let { Callable.from(it) }, - firstIsInstanceOrNull()?.let { params.indexOf(it) }, - null + DriTarget.from(descriptor) ) } fun from(psi: PsiElement) = psi.parentsWithSelf.run { val callable = firstIsInstanceOrNull() - val params = (callable?.parameterList?.parameters).orEmpty() val classes = filterIsInstance().toList() DRI( classes.lastOrNull()?.qualifiedName?.substringBeforeLast('.', ""), classes.toList().takeIf { it.isNotEmpty() }?.asReversed()?.mapNotNull { it.name }?.joinToString("."), callable?.let { Callable.from(it) }, - firstIsInstanceOrNull()?.let { params.indexOf(it) } + DriTarget.from(psi) ) } val topLevel = DRI() @@ -63,11 +56,12 @@ val DriOfAny = DRI("kotlin", "Any") fun DRI.withClass(name: String) = copy(classNames = if (classNames.isNullOrBlank()) name else "$classNames.$name") +fun DRI.withTargetToDeclaration() = copy(target = PointingToDeclaration) + val DRI.parent: DRI get() = when { extra != null -> copy(extra = null) - genericTarget != null -> copy(genericTarget = null) - target != null -> copy(target = null) + target != PointingToDeclaration -> copy(target = PointingToDeclaration) callable != null -> copy(callable = null) classNames != null -> copy(classNames = classNames.substringBeforeLast(".", "").takeIf { it.isNotBlank() }) else -> DRI.topLevel @@ -167,8 +161,53 @@ object StarProjection : TypeReference() { override fun toString() = "*" } -private operator fun List.component6(): T = get(5) - private val KotlinType.constructorName get() = constructor.declarationDescriptor?.fqNameSafe?.asString() +sealed class DriTarget { + override fun toString(): String = this.javaClass.simpleName + + companion object { + fun from(descriptor: DeclarationDescriptor): DriTarget = descriptor.parentsWithSelf.run { + return when(descriptor){ + is TypeParameterDescriptor -> PointingToGenericParameters(descriptor.index) + else -> { + val callable = firstIsInstanceOrNull() + val params = callable?.let { listOfNotNull(it.extensionReceiverParameter) + it.valueParameters }.orEmpty() + val parameterDescriptor = firstIsInstanceOrNull() + + parameterDescriptor?.let { PointingToCallableParameters(params.indexOf(it)) } + ?: PointingToDeclaration + } + } + } + + fun from(psi: PsiElement): DriTarget = psi.parentsWithSelf.run { + return when(psi) { + is PsiTypeParameter -> PointingToGenericParameters(psi.index) + else -> firstIsInstanceOrNull()?.let { + val callable = firstIsInstanceOrNull() + val params = (callable?.parameterList?.parameters).orEmpty() + PointingToCallableParameters(params.indexOf(it)) + } ?: PointingToDeclaration + } + } + } +} + +data class PointingToGenericParameters(val parameterIndex: Int) : DriTarget() { + override fun toString(): String = "PointingToGenericParameters($parameterIndex)" +} + +object PointingToDeclaration: DriTarget() + +data class PointingToCallableParameters(val parameterIndex: Int): DriTarget(){ + override fun toString(): String = "PointingToCallableParameters($parameterIndex)" +} + +fun DriTarget.nextTarget(): DriTarget = when(this){ + is PointingToGenericParameters -> PointingToGenericParameters(this.parameterIndex+1) + is PointingToCallableParameters -> PointingToCallableParameters(this.parameterIndex+1) + else -> this + } + diff --git a/core/src/main/kotlin/model/Documentable.kt b/core/src/main/kotlin/model/Documentable.kt index 85487725..9f17638c 100644 --- a/core/src/main/kotlin/model/Documentable.kt +++ b/core/src/main/kotlin/model/Documentable.kt @@ -263,9 +263,10 @@ data class DAnnotation( override val visibility: SourceSetDependent, override val companion: DObject?, override val constructors: List, + override val generics: List, override val sourceSets: List, override val extra: PropertyContainer = PropertyContainer.empty() -) : DClasslike(), WithCompanion, WithConstructors, WithExtraProperties { +) : DClasslike(), WithCompanion, WithConstructors, WithExtraProperties, WithGenerics { override val children: List get() = (functions + properties + classlikes + constructors) as List @@ -344,7 +345,7 @@ data class DTypeAlias( sealed class Projection sealed class Bound : Projection() -data class OtherParameter(val name: String) : Bound() +data class OtherParameter(val declarationDRI: DRI, val name: String) : Bound() object Star : Projection() data class TypeConstructor( val dri: DRI, diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 3836f45d..617af959 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -2,11 +2,10 @@ package org.jetbrains.dokka.base.signatures import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentConverter import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.links.DriOfAny -import org.jetbrains.dokka.links.DriOfUnit -import org.jetbrains.dokka.links.sureClassNames +import org.jetbrains.dokka.links.* import org.jetbrains.dokka.model.* +import org.jetbrains.dokka.model.Nullable +import org.jetbrains.dokka.model.TypeConstructor import org.jetbrains.dokka.model.properties.WithExtraProperties import org.jetbrains.dokka.pages.ContentKind import org.jetbrains.dokka.pages.ContentNode @@ -71,6 +70,11 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog is DAnnotation -> text("annotation class ") } link(c.name!!, c.dri) + if(c is WithGenerics){ + list(c.generics, prefix = "<", suffix = "> ") { + +buildSignature(it) + } + } if (c is DClass) { val pConstructor = c.constructors.singleOrNull { it.extra[PrimaryConstructorExtra] != null } list(pConstructor?.parameters.orEmpty(), "(", ")", ",", pConstructor?.sourceSets.orEmpty().toSet()) { @@ -158,7 +162,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog } private fun signature(t: DTypeParameter) = contentBuilder.contentFor(t) { - link(t.name, t.dri) + link(t.name, t.dri.withTargetToDeclaration()) list(t.bounds, prefix = " : ") { signatureForProjection(it) } @@ -166,7 +170,7 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog private fun PageContentBuilder.DocumentableContentBuilder.signatureForProjection(p: Projection): Unit = when (p) { - is OtherParameter -> text(p.name) + is OtherParameter -> link(p.name, p.declarationDRI) is TypeConstructor -> if (p.function) +funType(mainDRI.single(), mainPlatformData, p) diff --git a/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt index 862f9240..1b8fa299 100644 --- a/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt +++ b/plugins/base/src/main/kotlin/transformers/documentables/DefaultDocumentableMerger.kt @@ -175,7 +175,8 @@ fun DAnnotation.mergeWith(other: DAnnotation): DAnnotation = copy( expectPresentInSet = expectPresentInSet ?: other.expectPresentInSet, sources = sources+ other.sources, visibility = visibility + other.visibility, - sourceSets = sourceSets + other.sourceSets + sourceSets = sourceSets + other.sourceSets, + generics = merge(generics + other.generics, DTypeParameter::mergeWith) ).mergeExtras(this, other) fun DParameter.mergeWith(other: DParameter): DParameter = copy( diff --git a/plugins/base/src/main/kotlin/transformers/documentables/DocumentableVisibilityFilter.kt b/plugins/base/src/main/kotlin/transformers/documentables/DocumentableVisibilityFilter.kt index 6fdce3a8..d15ec791 100644 --- a/plugins/base/src/main/kotlin/transformers/documentables/DocumentableVisibilityFilter.kt +++ b/plugins/base/src/main/kotlin/transformers/documentables/DocumentableVisibilityFilter.kt @@ -265,6 +265,7 @@ internal class DocumentableVisibilityFilter(val context: DokkaContext) : PreMerg visibility.filtered(filteredPlatforms), companion, constructors, + generics, filteredPlatforms, extra ) diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt index 7cc96a24..a62d9a0b 100644 --- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt @@ -1,10 +1,11 @@ package org.jetbrains.dokka.base.translators.descriptors import org.jetbrains.dokka.analysis.DokkaResolutionFacade +import org.jetbrains.dokka.links.* import org.jetbrains.dokka.links.Callable -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.links.withClass import org.jetbrains.dokka.model.* +import org.jetbrains.dokka.model.Nullable +import org.jetbrains.dokka.model.TypeConstructor import org.jetbrains.dokka.model.doc.* import org.jetbrains.dokka.model.properties.PropertyContainer import org.jetbrains.dokka.parsers.MarkdownParser @@ -127,7 +128,7 @@ private class DokkaDescriptorVisitor( visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(), supertypes = info.supertypes.toSourceSetDependent(), documentation = info.docs, - generics = descriptor.typeConstructor.parameters.map { it.toTypeParameter() }, + generics = descriptor.declaredTypeParameters.map { it.toTypeParameter() }, companion = descriptor.companion(driWithPlatform), sourceSets = listOf(sourceSet), extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations()) @@ -216,6 +217,7 @@ private class DokkaDescriptorVisitor( extra = PropertyContainer.withAll(descriptor.additionalExtras(), descriptor.getAnnotations()), companion = descriptor.companionObjectDescriptor?.let { objectDescriptor(it, driWithPlatform) }, visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(), + generics = descriptor.declaredTypeParameters.map { it.toTypeParameter() }, constructors = descriptor.constructors.map { visitConstructorDescriptor(it, driWithPlatform) }, sources = descriptor.createSources() ) @@ -245,7 +247,7 @@ private class DokkaDescriptorVisitor( expectPresentInSet = sourceSet.takeIf { isExpect }, visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(), supertypes = info.supertypes.toSourceSetDependent(), - generics = descriptor.typeConstructor.parameters.map { it.toTypeParameter() }, + generics = descriptor.declaredTypeParameters.map { it.toTypeParameter() }, documentation = info.docs, modifier = descriptor.modifier().toSourceSetDependent(), companion = descriptor.companion(driWithPlatform), @@ -364,7 +366,7 @@ private class DokkaDescriptorVisitor( descriptor: ReceiverParameterDescriptor, parent: DRIWithPlatformInfo ) = DParameter( - dri = parent.dri.copy(target = 0), + dri = parent.dri.copy(target = PointingToDeclaration), name = null, type = descriptor.type.toBound(), expectPresentInSet = null, @@ -383,7 +385,7 @@ private class DokkaDescriptorVisitor( fun PropertyDescriptor.asParameter(parent: DRI) = DParameter( - parent.copy(target = 1), + parent.copy(target = PointingToCallableParameters(parameterIndex = 1)), this.name.asString(), type = this.type.toBound(), expectPresentInSet = sourceSet.takeIf { isExpect }, @@ -444,7 +446,7 @@ private class DokkaDescriptorVisitor( private fun parameter(index: Int, descriptor: ValueParameterDescriptor, parent: DRIWithPlatformInfo) = DParameter( - dri = parent.dri.copy(target = index + 1), + dri = parent.dri.copy(target = PointingToCallableParameters(index)), name = descriptor.name.asString(), type = descriptor.type.toBound(), expectPresentInSet = null, @@ -518,7 +520,10 @@ private class DokkaDescriptorVisitor( ) private fun KotlinType.toBound(): Bound = when (val ctor = constructor.declarationDescriptor) { - is TypeParameterDescriptor -> OtherParameter(ctor.name.asString()).let { + is TypeParameterDescriptor -> OtherParameter( + declarationDRI = DRI.from(ctor.containingDeclaration), + name = ctor.name.asString() + ).let { if (isMarkedNullable) Nullable(it) else it } else -> TypeConstructor( diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index ca8055c8..ab4a84f6 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -6,6 +6,7 @@ import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.* import com.intellij.psi.impl.source.PsiClassReferenceType import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.links.nextTarget import org.jetbrains.dokka.links.withClass import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.properties.PropertyContainer @@ -159,6 +160,7 @@ object DefaultPsiToDocumentableTranslator : SourceToDocumentableTranslator { visibility, null, constructors.map { parseFunction(it, true) }, + mapTypeParameters(dri), listOf(sourceSetData), PropertyContainer.empty() + annotations.toList().toExtra() ) @@ -238,9 +240,9 @@ object DefaultPsiToDocumentableTranslator : SourceToDocumentableTranslator { dri, if (isConstructor) "" else psi.name, isConstructor, - psi.parameterList.parameters.mapIndexed { index, psiParameter -> + psi.parameterList.parameters.map { psiParameter -> DParameter( - dri.copy(target = index + 1), + dri.copy(target = dri.target.nextTarget()), psiParameter.name, javadocParser.parseDocumentation(psiParameter).toPlatformDependant(), null, @@ -321,9 +323,9 @@ object DefaultPsiToDocumentableTranslator : SourceToDocumentableTranslator { if (bounds.isEmpty()) emptyList() else bounds.mapNotNull { (it as? PsiClassType)?.let { classType -> Nullable(getBound(classType)) } } - return typeParameters.mapIndexed { index, type -> + return typeParameters.map { type -> DTypeParameter( - dri.copy(genericTarget = index), + dri.copy(target = dri.target.nextTarget()), type.name.orEmpty(), javadocParser.parseDocumentation(type).toPlatformDependant(), null, diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index e85ca30e..1ac05177 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -1,8 +1,10 @@ package basic import org.jetbrains.dokka.links.* -import org.jetbrains.dokka.pages.ContentPage -import org.jetbrains.dokka.pages.asSequence +import org.jetbrains.dokka.model.DClass +import org.jetbrains.dokka.model.DFunction +import org.jetbrains.dokka.model.DParameter +import org.jetbrains.dokka.pages.* import org.junit.jupiter.api.Assertions.assertEquals import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest @@ -131,7 +133,7 @@ class DRITest : AbstractCoreTest() { configuration ) { pagesGenerationStage = { module -> - // DRI(//qux/Foo[TypeParam(bounds=[kotlin.Comparable[kotlin.Any?]]),*]#//) + // DRI(//qux/Foo[TypeParam(bounds=[kotlin.Comparable[kotlin.Any?]]),*]#/PointingToFunctionOrClasslike/) val expectedDRI = DRI( "", null, @@ -163,4 +165,114 @@ class DRITest : AbstractCoreTest() { } } } + + @Test + fun driForGenericClass(){ + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + testInline( + """ + |/src/main/kotlin/Test.kt + |package example + | + |class Sample(first: S){ } + | + | + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { module -> + val sampleClass = module.dfs { it.name == "Sample" } as ClasslikePageNode + val classDocumentable = sampleClass.documentable as DClass + + assertEquals( "example/Sample///PointingToDeclaration/", sampleClass.dri.first().toString()) + assertEquals("example/Sample///PointingToGenericParameters(0)/", classDocumentable.generics.first().dri.toString()) + } + } + } + + @Test + fun driForGenericFunction(){ + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + classpath = listOfNotNull(jvmStdlibPath) + } + } + } + testInline( + """ + |/src/main/kotlin/Test.kt + |package example + | + |class Sample(first: S){ + | fun genericFun(param1: String): Triple = TODO() + |} + | + | + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { module -> + val sampleClass = module.dfs { it.name == "Sample" } as ClasslikePageNode + val functionNode = sampleClass.children.first { it.name == "genericFun" } as MemberPageNode + val functionDocumentable = functionNode.documentable as DFunction + val parameter = functionDocumentable.parameters.first() + + assertEquals("example/Sample/genericFun/#kotlin.String/PointingToDeclaration/", functionNode.dri.first().toString()) + + assertEquals(1, functionDocumentable.parameters.size) + assertEquals("example/Sample/genericFun/#kotlin.String/PointingToCallableParameters(0)/", parameter.dri.toString()) + //1 since from the function's perspective there is only 1 new generic declared + //The other one is 'inherited' from class + assertEquals( 1, functionDocumentable.generics.size) + assertEquals( "T", functionDocumentable.generics.first().name) + assertEquals( "example/Sample/genericFun/#kotlin.String/PointingToGenericParameters(0)/", functionDocumentable.generics.first().dri.toString()) + } + } + } + + @Test + fun driForGenericExtensionFunction(){ + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + } + } + } + testInline( + """ + |/src/main/kotlin/Test.kt + |package example + | + | fun List.extensionFunction(): String = "" + | + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { module -> + val extensionFunction = module.dfs { it.name == "extensionFunction" } as MemberPageNode + val documentable = extensionFunction.documentable as DFunction + + assertEquals( + "example//extensionFunction/kotlin.collections.List[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/", + extensionFunction.dri.first().toString() + ) + assertEquals(1, documentable.generics.size) + assertEquals("T", documentable.generics.first().name) + assertEquals( + "example//extensionFunction/kotlin.collections.List[TypeParam(bounds=[kotlin.Any?])]#/PointingToGenericParameters(0)/", + documentable.generics.first().dri.toString() + ) + + } + } + } } diff --git a/plugins/base/src/test/kotlin/markdown/LinkTest.kt b/plugins/base/src/test/kotlin/markdown/LinkTest.kt index d38486b5..bf234b6b 100644 --- a/plugins/base/src/test/kotlin/markdown/LinkTest.kt +++ b/plugins/base/src/test/kotlin/markdown/LinkTest.kt @@ -1,10 +1,12 @@ package markdown +import org.jetbrains.dokka.pages.ClasslikePageNode import org.jetbrains.dokka.pages.ContentDRILink import org.jetbrains.dokka.pages.MemberPageNode import org.jetbrains.dokka.pages.dfs import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Test class LinkTest : AbstractCoreTest() { @@ -36,11 +38,43 @@ class LinkTest : AbstractCoreTest() { .dfs { node -> node is ContentDRILink } .let { assertEquals( - "parser//test/#java.lang.ClassLoader//", + "parser//test/#java.lang.ClassLoader/PointingToDeclaration/", (it as ContentDRILink).address.toString() ) } } } } + + @Test + fun returnTypeShouldHaveLinkToOuterClassFromInner() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/main/kotlin/parser") + } + } + } + testInline( + """ + |/src/main/kotlin/parser/Test.kt + |package parser + | + |class Outer { + | inner class Inner { + | fun foo(): OUTER = TODO() + | } + |} + """.trimMargin(), + configuration + ) { + renderingStage = { rootPageNode, _ -> + val root = rootPageNode.children.single().children.single() as ClasslikePageNode + val innerClass = root.children.first { it is ClasslikePageNode } + val foo = innerClass.children.first { it.name == "foo" } as MemberPageNode + + assertNotNull(foo.content.dfs { it is ContentDRILink && it.address.toString() == "parser/Outer///PointingToDeclaration/" } ) + } + } + } } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/model/ClassesTest.kt b/plugins/base/src/test/kotlin/model/ClassesTest.kt index a349e54a..ea0d93ed 100644 --- a/plugins/base/src/test/kotlin/model/ClassesTest.kt +++ b/plugins/base/src/test/kotlin/model/ClassesTest.kt @@ -425,7 +425,7 @@ class ClassesTest : AbstractModelTest("/src/main/kotlin/classes/Test.kt", "class ) { with((this / "classes" / "Foo").cast()) { with(extra[Annotations]?.content?.firstOrNull().assertNotNull("annotations")) { - dri.toString() equals "kotlin/Suppress////" + dri.toString() equals "kotlin/Suppress///PointingToDeclaration/" with(params["names"].assertNotNull("param")) { this equals "[\"abc\"]" } @@ -459,4 +459,29 @@ class ClassesTest : AbstractModelTest("/src/main/kotlin/classes/Test.kt", "class } } } + + @Test fun genericAnnotationClass() { + inlineModelTest( + """annotation class Foo() {}""" + ) { + with((this / "classes" / "Foo").cast()){ + generics.map { it.name to it.bounds.first().name } equals listOf("A" to "Any", "B" to "Any", "C" to "Any", "D" to "Number") + } + } + } + + @Test fun nestedGenericClasses(){ + inlineModelTest( + """ + |class Outer { + | inner class Inner { } + |} + """.trimMargin() + ){ + with((this / "classes" / "Outer").cast()){ + val inner = classlikes.single().cast() + inner.generics.map { it.name to it.bounds.first().name } equals listOf("INNER" to "Any", "T" to "OUTER") + } + } + } } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/model/JavaTest.kt b/plugins/base/src/test/kotlin/model/JavaTest.kt index a58b380c..76924f0f 100644 --- a/plugins/base/src/test/kotlin/model/JavaTest.kt +++ b/plugins/base/src/test/kotlin/model/JavaTest.kt @@ -394,7 +394,6 @@ class JavaTest : AbstractModelTest("/src/main/kotlin/java/Test.java", "java") { } } - @Disabled("reenable after fixing subtypes") @Test fun inheritorLinks() { inlineModelTest( diff --git a/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt b/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt index 5a77016d..8d9ac20d 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/converters/KotlinToJavaConverter.kt @@ -1,12 +1,13 @@ package org.jetbrains.dokka.kotlinAsJava.converters +import org.jetbrains.dokka.links.* import org.jetbrains.dokka.links.Callable -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.links.withClass import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.DAnnotation import org.jetbrains.dokka.model.DEnum import org.jetbrains.dokka.model.DFunction +import org.jetbrains.dokka.model.Nullable +import org.jetbrains.dokka.model.TypeConstructor import org.jetbrains.dokka.model.properties.PropertyContainer import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.name.ClassId @@ -243,7 +244,7 @@ internal fun ClassId.toDRI(dri: DRI?): DRI = DRI( classNames = classNames(), callable = dri?.callable,//?.asJava(), TODO: check this extra = null, - target = null + target = PointingToDeclaration ) private fun PropertyContainer.mergeAdditionalModifiers(second: Set) = diff --git a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt index d737cedb..9135d36e 100644 --- a/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt +++ b/plugins/kotlin-as-java/src/main/kotlin/signatures/JavaSignatureProvider.kt @@ -92,7 +92,7 @@ class JavaSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLogge private fun PageContentBuilder.DocumentableContentBuilder.signatureForProjection(p: Projection): Unit = when (p) { - is OtherParameter -> text(p.name) + is OtherParameter -> link(p.name, p.declarationDRI) is TypeConstructor -> group { link(p.dri.classNames.orEmpty(), p.dri) -- cgit From 5f9299b074355e3f636da6eb6e1f9283f06ab8c7 Mon Sep 17 00:00:00 2001 From: Marcin Aman Date: Thu, 21 May 2020 14:51:55 +0200 Subject: Return types links in inner classes with generic parents --- .../DefaultDescriptorToDocumentableTranslator.kt | 15 ++++++-- plugins/base/src/test/kotlin/basic/DRITest.kt | 40 +++++++++++++++++++- .../kotlin/linkableContent/LinkableContentTest.kt | 43 +++++++++++++++++++++- plugins/base/src/test/kotlin/markdown/LinkTest.kt | 7 ++-- .../test/kotlin/renderers/RenderingOnlyTestBase.kt | 17 --------- .../renderers/html/SourceSetDependentHintTest.kt | 1 - 6 files changed, 97 insertions(+), 26 deletions(-) (limited to 'plugins/base/src/test/kotlin/basic') diff --git a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt index 65b83200..60182ba9 100644 --- a/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt @@ -101,8 +101,7 @@ private class DokkaDescriptorVisitor( descriptor: PackageFragmentDescriptor, parent: DRIWithPlatformInfo ): DPackage { - val name = descriptor.fqName.asString().takeUnless { it.isBlank() } ?: - "[${sourceSet.sourceSetName} root]"// TODO: error-prone, find a better way to do it + val name = descriptor.fqName.asString().takeUnless { it.isBlank() } ?: fallbackPackageName() val driWithPlatform = DRI(packageName = name).withEmptyInfo() val scope = descriptor.getMemberScope() @@ -544,7 +543,7 @@ private class DokkaDescriptorVisitor( is DynamicType -> Dynamic else -> when (val ctor = constructor.declarationDescriptor) { is TypeParameterDescriptor -> OtherParameter( - declarationDRI = DRI.from(ctor.containingDeclaration), + declarationDRI = DRI.from(ctor.containingDeclaration).withPackageFallbackTo(fallbackPackageName()), name = ctor.name.asString() ) else -> TypeConstructor( @@ -694,4 +693,14 @@ private class DokkaDescriptorVisitor( private fun ConstantsEnumValue.fullEnumEntryName() = "${this.enumClassId.relativeClassName.asString()}.${this.enumEntryName.identifier}" + + private fun fallbackPackageName(): String = "[${sourceSet.sourceSetName} root]"// TODO: error-prone, find a better way to do it +} + +private fun DRI.withPackageFallbackTo(fallbackPackage: String): DRI { + return if(packageName.isNullOrBlank()){ + copy(packageName = fallbackPackage) + } else { + this + } } diff --git a/plugins/base/src/test/kotlin/basic/DRITest.kt b/plugins/base/src/test/kotlin/basic/DRITest.kt index 1ac05177..b09932fe 100644 --- a/plugins/base/src/test/kotlin/basic/DRITest.kt +++ b/plugins/base/src/test/kotlin/basic/DRITest.kt @@ -4,6 +4,7 @@ import org.jetbrains.dokka.links.* import org.jetbrains.dokka.model.DClass import org.jetbrains.dokka.model.DFunction import org.jetbrains.dokka.model.DParameter +import org.jetbrains.dokka.model.OtherParameter import org.jetbrains.dokka.pages.* import org.junit.jupiter.api.Assertions.assertEquals import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest @@ -212,7 +213,7 @@ class DRITest : AbstractCoreTest() { |package example | |class Sample(first: S){ - | fun genericFun(param1: String): Triple = TODO() + | fun genericFun(param1: String): Tuple = TODO() |} | | @@ -238,6 +239,43 @@ class DRITest : AbstractCoreTest() { } } + @Test + fun driForFunctionNestedInsideInnerClass() { + val configuration = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + classpath = listOfNotNull(jvmStdlibPath) + } + } + } + testInline( + """ + |/src/main/kotlin/Test.kt + |package example + | + |class Sample(first: S){ + | inner class SampleInner { + | fun foo(): S = TODO() + | } + |} + | + | + """.trimMargin(), + configuration + ) { + pagesGenerationStage = { module -> + val sampleClass = module.dfs { it.name == "Sample" } as ClasslikePageNode + val sampleInner = sampleClass.children.first { it.name == "SampleInner" } as ClasslikePageNode + val foo = sampleInner.children.first { it.name == "foo" } as MemberPageNode + val documentable = foo.documentable as DFunction + + assertEquals(sampleClass.dri.first().toString(), (documentable.type as OtherParameter).declarationDRI.toString()) + assertEquals(0, documentable.generics.size) + } + } + } + @Test fun driForGenericExtensionFunction(){ val configuration = dokkaConfiguration { diff --git a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt b/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt index c34fa909..33d3f64c 100644 --- a/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt +++ b/plugins/base/src/test/kotlin/linkableContent/LinkableContentTest.kt @@ -11,7 +11,6 @@ import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test import java.nio.file.Paths @@ -182,4 +181,46 @@ class LinkableContentTest : AbstractCoreTest() { } } } + + @Test + fun `Documenting return type for a function in inner class with generic parent`(){ + testInline( + """ + |/src/main/kotlin/test/source.kt + |package test + | + |class Sample(first: S){ + | inner class SampleInner { + | fun foo(): S = TODO() + | } + |} + | + """.trimIndent(), + dokkaConfiguration { + passes { + pass { + sourceRoots = listOf("src/") + analysisPlatform = "jvm" + targets = listOf("jvm") + } + } + } + ) { + renderingStage = { module, _ -> + val sample = module.children.single { it.name == "test" } + .children.single { it.name == "Sample" }.cast() + val foo = sample + .children.single { it.name == "SampleInner" }.cast() + .children.single { it.name == "foo" }.cast() + + val returnTypeNode = foo.content.dfs { + val link = it.safeAs()?.children + val child = link?.first().safeAs() + child?.text == "S" + }?.safeAs() + + Assertions.assertEquals(sample.dri.first(), returnTypeNode?.address) + } + } + } } \ No newline at end of file diff --git a/plugins/base/src/test/kotlin/markdown/LinkTest.kt b/plugins/base/src/test/kotlin/markdown/LinkTest.kt index bf234b6b..fe5b573a 100644 --- a/plugins/base/src/test/kotlin/markdown/LinkTest.kt +++ b/plugins/base/src/test/kotlin/markdown/LinkTest.kt @@ -51,14 +51,14 @@ class LinkTest : AbstractCoreTest() { val configuration = dokkaConfiguration { passes { pass { - sourceRoots = listOf("src/main/kotlin/parser") + sourceRoots = listOf("src/main/kotlin") } } } + //This does not contain a package to check for situation when the package has to be artificially generated testInline( """ |/src/main/kotlin/parser/Test.kt - |package parser | |class Outer { | inner class Inner { @@ -73,7 +73,8 @@ class LinkTest : AbstractCoreTest() { val innerClass = root.children.first { it is ClasslikePageNode } val foo = innerClass.children.first { it.name == "foo" } as MemberPageNode - assertNotNull(foo.content.dfs { it is ContentDRILink && it.address.toString() == "parser/Outer///PointingToDeclaration/" } ) + assertEquals(root.dri.first().toString(), "[main root]/Outer///PointingToDeclaration/") + assertNotNull(foo.content.dfs { it is ContentDRILink && it.address.toString() == root.dri.first().toString() } ) } } } diff --git a/plugins/base/src/test/kotlin/renderers/RenderingOnlyTestBase.kt b/plugins/base/src/test/kotlin/renderers/RenderingOnlyTestBase.kt index dd4d1ee0..08d4a7b6 100644 --- a/plugins/base/src/test/kotlin/renderers/RenderingOnlyTestBase.kt +++ b/plugins/base/src/test/kotlin/renderers/RenderingOnlyTestBase.kt @@ -112,21 +112,4 @@ internal object EmptyCommentConverter : CommentsToContentConverter { styles: Set