diff options
Diffstat (limited to 'plugins/base/src/test/kotlin/signatures/SignatureTest.kt')
-rw-r--r-- | plugins/base/src/test/kotlin/signatures/SignatureTest.kt | 1035 |
1 files changed, 0 insertions, 1035 deletions
diff --git a/plugins/base/src/test/kotlin/signatures/SignatureTest.kt b/plugins/base/src/test/kotlin/signatures/SignatureTest.kt deleted file mode 100644 index 80a043fe..00000000 --- a/plugins/base/src/test/kotlin/signatures/SignatureTest.kt +++ /dev/null @@ -1,1035 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package signatures - -import org.jetbrains.dokka.DokkaSourceSetID -import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest -import org.jetbrains.dokka.model.DFunction -import org.jetbrains.dokka.model.DefinitelyNonNullable -import org.jetbrains.dokka.model.dfs -import utils.* -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue - -class SignatureTest : BaseAbstractTest() { - private val configuration = dokkaConfiguration { - sourceSets { - sourceSet { - sourceRoots = listOf("src/") - classpath = listOf( - commonStdlibPath ?: throw IllegalStateException("Common stdlib is not found"), - jvmStdlibPath ?: throw IllegalStateException("JVM stdlib is not found") - ) - externalDocumentationLinks = listOf(stdlibExternalDocumentationLink) - } - } - } - - private val mppConfiguration = dokkaConfiguration { - moduleName = "test" - sourceSets { - sourceSet { - name = "common" - sourceRoots = listOf("src/main/kotlin/common/Test.kt") - classpath = listOf(commonStdlibPath!!) - externalDocumentationLinks = listOf(stdlibExternalDocumentationLink) - } - sourceSet { - name = "jvm" - dependentSourceSets = setOf(DokkaSourceSetID("test", "common")) - sourceRoots = listOf("src/main/kotlin/jvm/Test.kt") - classpath = listOf( - commonStdlibPath ?: throw IllegalStateException("Common stdlib is not found"),) - externalDocumentationLinks = listOf(stdlibExternalDocumentationLink) - } - } - } - - fun source(signature: String) = - """ - |/src/main/kotlin/test/Test.kt - |package example - | - | $signature - """.trimIndent() - - @Test - fun `fun`() { - val source = source("fun simpleFun(): String = \"Celebrimbor\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun ", A("simpleFun"), "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `open fun`() { - val source = source("open fun simpleFun(): String = \"Celebrimbor\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "open fun ", A("simpleFun"), "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `open suspend fun`() { - val source = source("open suspend fun simpleFun(): String = \"Celebrimbor\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "open suspend fun ", A("simpleFun"), "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with params`() { - val source = source("fun simpleFun(a: Int, b: Boolean, c: Any): String = \"Celebrimbor\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun ", A("simpleFun"), "(", Parameters( - Parameter("a: ", A("Int"), ","), - Parameter("b: ", A("Boolean"), ","), - Parameter("c: ", A("Any")), - ), "): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with function param`() { - val source = source("fun simpleFun(a: (Int) -> String): String = \"Celebrimbor\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun ", A("simpleFun"), "(", Parameters( - Parameter("a: (", A("Int"), ") -> ", A("String")), - ),"): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with generic param`() { - val source = source("fun <T> simpleFun(): T = \"Celebrimbor\" as T") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun <", A("T"), "> ", A("simpleFun"), "(): ", - A("T"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with generic bounded param`() { - val source = source("fun <T : String> simpleFun(): T = \"Celebrimbor\" as T") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun <", A("T"), " : ", A("String"), "> ", A("simpleFun"), - "(): ", A("T"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with definitely non-nullable types`() { - val source = source("fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - documentablesTransformationStage = { - val fn = (it.dfs { it.name == "elvisLike" } as? DFunction).assertNotNull("Function elvisLike") - - assertTrue(fn.type is DefinitelyNonNullable) - assertTrue(fn.parameters[1].type is DefinitelyNonNullable) - } - renderingStage = { _, _ -> - val signature = writerPlugin.writer.renderedContent("root/example/elvis-like.html") - assertEquals(2, signature.select("a[href=\"https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html\"]").size) - signature.firstSignature().match( - "fun <", A("T"), "> ", A("elvisLike"), - "(", - Span( - Span("x: ", A("T"), ", "), - Span("y: ", A("T"), " & ", A("Any")) - ), - "): ", A("T"), " & ", A("Any"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with keywords, params and generic bound`() { - val source = source("inline suspend fun <T : String> simpleFun(a: Int, b: String): T = \"Celebrimbor\" as T") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "inline suspend fun <", A("T"), " : ", A("String"), "> ", A("simpleFun"), "(", Parameters( - Parameter("a: ", A("Int"), ","), - Parameter("b: ", A("String")), - ), "): ", A("T"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with vararg`() { - val source = source("fun simpleFun(vararg params: Int): Unit") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun ", A("simpleFun"), "(", Parameters( - Parameter("vararg params: ", A("Int")), - ), ")", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `class with no supertype`() { - val source = source("class SimpleClass") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/-simple-class/index.html").firstSignature().match( - "class ", A("SimpleClass"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `class with generic supertype`() { - val source = source("class InheritingClassFromGenericType<T : Number, R : CharSequence> : Comparable<T>, Collection<R>") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/-inheriting-class-from-generic-type/index.html").firstSignature().match( - "class ", A("InheritingClassFromGenericType"), " <", A("T"), " : ", A("Number"), ", ", A("R"), " : ", A("CharSequence"), - "> : ", A("Comparable"), "<", A("T"), "> , ", A("Collection"), "<", A("R"), ">", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `functional interface`() { - val source = source("fun interface KRunnable") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/-k-runnable/index.html").firstSignature().match( - "fun interface ", A("KRunnable"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with annotation`() { - val source = """ - |/src/main/kotlin/test/Test.kt - |package example - | - | @MustBeDocumented() - | @Target(AnnotationTarget.FUNCTION) - | annotation class Marking - | - | @Marking() - | fun simpleFun(): String = "Celebrimbor" - """.trimIndent() - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - Div( - Div("@", A("Marking")) - ), - "fun ", A("simpleFun"), - "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `property with annotation`() { - val source = """ - |/src/main/kotlin/test/Test.kt - |package example - | - | @MustBeDocumented() - | @Target(AnnotationTarget.FUNCTION) - | annotation class Marking - | - | @get:Marking() - | @set:Marking() - | var str: String - """.trimIndent() - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/str.html").firstSignature().match( - Div( - Div("@get:", A("Marking")), - Div("@set:", A("Marking")) - ), - "var ", A("str"), - ": ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with two annotations`() { - val source = """ - |/src/main/kotlin/test/Test.kt - |package example - | - | @MustBeDocumented() - | @Target(AnnotationTarget.FUNCTION) - | annotation class Marking(val msg: String) - | - | @MustBeDocumented() - | @Target(AnnotationTarget.FUNCTION) - | annotation class Marking2(val int: Int) - | - | @Marking("Nenya") - | @Marking2(1) - | fun simpleFun(): String = "Celebrimbor" - """.trimIndent() - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html") - .firstSignature() - .match( - Div( - Div("@", A("Marking"), "(", Span("msg = ", Span("\"Nenya\"")), Wbr, ")"), - Div("@", A("Marking2"), "(", Span("int = ", Span("1")), Wbr, ")") - ), - "fun ", A("simpleFun"), - "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `fun with annotation with array`() { - val source = """ - |/src/main/kotlin/test/Test.kt - |package example - | - | @MustBeDocumented() - | @Target(AnnotationTarget.FUNCTION) - | annotation class Marking(val msg: Array<String>) - | - | @Marking(["Nenya", "Vilya", "Narya"]) - | @Marking2(1) - | fun simpleFun(): String = "Celebrimbor" - """.trimIndent() - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - Div( - Div( - "@", A("Marking"), "(", Span( - "msg = [", - Span(Span("\"Nenya\""), ", "), Wbr, - Span(Span("\"Vilya\""), ", "), Wbr, - Span(Span("\"Narya\"")), Wbr, "]" - ), Wbr, ")" - ) - ), - "fun ", A("simpleFun"), - "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `actual fun`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |expect fun simpleFun(): String - | - |/src/main/kotlin/jvm/Test.kt - |package example - | - |actual fun simpleFun(): String = "Celebrimbor" - | - """.trimMargin(), - mppConfiguration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val signatures = writerPlugin.writer.renderedContent("test/example/simple-fun.html").signature().toList() - - signatures[0].match( - "expect fun ", A("simpleFun"), - "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - signatures[1].match( - "actual fun ", A("simpleFun"), - "(): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `actual property with a default value`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |expect val prop: Int - | - |/src/main/kotlin/jvm/Test.kt - |package example - | - |actual val prop: Int = 2 - | - """.trimMargin(), - mppConfiguration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val signatures = writerPlugin.writer.renderedContent("test/example/prop.html").signature().toList() - - signatures[0].match( - "expect val ", A("prop"), - ": ", A("Int"), - ignoreSpanWithTokenStyle = true - ) - signatures[1].match( - "actual val ", A("prop"), - ": ", A("Int"), - " = 2", - ignoreSpanWithTokenStyle = true - ) - } - } - } - @Test - fun `actual typealias should have generic parameters and fully qualified name of the expansion type`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |expect class Array<T> - | - |/src/main/kotlin/jvm/Test.kt - |package example - | - |actual typealias Array<T> = kotlin.Array<T> - """.trimMargin(), - mppConfiguration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val signatures = writerPlugin.writer.renderedContent("test/example/-array/index.html").signature().toList() - - signatures[0].match( - "expect class ", A("Array"), "<", A("T"), ">", - ignoreSpanWithTokenStyle = true - ) - signatures[1].match( - "actual typealias ", A("Array"), "<", A("T"), "> = ", A("kotlin.Array"), "<", A("T"), ">", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `type with an actual typealias`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |expect class Foo - | - |/src/main/kotlin/jvm/Test.kt - |package example - | - |class Bar - |actual typealias Foo = Bar - | - """.trimMargin(), - mppConfiguration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val signatures = writerPlugin.writer.renderedContent("test/example/-foo/index.html").signature().toList() - - signatures[0].match( - "expect class ", A("Foo"), - ignoreSpanWithTokenStyle = true - ) - signatures[1].match( - "actual typealias ", A("Foo"), " = ", A("Bar"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `plain typealias of plain class`() { - - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |typealias PlainTypealias = Int - | - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match( - "typealias ", A("PlainTypealias"), " = ", A("Int"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `plain typealias of plain class with annotation`() { - - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |@MustBeDocumented - |@Target(AnnotationTarget.TYPEALIAS) - |annotation class SomeAnnotation - | - |@SomeAnnotation - |typealias PlainTypealias = Int - | - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match( - Div( - Div( - "@", A("SomeAnnotation") - ) - ), - "typealias ", A("PlainTypealias"), " = ", A("Int"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `plain typealias of generic class`() { - - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |typealias PlainTypealias = Comparable<Int> - | - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match( - "typealias ", A("PlainTypealias"), " = ", A("Comparable"), - "<", A("Int"), ">", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `typealias with generics params`() { - - - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |typealias GenericTypealias<T> = Comparable<T> - | - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match( - "typealias ", A("GenericTypealias"), "<", A("T"), "> = ", A("Comparable"), - "<", A("T"), ">", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `typealias with generic params swapped`() { - - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/kotlinAsJavaPlugin/Test.kt - |package kotlinAsJavaPlugin - | - |typealias XD<B, A> = Map<A, B> - | - |class ABC { - | fun someFun(xd: XD<Int, String>) = 1 - |} - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/kotlinAsJavaPlugin/-a-b-c/some-fun.html").firstSignature() - .match( - "fun ", A("someFun"), "(", Parameters( - Parameter("xd: ", A("XD"), "<", A("Int"), ", ", A("String"), ">"), - ), "):", A("Int"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @OnlyDescriptors("Order of constructors is different in K2") - @Test - fun `generic constructor params`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |class GenericClass<T>(val x: Int) { - | constructor(x: T) : this(1) - | - | constructor(x: Int, y: String) : this(1) - | - | constructor(x: Int, y: List<T>) : this(1) - | - | constructor(x: Boolean, y: Int, z: String) : this(1) - | - | constructor(x: List<Comparable<Lazy<T>>>?) : this(1) - |} - | - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/-generic-class/-generic-class.html").signature().zip( - listOf( - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("T")) - ), - ")", - ), - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("Int"), ", "), - Parameter("y: ", A("String")) - ), - ")", - ), - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("Int"), ", "), - Parameter("y: ", A("List"), "<", A("T"), ">") - ), - ")", - ), - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("Boolean"), ", "), - Parameter("y: ", A("Int"), ", "), - Parameter("z:", A("String")) - ), - ")", - ), - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("List"), "<", A("Comparable"), "<", A("Lazy"), "<", A("T"), ">>>?") - ), - ")", - ), - arrayOf( - "constructor(", - Parameters( - Parameter("x: ", A("Int")) - ), - ")", - ), - ) - ).forEach { - it.first.match(*it.second, ignoreSpanWithTokenStyle = true) - } - } - } - } - - @Test - fun `constructor has its own custom signature keyword in Constructor tab`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |class PrimaryConstructorClass(x: String) { } - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val constructorTabFirstElement = - writerPlugin.writer.renderedContent("root/example/-primary-constructor-class/index.html") - .tab("CONSTRUCTOR") - .first() ?: throw NoSuchElementException("No Constructors tab found or it is empty") - - constructorTabFirstElement.firstSignature().match( - "constructor(", Parameters(Parameter("x: ", A("String"))), ")", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `primary constructor with properties check for all tokens`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/Test.kt - |package example - | - |class PrimaryConstructorClass<T>(val x: Int, var s: String) { } - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/-primary-constructor-class/index.html").firstSignature().match( - // In `<T>` expression, an empty `<span class="token keyword"></span>` is present for some reason - Span("class "), A("PrimaryConstructorClass"), Span("<"), Span(), A("T"), Span(">"), Span("("), Parameters( - Parameter(Span("val "), "x", Span(": "), A("Int"), Span(",")), - Parameter(Span("var "), "s", Span(": "), A("String")) - ), Span(")"), - ) - } - } - } - - @Test - fun `fun with default values`() { - val source = source("fun simpleFun(int: Int = 1, string: String = \"string\"): String = \"\"") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/simple-fun.html").firstSignature().match( - "fun", A("simpleFun"), "(", Parameters( - Parameter("int: ", A("Int"), " = 1,"), - Parameter("string: ", A("String"), " = \"string\"") - ), "): ", A("String"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `const val with default values`() { - val source = source("const val simpleVal = 1") - val writerPlugin = TestOutputWriterPlugin() - - testInline( - source, - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/example/index.html").firstSignature().match( - "const val ", A("simpleVal"), ": ", A("Int"), " = 1", - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @Test - fun `should not expose enum constructor entry arguments`() { - val writerPlugin = TestOutputWriterPlugin() - - testInline( - """ - |/src/main/kotlin/common/EnumClass.kt - |package example - | - |enum class EnumClass(param: String = "Default") { - | EMPTY, - | WITH_ARG("arg") - |} - """.trimMargin(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - val enumEntrySignatures = writerPlugin.writer.renderedContent("root/example/-enum-class/index.html") - .select("div[data-togglable=ENTRY] .table") - .single() - .signature() - .select("div.block") - - enumEntrySignatures[0].match( - A("EMPTY"), - ignoreSpanWithTokenStyle = true - ) - - enumEntrySignatures[1].match( - A("WITH_ARG"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - - @OnlyDescriptors("'var' expected but found: 'open var'") - @Test - fun `java property without accessors should be var`() { - val writerPlugin = TestOutputWriterPlugin() - testInline( - """ - |/src/test/JavaClass.java - |package test; - |public class JavaClass { - | public int property = 0; - |} - | - |/src/test/KotlinClass.kt - |package test - |open class KotlinClass : JavaClass() { } - """.trimIndent(), - configuration, - pluginOverrides = listOf(writerPlugin) - ) { - renderingStage = { _, _ -> - writerPlugin.writer.renderedContent("root/test/-kotlin-class/index.html").let { kotlinClassContent -> - val signatures = kotlinClassContent.signature().toList() - assertEquals(3, signatures.size, "Expected 2 signatures: class signature, constructor and property") - - val property = signatures[2] - property.match( - "var ", A("property"), ":", A("Int"), - ignoreSpanWithTokenStyle = true - ) - } - - writerPlugin.writer.renderedContent("root/test/-java-class/index.html").let { kotlinClassContent -> - val signatures = kotlinClassContent.signature().toList() - assertEquals( - 3, - signatures.size, - "Expected 3 signatures: class signature, default constructor and property" - ) - - val property = signatures[2] - property.match( - "open var ", A("property"), ":", A("Int"), - ignoreSpanWithTokenStyle = true - ) - } - } - } - } -} |