blob: 267d6119fa14053e0a308163b93615fac6e81c64 [file] [log] [blame]
package org.jetbrains.dokka.tests
import org.jetbrains.dokka.NodeKind
import org.jetbrains.dokka.RefKind
import org.junit.Assert.*
import org.junit.Ignore
import org.junit.Test
public class JavaTest {
@Test fun function() {
verifyJavaPackageMember("testdata/java/member.java") { cls ->
assertEquals("Test", cls.name)
assertEquals(NodeKind.Class, cls.kind)
with(cls.members(NodeKind.Function).single()) {
assertEquals("fn", name)
assertEquals("Summary for Function", content.summary.toTestString().trimEnd())
assertEquals(3, content.sections.size)
with(content.sections[0]) {
assertEquals("Parameters", tag)
assertEquals("name", subjectName)
assertEquals("render(Type:String,SUMMARY): is String parameter", toTestString())
}
with(content.sections[1]) {
assertEquals("Parameters", tag)
assertEquals("value", subjectName)
assertEquals("render(Type:String,SUMMARY): is int parameter", toTestString())
}
with(content.sections[2]) {
assertEquals("Author", tag)
assertEquals("yole", toTestString())
}
assertEquals("Unit", detail(NodeKind.Type).name)
assertTrue(members.none())
assertTrue(links.none())
with(details.first { it.name == "name" }) {
assertEquals(NodeKind.Parameter, kind)
assertEquals("String", detail(NodeKind.Type).name)
}
with(details.first { it.name == "value" }) {
assertEquals(NodeKind.Parameter, kind)
assertEquals("Int", detail(NodeKind.Type).name)
}
}
}
}
@Test fun memberWithModifiers() {
verifyJavaPackageMember("testdata/java/memberWithModifiers.java") { cls ->
val modifiers = cls.details(NodeKind.Modifier).map { it.name }
assertTrue("abstract" in modifiers)
with(cls.members.single { it.name == "fn" }) {
assertEquals("protected", details[0].name)
}
with(cls.members.single { it.name == "openFn" }) {
assertEquals("open", details[1].name)
}
}
}
@Test fun superClass() {
verifyJavaPackageMember("testdata/java/superClass.java") { cls ->
val superTypes = cls.details(NodeKind.Supertype)
assertEquals(2, superTypes.size)
assertEquals("Exception", superTypes[0].name)
assertEquals("Cloneable", superTypes[1].name)
}
}
@Test fun arrayType() {
verifyJavaPackageMember("testdata/java/arrayType.java") { cls ->
with(cls.members(NodeKind.Function).single()) {
val type = detail(NodeKind.Type)
assertEquals("Array", type.name)
assertEquals("String", type.detail(NodeKind.Type).name)
with(details(NodeKind.Parameter).single()) {
val parameterType = detail(NodeKind.Type)
assertEquals("IntArray", parameterType.name)
}
}
}
}
@Test fun typeParameter() {
verifyJavaPackageMember("testdata/java/typeParameter.java") { cls ->
val typeParameters = cls.details(NodeKind.TypeParameter)
with(typeParameters.single()) {
assertEquals("T", name)
with(detail(NodeKind.UpperBound)) {
assertEquals("Comparable", name)
assertEquals("T", detail(NodeKind.Type).name)
}
}
with(cls.members(NodeKind.Function).single()) {
val methodTypeParameters = details(NodeKind.TypeParameter)
with(methodTypeParameters.single()) {
assertEquals("E", name)
}
}
}
}
@Test fun constructors() {
verifyJavaPackageMember("testdata/java/constructors.java") { cls ->
val constructors = cls.members(NodeKind.Constructor)
assertEquals(2, constructors.size)
with(constructors[0]) {
assertEquals("<init>", name)
}
}
}
@Test fun innerClass() {
verifyJavaPackageMember("testdata/java/InnerClass.java") { cls ->
val innerClass = cls.members(NodeKind.Class).single()
assertEquals("D", innerClass.name)
}
}
@Test fun varargs() {
verifyJavaPackageMember("testdata/java/varargs.java") { cls ->
val fn = cls.members(NodeKind.Function).single()
val param = fn.detail(NodeKind.Parameter)
assertEquals("vararg", param.details(NodeKind.Modifier).first().name)
val psiType = param.detail(NodeKind.Type)
assertEquals("String", psiType.name)
assertTrue(psiType.details(NodeKind.Type).isEmpty())
}
}
@Test fun fields() {
verifyJavaPackageMember("testdata/java/field.java") { cls ->
val i = cls.members(NodeKind.Property).single { it.name == "i" }
assertEquals("Int", i.detail(NodeKind.Type).name)
assertTrue("var" in i.details(NodeKind.Modifier).map { it.name })
val s = cls.members(NodeKind.Property).single { it.name == "s" }
assertEquals("String", s.detail(NodeKind.Type).name)
assertFalse("var" in s.details(NodeKind.Modifier).map { it.name })
assertTrue("static" in s.details(NodeKind.Modifier).map { it.name })
}
}
@Test fun staticMethod() {
verifyJavaPackageMember("testdata/java/staticMethod.java") { cls ->
val m = cls.members(NodeKind.Function).single { it.name == "foo" }
assertTrue("static" in m.details(NodeKind.Modifier).map { it.name })
}
}
/**
* `@suppress` not supported in Java!
*
* [Proposed tags](http://www.oracle.com/technetwork/java/javase/documentation/proposed-tags-142378.html)
* Proposed tag `@exclude` for it, but not supported yet
*/
@Ignore("@suppress not supported in Java!") @Test fun suppressTag() {
verifyJavaPackageMember("testdata/java/suppressTag.java") { cls ->
assertEquals(1, cls.members(NodeKind.Function).size)
}
}
@Test fun hideAnnotation() {
verifyJavaPackageMember("testdata/java/hideAnnotation.java") { cls ->
assertEquals(1, cls.members(NodeKind.Function).size)
assertEquals(1, cls.members(NodeKind.Property).size)
// The test file contains two classes, one of which is hidden.
// The test for @hide annotation on classes is via verifyJavaPackageMember(),
// which will throw an IllegalArgumentException if it detects more than one class.
}
}
@Test fun annotatedAnnotation() {
verifyJavaPackageMember("testdata/java/annotatedAnnotation.java") { cls ->
assertEquals(1, cls.annotations.size)
with(cls.annotations[0]) {
assertEquals(1, details.count())
with(details[0]) {
assertEquals(NodeKind.Parameter, kind)
assertEquals(1, details.count())
with(details[0]) {
assertEquals(NodeKind.Value, kind)
assertEquals("[AnnotationTarget.FIELD, AnnotationTarget.CLASS, AnnotationTarget.FILE, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER]", name)
}
}
}
}
}
@Test fun deprecation() {
verifyJavaPackageMember("testdata/java/deprecation.java") { cls ->
val fn = cls.members(NodeKind.Function).single()
assertEquals("This should no longer be used", fn.deprecation!!.content.toTestString())
}
}
@Test fun javaLangObject() {
verifyJavaPackageMember("testdata/java/javaLangObject.java") { cls ->
val fn = cls.members(NodeKind.Function).single()
assertEquals("Any", fn.detail(NodeKind.Type).name)
}
}
@Test fun enumValues() {
verifyJavaPackageMember("testdata/java/enumValues.java") { cls ->
val superTypes = cls.details(NodeKind.Supertype)
assertEquals(1, superTypes.size)
assertEquals(1, cls.members(NodeKind.EnumItem).size)
}
}
@Test fun inheritorLinks() {
verifyJavaPackageMember("testdata/java/InheritorLinks.java") { cls ->
val fooClass = cls.members.single { it.name == "Foo" }
val inheritors = fooClass.references(RefKind.Inheritor)
assertEquals(1, inheritors.size)
}
}
}