aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/test/kotlin/model/ClassesTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/test/kotlin/model/ClassesTest.kt')
-rw-r--r--plugins/base/src/test/kotlin/model/ClassesTest.kt594
1 files changed, 0 insertions, 594 deletions
diff --git a/plugins/base/src/test/kotlin/model/ClassesTest.kt b/plugins/base/src/test/kotlin/model/ClassesTest.kt
deleted file mode 100644
index c18dfafb..00000000
--- a/plugins/base/src/test/kotlin/model/ClassesTest.kt
+++ /dev/null
@@ -1,594 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package model
-
-import org.jetbrains.dokka.links.DRI
-import org.jetbrains.dokka.links.TypeConstructor
-import org.jetbrains.dokka.links.sureClassNames
-import org.jetbrains.dokka.model.*
-import org.jetbrains.dokka.model.KotlinModifier.*
-import kotlin.test.assertNull
-import kotlin.test.Test
-import utils.*
-
-
-class ClassesTest : AbstractModelTest("/src/main/kotlin/classes/Test.kt", "classes") {
-
- @Test
- fun emptyClass() {
- inlineModelTest(
- """
- |class Klass {}"""
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- children counts 4
- }
- }
- }
-
- @Test
- fun classWithConstructor() {
- inlineModelTest(
- """
- |class Klass(name: String)
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- children counts 4
-
- with(constructors.firstOrNull().assertNotNull("Constructor")) {
- visibility.values allEquals KotlinVisibility.Public
- parameters counts 1
- with(parameters.firstOrNull().assertNotNull("Constructor parameter")) {
- name equals "name"
- type.name equals "String"
- }
- }
-
- }
- }
- }
-
- @Test
- fun classWithFunction() {
- inlineModelTest(
- """
- |class Klass {
- | fun fn() {}
- |}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- children counts 5
-
- with((this / "fn").cast<DFunction>()) {
- type.name equals "Unit"
- parameters counts 0
- visibility.values allEquals KotlinVisibility.Public
- }
- }
- }
- }
-
- @Test
- fun classWithProperty() {
- inlineModelTest(
- """
- |class Klass {
- | val name: String = ""
- |}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- children counts 5
-
- with((this / "name").cast<DProperty>()) {
- name equals "name"
- // TODO property name
- }
- }
- }
- }
-
- @Test
- fun classWithCompanionObject() {
- inlineModelTest(
- """
- |class Klass() {
- | companion object {
- | val x = 1
- | fun foo() {}
- | }
- |}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- children counts 5
-
- with((this / "Companion").cast<DObject>()) {
- name equals "Companion"
- children counts 5
-
- with((this / "x").cast<DProperty>()) {
- name equals "x"
- }
-
- with((this / "foo").cast<DFunction>()) {
- name equals "foo"
- parameters counts 0
- type.name equals "Unit"
- }
- }
-
- with((this.companion).cast<DObject>()) {
- name equals "Companion"
- children counts 5
-
- with((this / "x").cast<DProperty>()) {
- name equals "x"
- }
-
- with((this / "foo").cast<DFunction>()) {
- name equals "foo"
- parameters counts 0
- type.name equals "Unit"
- }
- }
- }
- }
- }
-
- @Test
- fun dataClass() {
- inlineModelTest(
- """
- |data class Klass() {}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- visibility.values allEquals KotlinVisibility.Public
- with(extra[AdditionalModifiers]!!.content.entries.single().value.assertNotNull("Extras")) {
- this counts 1
- first() equals ExtraModifiers.KotlinOnlyModifiers.Data
- }
- }
- }
- }
-
- @Test
- fun sealedClass() {
- inlineModelTest(
- """
- |sealed class Klass() {}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- modifier.values.forEach { it equals Sealed }
- }
- }
- }
-
- @Test
- fun annotatedClassWithAnnotationParameters() {
- inlineModelTest(
- """
- |@Deprecated("should no longer be used") class Foo() {}
- """
- ) {
- with((this / "classes" / "Foo").cast<DClass>()) {
- with(extra[Annotations]!!.directAnnotations.entries.single().value.assertNotNull("Annotations")) {
- this counts 1
- with(first()) {
- dri.classNames equals "Deprecated"
- params.entries counts 1
- (params["message"].assertNotNull("message") as StringValue).value equals "should no longer be used"
- }
- }
- }
- }
- }
-
- @Test
- fun notOpenClass() {
- inlineModelTest(
- """
- |open class C() {
- | open fun f() {}
- |}
- |
- |class D() : C() {
- | override fun f() {}
- |}
- """
- ) {
- val C = (this / "classes" / "C").cast<DClass>()
- val D = (this / "classes" / "D").cast<DClass>()
-
- with(C) {
- modifier.values.forEach { it equals Open }
- with((this / "f").cast<DFunction>()) {
- modifier.values.forEach { it equals Open }
- }
- }
- with(D) {
- modifier.values.forEach { it equals Final }
- with((this / "f").cast<DFunction>()) {
- modifier.values.forEach { it equals Open }
- }
- D.supertypes.flatMap { it.component2() }.firstOrNull()?.typeConstructor?.dri equals C.dri
- }
- }
- }
-
- @Test
- fun indirectOverride() {
- inlineModelTest(
- """
- |abstract class C() {
- | abstract fun foo()
- |}
- |
- |abstract class D(): C()
- |
- |class E(): D() {
- | override fun foo() {}
- |}
- """
- ) {
- val C = (this / "classes" / "C").cast<DClass>()
- val D = (this / "classes" / "D").cast<DClass>()
- val E = (this / "classes" / "E").cast<DClass>()
-
- with(C) {
- modifier.values.forEach { it equals Abstract }
- ((this / "foo").cast<DFunction>()).modifier.values.forEach { it equals Abstract }
- }
-
- with(D) {
- modifier.values.forEach { it equals Abstract }
- }
-
- with(E) {
- modifier.values.forEach { it equals Final }
-
- }
- D.supers.single().typeConstructor.dri equals C.dri
- E.supers.single().typeConstructor.dri equals D.dri
- }
- }
-
- @Test
- fun innerClass() {
- inlineModelTest(
- """
- |class C {
- | inner class D {}
- |}
- """
- ) {
- with((this / "classes" / "C").cast<DClass>()) {
-
- with((this / "D").cast<DClass>()) {
- with(extra[AdditionalModifiers]!!.content.entries.single().value.assertNotNull("AdditionalModifiers")) {
- this counts 1
- first() equals ExtraModifiers.KotlinOnlyModifiers.Inner
- }
- }
- }
- }
- }
-
- @Test
- fun companionObjectExtension() {
- inlineModelTest(
- """
- |class Klass {
- | companion object Default {}
- |}
- |
- |/**
- | * The def
- | */
- |val Klass.Default.x: Int get() = 1
- """
- ) {
- with((this / "classes").cast<DPackage>()) {
- properties.single().name equals "x"
- (properties.single().receiver?.dri?.callable?.receiver as? TypeConstructor)?.fullyQualifiedName equals "classes.Klass.Default"
- }
- }
- }
-
- @Test
- fun secondaryConstructor() {
- inlineModelTest(
- """
- |class C() {
- | /** This is a secondary constructor. */
- | constructor(s: String): this() {}
- |}
- """
- ) {
- with((this / "classes" / "C").cast<DClass>()) {
- name equals "C"
- constructors counts 2
-
- constructors.map { it.name } allEquals "C"
-
- with(constructors.find { it.parameters.isEmpty() } notNull "C()") {
- parameters counts 0
- }
-
- with(constructors.find { it.parameters.isNotEmpty() } notNull "C(String)") {
- parameters counts 1
- with(parameters.firstOrNull() notNull "Constructor parameter") {
- name equals "s"
- type.name equals "String"
- }
- }
- }
- }
- }
-
- @Test
- fun sinceKotlin() {
- inlineModelTest(
- """
- |/**
- | * Useful
- | */
- |@SinceKotlin("1.1")
- |class C
- """
- ) {
- with((this / "classes" / "C").cast<DClass>()) {
- with(extra[Annotations]!!.directAnnotations.entries.single().value.assertNotNull("Annotations")) {
- this counts 1
- with(first()) {
- dri.classNames equals "SinceKotlin"
- params.entries counts 1
- (params["version"].assertNotNull("version") as StringValue).value equals "1.1"
- }
- }
- }
- }
- }
-
- @Test
- fun privateCompanionObject() {
- inlineModelTest(
- """
- |class Klass {
- | private companion object {
- | fun fn() {}
- | val a = 0
- | }
- |}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- assertNull(companion, "Companion should not be visible by default")
- }
- }
- }
-
- @Test
- fun companionObject() {
- inlineModelTest(
- """
- |class Klass {
- | companion object {
- | fun fn() {}
- | val a = 0
- | }
- |}
- """
- ) {
- with((this / "classes" / "Klass").cast<DClass>()) {
- name equals "Klass"
- with((this / "Companion").cast<DObject>()) {
- name equals "Companion"
- visibility.values allEquals KotlinVisibility.Public
-
- with((this / "fn").cast<DFunction>()) {
- name equals "fn"
- parameters counts 0
- receiver equals null
- }
- }
- }
- }
- }
-
- @Test
- fun annotatedClass() {
- inlineModelTest(
- """@Suppress("abc") class Foo() {}"""
- ) {
- with((this / "classes" / "Foo").cast<DClass>()) {
- with(
- extra[Annotations]?.directAnnotations?.values?.firstOrNull()?.firstOrNull()
- .assertNotNull("annotations")
- ) {
- dri.toString() equals "kotlin/Suppress///PointingToDeclaration/"
- (params["names"].assertNotNull("param") as ArrayValue).value equals listOf(StringValue("abc"))
- }
- }
- }
- }
-
- @OnlyDescriptors("Bug in descriptors, DRI of entry should have [EnumEntryDRIExtra]")
- @Test
- fun javaAnnotationClass() {
- inlineModelTest(
- """
- |import java.lang.annotation.Retention
- |import java.lang.annotation.RetentionPolicy
- |
- |@Retention(RetentionPolicy.SOURCE)
- |public annotation class throws()
- """
- ) {
- with((this / "classes" / "throws").cast<DAnnotation>()) {
- with(extra[Annotations]!!.directAnnotations.entries.single().value.assertNotNull("Annotations")) {
- this counts 1
- with(first()) {
- dri.classNames equals "Retention"
- params["value"].assertNotNull("value") equals EnumValue(
- "RetentionPolicy.SOURCE",
- DRI("java.lang.annotation", "RetentionPolicy.SOURCE")
- )
- }
- }
- }
- }
- }
-
- @Test
- fun genericAnnotationClass() {
- inlineModelTest(
- """annotation class Foo<A,B,C,D:Number>() {}"""
- ) {
- with((this / "classes" / "Foo").cast<DAnnotation>()) {
- 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<OUTER> {
- | inner class Inner<INNER, T : OUTER> { }
- |}
- """.trimMargin()
- ) {
- with((this / "classes" / "Outer").cast<DClass>()) {
- val inner = classlikes.single().cast<DClass>()
- inner.generics.map { it.name to it.bounds.first().name } equals listOf("INNER" to "Any", "T" to "OUTER")
- }
- }
- }
-
- @Test
- fun allImplementedInterfaces() {
- inlineModelTest(
- """
- | interface Highest { }
- | open class HighestImpl: Highest { }
- | interface Lower { }
- | interface LowerImplInterface: Lower { }
- | class Tested : HighestImpl(), LowerImplInterface { }
- """.trimIndent()
- ) {
- with((this / "classes" / "Tested").cast<DClass>()) {
- extra[ImplementedInterfaces]?.interfaces?.entries?.single()?.value?.map { it.dri.sureClassNames }
- ?.sorted() equals listOf("Highest", "Lower", "LowerImplInterface").sorted()
- }
- }
- }
-
- @Test
- fun multipleClassInheritance() {
- inlineModelTest(
- """
- | open class A { }
- | open class B: A() { }
- | class Tested : B() { }
- """.trimIndent()
- ) {
- with((this / "classes" / "Tested").cast<DClass>()) {
- supertypes.entries.single().value.map { it.typeConstructor.dri.sureClassNames }.single() equals "B"
- }
- }
- }
-
- @Test
- fun multipleClassInheritanceWithInterface() {
- inlineModelTest(
- """
- | open class A { }
- | open class B: A() { }
- | interface X { }
- | interface Y : X { }
- | class Tested : B(), Y { }
- """.trimIndent()
- ) {
- with((this / "classes" / "Tested").cast<DClass>()) {
- supertypes.entries.single().value.map { it.typeConstructor.dri.sureClassNames to it.kind }
- .sortedBy { it.first } equals listOf(
- "B" to KotlinClassKindTypes.CLASS,
- "Y" to KotlinClassKindTypes.INTERFACE
- )
- }
- }
- }
-
- @Test
- fun doublyTypealiasedException() {
- inlineModelTest(
- """
- | typealias B = RuntimeException
- | typealias A = B
- """.trimMargin()
- ) {
- with((this / "classes" / "A").cast<DTypeAlias>()) {
- extra[ExceptionInSupertypes].assertNotNull("Typealias A should have ExceptionInSupertypes in its extra field")
- }
- with((this / "classes" / "B").cast<DTypeAlias>()) {
- extra[ExceptionInSupertypes].assertNotNull("Typealias B should have ExceptionInSupertypes in its extra field")
- }
- }
- }
-
- @Test
- fun `inline classes`() {
- inlineModelTest(
- """
- | inline class X(val example: String)
- |
- | @JvmInline
- | value class InlineTest(val x: String)
- """.trimMargin()
- ) {
- with((this / "classes" / "X").cast<DClass>()) {
- name equals "X"
- properties.first().name equals "example"
- extra[AdditionalModifiers]?.content?.values?.firstOrNull()
- ?.firstOrNull() equals ExtraModifiers.KotlinOnlyModifiers.Inline
- }
- }
- }
-
- @Test
- fun `value classes`() {
- inlineModelTest(
- """
- | @JvmInline
- | value class InlineTest(val example: String)
- """.trimMargin()
- ) {
- val classlike = packages.flatMap { it.classlikes }.first() as DClass
- classlike.name equals "InlineTest"
- classlike.properties.first().name equals "example"
- classlike.extra[AdditionalModifiers]?.content?.values?.firstOrNull()
- ?.firstOrNull() equals ExtraModifiers.KotlinOnlyModifiers.Value
- }
- }
-}