Skip to content

Commit

Permalink
add test for constructor signatures for the expect classes
Browse files Browse the repository at this point in the history
  • Loading branch information
whyoleg committed May 22, 2024
1 parent 28b659e commit 84ed57a
Showing 1 changed file with 261 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ package content.signatures

import matchers.content.*
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.model.DisplaySourceSet
import org.jetbrains.dokka.pages.BasicTabbedContentType
import org.jetbrains.dokka.pages.ContentPage
import kotlin.test.Test
import utils.OnlyDescriptors
import kotlin.test.assertEquals

class ConstructorsSignaturesTest : BaseAbstractTest() {
private val testConfiguration = dokkaConfiguration {
Expand All @@ -21,6 +23,24 @@ class ConstructorsSignaturesTest : BaseAbstractTest() {
}
}

private val multiplatformConfiguration = dokkaConfiguration {
sourceSets {
val commonId = sourceSet {
sourceRoots = listOf("src/common/")
analysisPlatform = "common"
name = "common"
displayName = "common"
}.value.sourceSetID
sourceSet {
sourceRoots = listOf("src/jvm/")
analysisPlatform = "jvm"
name = "jvm"
displayName = "jvm"
dependentSourceSets = setOf(commonId)
}
}
}

@Test
fun `class name without parenthesis`() {
testInline(
Expand Down Expand Up @@ -466,4 +486,245 @@ class ConstructorsSignaturesTest : BaseAbstractTest() {
}
}
}

@Test
fun `expect class without constructor should have only primary constructor`() {
testInline(
"""
|/src/common/test.kt
|expect class ExpectActualClass
|/src/jvm/test.kt
|actual class ExpectActualClass
""".trimIndent(), multiplatformConfiguration
) {
pagesTransformationStage = { module ->
val page =
module.children.single { it.name == "[root]" }
.children.single { it.name == "ExpectActualClass" } as ContentPage
page.content.assertNode {
group {
header(1) { +"ExpectActualClass" }
platformHinted {
check {
assertEquals(setOf("common", "jvm"), sourceSets.map(DisplaySourceSet::name).toSet())
}
group {
check {
assertEquals("common", this.sourceSets.single().name)
}
+"expect class "
link { +"ExpectActualClass" }
}
group {
check {
assertEquals("jvm", this.sourceSets.single().name)
}
+"actual class "
link { +"ExpectActualClass" }
}
}
}
group {
group {
group {
header(2) { +"Constructors" }
table {
group {
link { +"ExpectActualClass" }
platformHinted {
check {
// constructor should exist only for jvm source set
assertEquals(
setOf("jvm"),
sourceSets.map(DisplaySourceSet::name).toSet()
)
}
group {
check { assertEquals("jvm", this.sourceSets.single().name) }
// no actual modifier
+"constructor()"
}
}
}
}
}
}
skipAllNotMatching()
}
}
}
}
}

@Test
fun `expect class with empty constructor should have only both expect and actual constructor`() {
testInline(
"""
|/src/common/test.kt
|expect class ExpectActualClass()
|/src/jvm/test.kt
|actual class ExpectActualClass actual constructor()
""".trimIndent(), multiplatformConfiguration
) {
pagesTransformationStage = { module ->
val page =
module.children.single { it.name == "[root]" }
.children.single { it.name == "ExpectActualClass" } as ContentPage
page.content.assertNode {
group {
header(1) { +"ExpectActualClass" }
platformHinted {
check {
assertEquals(
setOf("common", "jvm"),
sourceSets.map(DisplaySourceSet::name).toSet()
)
}
group {
check {
assertEquals("common", this.sourceSets.single().name)
}
+"expect class "
link { +"ExpectActualClass" }
}
group {
check {
assertEquals("jvm", this.sourceSets.single().name)
}
+"actual class "
link { +"ExpectActualClass" }
}
}
}
group {
group {
group {
header(2) { +"Constructors" }
table {
group {
link { +"ExpectActualClass" }
platformHinted {
check {
assertEquals(
setOf("common", "jvm"),
sourceSets.map(DisplaySourceSet::name).toSet()
)
}
group {
check { assertEquals("common", this.sourceSets.single().name) }
+"expect constructor()"
}
group {
check { assertEquals("jvm", this.sourceSets.single().name) }
+"actual constructor()"
}
}
}
}
}
}
skipAllNotMatching()
}
}
}
}
}

@Test
fun `expect class with constructor with parameter`() {
testInline(
"""
|/src/common/test.kt
|expect class ExpectActualClass(a: String)
|/src/jvm/test.kt
|actual class ExpectActualClass actual constructor(a: String)
""".trimIndent(), multiplatformConfiguration
) {
pagesTransformationStage = { module ->
val page =
module.children.single { it.name == "[root]" }
.children.single { it.name == "ExpectActualClass" } as ContentPage
page.content.assertNode {
group {
header(1) { +"ExpectActualClass" }
platformHinted {
check {
assertEquals(setOf("common", "jvm"), sourceSets.map(DisplaySourceSet::name).toSet())
}
group {
check {
assertEquals("common", this.sourceSets.single().name)
}
+"expect class "
link { +"ExpectActualClass" }
+"("
group {
group {
+"a: "
group { link { +"String" } }
}
}
+")"
}
group {
check {
assertEquals("jvm", this.sourceSets.single().name)
}
+"actual class "
link { +"ExpectActualClass" }
+"("
group {
group {
+"a: "
group { link { +"String" } }
}
}
+")"
}
}
}
group {
group {
group {
header(2) { +"Constructors" }
table {
group {
link { +"ExpectActualClass" }
platformHinted {
check {
println(this)
}
group {
check { assertEquals("common", this.sourceSets.single().name) }
+"expect constructor("
group {
group {
+"a: "
group { link { +"String" } }
}
}
+")"
}
group {
check { assertEquals("jvm", this.sourceSets.single().name) }
+"actual constructor("
group {
group {
+"a: "
group { link { +"String" } }
}
}
+")"
}
}
}
}
}
}
skipAllNotMatching()
}
}
}
}
}
}

0 comments on commit 84ed57a

Please sign in to comment.