package dotty.tools package dottydoc import org.junit.Test import org.junit.Assert._ import dotc.core.Contexts.{ Context, ContextBase, FreshContext } import dotc.core.Comments.{ ContextDoc, ContextDocstrings } import dottydoc.core.ContextDottydoc class MarkdownTests extends DottyDocTest { override implicit val ctx: FreshContext = { // TODO: check if can reuse parent instead of copy-paste val base = new ContextBase import base.settings._ val ctx = base.initialCtx.fresh ctx.setSetting(ctx.settings.language, List("Scala2")) ctx.setSetting(ctx.settings.YkeepComments, true) ctx.setSetting(ctx.settings.YnoInline, true) // No wiki syntax! ctx.setSetting(ctx.settings.wikiSyntax, false) ctx.setProperty(ContextDoc, new ContextDottydoc) ctx.setSetting( ctx.settings.classpath, dotty.Jars.dottyLib ) base.initialize()(ctx) ctx } @Test def simpleMarkdown = { val source = """ |package scala | |/** *Hello*, world! */ |trait HelloWorld """.stripMargin checkSource(source) { packages => val traitCmt = packages("scala") .children.find(_.path.mkString(".") == "scala.HelloWorld") .flatMap(_.comment.map(_.body)) .get .trim assertEquals("
Hello, world!
", traitCmt) } } @Test def outerLink = { val source = """ |package scala | |/** [out](http://www.google.com) */ |trait HelloWorld """.stripMargin checkSource(source) { packages => val traitCmt = packages("scala") .children.find(_.path.mkString(".") == "scala.HelloWorld") .flatMap(_.comment.map(_.body)) .get .trim assertEquals("""""", traitCmt) } } @Test def relativeLink = { val source = """ |package scala | |/** [None](./None.html) */ |trait HelloWorld | |trait None """.stripMargin checkSource(source) { packages => val traitCmt = packages("scala") .children.find(_.path.mkString(".") == "scala.HelloWorld") .flatMap(_.comment.map(_.body)) .get .trim assertEquals("""""", traitCmt) } } @Test def absoluteLink = { val source = """ |package scala | |/** [None](scala.None) */ |trait HelloWorld | |trait None """.stripMargin checkSource(source) { packages => val traitCmt = packages("scala") .children.find(_.path.mkString(".") == "scala.HelloWorld") .flatMap(_.comment.map(_.body)) .get .trim assertEquals("""""", traitCmt) } } @Test def handleLists = { val source = """ |package scala | |/** - Item1 | * - Item2 | * - Item3 | */ |trait HelloWorld | |trait None """.stripMargin checkSource(source) { packages => val traitCmt = packages("scala") .children.find(_.path.mkString(".") == "scala.HelloWorld") .flatMap(_.comment.map(_.body)) .get .trim assertEquals( """|val x = 1 + 5
|
""".stripMargin, traitCmt)
}
}
@Test def handleCodeBlockJavaDocstring = {
// the following works, but not when the start of the codeblock is on the
// first line
val source =
"""
|package scala
|
|/**
| * ```scala
| * val x = 1 + 5
| * ```
| */
|trait HelloWorld
|
|trait None
""".stripMargin
checkSource(source) { packages =>
val traitCmt =
packages("scala")
.children.find(_.path.mkString(".") == "scala.HelloWorld")
.flatMap(_.comment.map(_.body))
.get
.trim
assertEquals(
"""|val x = 1 + 5
|
""".stripMargin, traitCmt)
}
}
@Test def docstringSummary = {
val source =
"""
|package scala
|
|/** This
| * ====
| * is a short text [that](http://google.com) should not be more than a
| * `few` lines long. This text *should* be shortened somewhere that is
| * appropriate for the **ui**. Might be here, or there or somewhere
| * else.
| */
|trait HelloWorld
""".stripMargin
checkSource(source) { packages =>
val traitCmt =
packages("scala")
.children.find(_.path.mkString(".") == "scala.HelloWorld")
.flatMap(_.comment.map(_.short))
.get
.trim
assert(
traitCmt.endsWith("Might be here...\n"),
s"""|docstring summary should strip the following docstring so that it ends in "Might be here..."
|
|$traitCmt""".stripMargin
)
}
}
@Test def docstringSummaryWithImage = {
val source =
"""
|package scala
|
|/** This
| * ====
| * should quit before ![alt text](https://whatever.com/1.png "Img Text"),
| * I shouldn't be visible.
| */
|trait HelloWorld
""".stripMargin
checkSource(source) { packages =>
val traitCmt =
packages("scala")
.children.find(_.path.mkString(".") == "scala.HelloWorld")
.flatMap(_.comment.map(_.short))
.get
.trim
assert(
!traitCmt.contains("