aboutsummaryrefslogblamecommitdiff
path: root/doc-tool/test/MarkdownTests.scala
blob: e8596b634ac8cbd819a8d313e593c979c0ce0177 (plain) (tree)






















































































































































































































































                                                                                    
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,
      "../library/target/scala-2.11/dotty-library_2.11-0.1-SNAPSHOT.jar"
    )
    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("<p><em>Hello</em>, world!</p>", 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("""<p><a href="http://www.google.com">out</a></p>""", 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("""<p><a href="./None.html">None</a></p>""", 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("""<p><a href="../scala/None.html">None</a></p>""", 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(
          """|<ul>
             |<li>Item1</li>
             |<li>Item2</li>
             |<li>Item3</li>
             |</ul>""".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(
          """|<ul>
             |<li>Item1
             |<ul>
             |<li>Item1a</li>
             |<li>Item1b</li>
             |</ul>
             |</li>
             |<li>Item2</li>
             |<li>Item3</li>
             |</ul>""".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(
          """|<pre><code class="language-scala">val x = 1 + 5
             |</code></pre>""".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
        println(traitCmt)

        assertEquals(
          """|<pre><code class="language-scala">val x = 1 + 5
             |</code></pre>""".stripMargin, traitCmt)
    }
  }
}