blob: 56a38fd3de56042a67eb17c27f5e0c44e4771312 [file] [log] [blame]
package org.jetbrains.dokka.tests
import org.jetbrains.dokka.Content
import org.jetbrains.dokka.NodeKind
import org.jetbrains.dokka.RefKind
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
class ClassTest {
@Test fun emptyClass() {
verifyModel("testdata/classes/emptyClass.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(NodeKind.Class, kind)
assertEquals("Klass", name)
assertEquals(Content.Empty, content)
assertEquals("<init>", members.single().name)
assertTrue(links.none())
}
}
}
@Test fun emptyObject() {
verifyModel("testdata/classes/emptyObject.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(NodeKind.Object, kind)
assertEquals("Obj", name)
assertEquals(Content.Empty, content)
assertTrue(members.none())
assertTrue(links.none())
}
}
}
@Test fun classWithConstructor() {
verifyModel("testdata/classes/classWithConstructor.kt") { model ->
with (model.members.single().members.single()) {
assertEquals(NodeKind.Class, kind)
assertEquals("Klass", name)
assertEquals(Content.Empty, content)
assertTrue(links.none())
assertEquals(1, members.count())
with(members.elementAt(0)) {
assertEquals("<init>", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Constructor, kind)
assertEquals(3, details.count())
assertEquals("public", details.elementAt(0).name)
with(details.elementAt(2)) {
assertEquals("name", name)
assertEquals(NodeKind.Parameter, kind)
assertEquals(Content.Empty, content)
assertEquals("String", detail(NodeKind.Type).name)
assertTrue(links.none())
assertTrue(members.none())
}
assertTrue(links.none())
assertTrue(members.none())
}
}
}
}
@Test fun classWithFunction() {
verifyModel("testdata/classes/classWithFunction.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(NodeKind.Class, kind)
assertEquals("Klass", name)
assertEquals(Content.Empty, content)
assertTrue(links.none())
assertEquals(2, members.count())
with(members.elementAt(0)) {
assertEquals("<init>", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Constructor, kind)
assertEquals(2, details.count())
assertEquals("public", details.elementAt(0).name)
assertTrue(links.none())
assertTrue(members.none())
}
with(members.elementAt(1)) {
assertEquals("fn", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Function, kind)
assertEquals("Unit", detail(NodeKind.Type).name)
assertTrue(links.none())
assertTrue(members.none())
}
}
}
}
@Test fun classWithProperty() {
verifyModel("testdata/classes/classWithProperty.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(NodeKind.Class, kind)
assertEquals("Klass", name)
assertEquals(Content.Empty, content)
assertTrue(links.none())
assertEquals(2, members.count())
with(members.elementAt(0)) {
assertEquals("<init>", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Constructor, kind)
assertEquals(2, details.count())
assertEquals("public", details.elementAt(0).name)
assertTrue(members.none())
assertTrue(links.none())
}
with(members.elementAt(1)) {
assertEquals("name", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Property, kind)
assertEquals("String", detail(NodeKind.Type).name)
assertTrue(members.none())
assertTrue(links.none())
}
}
}
}
@Test fun classWithCompanionObject() {
verifyModel("testdata/classes/classWithCompanionObject.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(NodeKind.Class, kind)
assertEquals("Klass", name)
assertEquals(Content.Empty, content)
assertTrue(links.none())
assertEquals(3, members.count())
with(members.elementAt(0)) {
assertEquals("<init>", name)
assertEquals(Content.Empty, content)
}
with(members.elementAt(1)) {
assertEquals("foo", name)
assertEquals(NodeKind.CompanionObjectFunction, kind)
assertTrue(members.none())
assertTrue(links.none())
}
with(members.elementAt(2)) {
assertEquals("x", name)
assertEquals(NodeKind.CompanionObjectProperty, kind)
assertTrue(members.none())
assertTrue(links.none())
}
}
}
}
@Test fun annotatedClass() {
verifyPackageMember("testdata/classes/annotatedClass.kt", withKotlinRuntime = true) { cls ->
assertEquals(1, cls.annotations.count())
with(cls.annotations[0]) {
assertEquals("Strictfp", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Annotation, kind)
}
}
}
@Test fun dataClass() {
verifyPackageMember("testdata/classes/dataClass.kt") { cls ->
val modifiers = cls.details(NodeKind.Modifier).map { it.name }
assertTrue("data" in modifiers)
}
}
@Test fun sealedClass() {
verifyPackageMember("testdata/classes/sealedClass.kt") { cls ->
val modifiers = cls.details(NodeKind.Modifier).map { it.name }
assertEquals(1, modifiers.count { it == "sealed" })
}
}
@Test fun annotatedClassWithAnnotationParameters() {
verifyModel("testdata/classes/annotatedClassWithAnnotationParameters.kt") { model ->
with(model.members.single().members.single()) {
with(deprecation!!) {
assertEquals("Deprecated", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Annotation, kind)
assertEquals(1, details.count())
with(details[0]) {
assertEquals(NodeKind.Parameter, kind)
assertEquals(1, details.count())
with(details[0]) {
assertEquals(NodeKind.Value, kind)
assertEquals("\"should no longer be used\"", name)
}
}
}
}
}
}
@Test fun javaAnnotationClass() {
verifyModel("testdata/classes/javaAnnotationClass.kt", withJdk = true) { model ->
with(model.members.single().members.single()) {
assertEquals(1, annotations.count())
with(annotations[0]) {
assertEquals("Retention", name)
assertEquals(Content.Empty, content)
assertEquals(NodeKind.Annotation, kind)
with(details[0]) {
assertEquals(NodeKind.Parameter, kind)
assertEquals(1, details.count())
with(details[0]) {
assertEquals(NodeKind.Value, kind)
assertEquals("RetentionPolicy.SOURCE", name)
}
}
}
}
}
}
@Test fun notOpenClass() {
verifyModel("testdata/classes/notOpenClass.kt") { model ->
with(model.members.single().members.first { it.name == "D"}.members.first { it.name == "f" }) {
val modifiers = details(NodeKind.Modifier)
assertEquals(2, modifiers.size)
assertEquals("final", modifiers[1].name)
val overrideReferences = references(RefKind.Override)
assertEquals(1, overrideReferences.size)
}
}
}
@Test fun indirectOverride() {
verifyModel("testdata/classes/indirectOverride.kt") { model ->
with(model.members.single().members.first { it.name == "E"}.members.first { it.name == "foo" }) {
val modifiers = details(NodeKind.Modifier)
assertEquals(2, modifiers.size)
assertEquals("final", modifiers[1].name)
val overrideReferences = references(RefKind.Override)
assertEquals(1, overrideReferences.size)
}
}
}
@Test fun innerClass() {
verifyPackageMember("testdata/classes/innerClass.kt") { cls ->
val innerClass = cls.members.single { it.name == "D" }
val modifiers = innerClass.details(NodeKind.Modifier)
assertEquals(3, modifiers.size)
assertEquals("inner", modifiers[2].name)
}
}
@Test fun companionObjectExtension() {
verifyModel("testdata/classes/companionObjectExtension.kt") { model ->
val pkg = model.members.single()
val cls = pkg.members.single { it.name == "Foo" }
val extensions = cls.extensions.filter { it.kind == NodeKind.CompanionObjectProperty }
assertEquals(1, extensions.size)
}
}
@Test fun secondaryConstructor() {
verifyPackageMember("testdata/classes/secondaryConstructor.kt") { cls ->
val constructors = cls.members(NodeKind.Constructor)
assertEquals(2, constructors.size)
with (constructors.first { it.details(NodeKind.Parameter).size == 1}) {
assertEquals("<init>", name)
assertEquals("This is a secondary constructor.", summary.toTestString())
}
}
}
@Test fun sinceKotlin() {
verifyModel("testdata/classes/sinceKotlin.kt") { model ->
with(model.members.single().members.single()) {
assertEquals(listOf("Kotlin 1.1"), platforms)
}
}
}
@Test fun privateCompanionObject() {
verifyModel("testdata/classes/privateCompanionObject.kt", includeNonPublic = false) { model ->
with(model.members.single().members.single()) {
assertEquals(0, members(NodeKind.CompanionObjectFunction).size)
assertEquals(0, members(NodeKind.CompanionObjectProperty).size)
}
}
}
}