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("""

out

""", 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("""

None

""", 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("""

None

""", 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( """|""".stripMargin, traitCmt) } } @Test def handleNestedLists = { val source = """ |package scala | |/** - Item1 | * - Item1a | * - Item1b | * - 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( """|""".stripMargin, traitCmt) } } @Test def handleCodeBlock = { 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 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("