/*
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package translators
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.DModule
import org.jetbrains.dokka.model.childrenOfType
import org.jetbrains.dokka.model.doc.*
import org.jetbrains.dokka.model.firstChildOfType
import org.jetbrains.dokka.model.firstMemberOfType
import utils.text
import kotlin.test.Test
import kotlin.test.assertEquals
class JavadocParserTest : BaseAbstractTest() {
private fun performJavadocTest(testOperation: (DModule) -> Unit) {
val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/main/java")
}
}
}
testInline(
"""
|/src/main/java/sample/Date2.java
|/**
| * The class Date
represents a specific instant
| * in time, with millisecond precision.
| *
| * Prior to JDK 1.1, the class Date
had two additional
| * functions. It allowed the interpretation of dates as year, month, day, hour,
| * minute, and second values. It also allowed the formatting and parsing
| * of date strings. Unfortunately, the API for these functions was not
| * amenable to internationalization. As of JDK 1.1, the
| * Calendar
class should be used to convert between dates and time
| * fields and the DateFormat
class should be used to format and
| * parse date strings.
| * The corresponding methods in Date
are deprecated.
| *
| * Although the Date
class is intended to reflect
| * coordinated universal time (UTC), it may not do so exactly,
| * depending on the host environment of the Java Virtual Machine.
| * Nearly all modern operating systems assume that 1 day =
| * 24 × 60 × 60 = 86400 seconds
| * in all cases. In UTC, however, about once every year or two there
| * is an extra second, called a "leap second." The leap
| * second is always added as the last second of the day, and always
| * on December 31 or June 30. For example, the last minute of the
| * year 1995 was 61 seconds long, thanks to an added leap second.
| * Most computer clocks are not accurate enough to be able to reflect
| * the leap-second distinction.
| *
| * Some computer standards are defined in terms of Greenwich mean | * time (GMT), which is equivalent to universal time (UT). GMT is | * the "civil" name for the standard; UT is the | * "scientific" name for the same standard. The | * distinction between UTC and UT is that UTC is based on an atomic | * clock and UT is based on astronomical observations, which for all | * practical purposes is an invisibly fine hair to split. Because the | * earth's rotation is not uniform (it slows down and speeds up | * in complicated ways), UT does not always flow uniformly. Leap | * seconds are introduced as needed into UTC so as to keep UTC within | * 0.9 seconds of UT1, which is a version of UT with certain | * corrections applied. There are other time and date systems as | * well; for example, the time scale used by the satellite-based | * global positioning system (GPS) is synchronized to UTC but is | * not adjusted for leap seconds. An interesting source of | * further information is the U.S. Naval Observatory, particularly | * the Directorate of Time at: | *
| *| * http://tycho.usno.navy.mil | *
| * and their definitions of "Systems of Time" at: | *
| *| * http://tycho.usno.navy.mil/systime.html | *
| * In all methods of class Date
that accept or return
| * year, month, date, hours, minutes, and seconds values, the
| * following representations are used:
| *
- 1900
.
| * | * <androidx.fragment.app.FragmentContainerView | * xmlns:android="http://schemas.android.com/apk/res/android" | * xmlns:app="http://schemas.android.com/apk/res-auto" | * android:id="@+id/fragment_container_view" | * android:layout_width="match_parent" | * android:layout_height="match_parent"> | * </androidx.fragment.app.FragmentContainerView> | *| *
| * In all cases, arguments given to methods for these purposes need | * not fall within the indicated ranges; for example, a date may be | * specified as January 32 and is interpreted as meaning February 1. | * | *
| * class MyFragment extends Fragment { | * public MyFragment() { | * super(R.layout.fragment_main); | * } | * } | *| | * @author James Gosling | * @author Arthur van Hoff | * @author Alan Liu | * @see java.text.DateFormat | * @see java.util.Calendar | * @since JDK1.0 | * @apiSince 1 | */ |public class Date2 implements java.io.Serializable, java.lang.Cloneable, java.lang.Comparable
().firstChildOfType() val expectedText = """ """.trimIndent() assertEquals(expectedText.trim(), preTagContent.body.trim()) } } @Test fun `correctly parsed code block with curly braces (which PSI has problem with)`() { performJavadocTest { module -> val dateDescription = module.descriptionOf("Date2")!! val preTagContent = dateDescription.childrenOfType ()[1].firstChildOfType() val expectedText = """class MyFragment extends Fragment { public MyFragment() { super(R.layout.fragment_main); } }""".trimIndent() assertEquals(expectedText.trim(), preTagContent.body.trim()) } } }