From e64c2e2d01cf30fe843fa3d4eff977c8b1ecccc4 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Wed, 1 Feb 2017 19:37:39 +0100 Subject: Add position based error reporting to dottydoc --- doc-tool/test/SourceFileOps.scala | 32 +++++++++++++++ doc-tool/test/TemplateErrorTests.scala | 32 +++++++++++++++ .../tools/dottydoc/staticsite/PageTests.scala | 45 ++++------------------ .../tools/dottydoc/staticsite/SiteTests.scala | 26 ++++--------- 4 files changed, 80 insertions(+), 55 deletions(-) create mode 100644 doc-tool/test/TemplateErrorTests.scala (limited to 'doc-tool/test') diff --git a/doc-tool/test/SourceFileOps.scala b/doc-tool/test/SourceFileOps.scala index 7b0c2e807..37520921d 100644 --- a/doc-tool/test/SourceFileOps.scala +++ b/doc-tool/test/SourceFileOps.scala @@ -7,7 +7,12 @@ import java.io.{ BufferedWriter, OutputStreamWriter } import io.VirtualFile import scala.io.Codec +import model.Package + trait SourceFileOps { + import scala.collection.JavaConverters._ + val site = new Site(new java.io.File("../doc-tool/resources/"), "test-site", Map.empty) + def stringToSource(path: String, sourceCode: String): SourceFile = { val virtualFile = new VirtualFile(path, path) val writer = new BufferedWriter(new OutputStreamWriter(virtualFile.output, "UTF-8")) @@ -16,4 +21,31 @@ trait SourceFileOps { new SourceFile(virtualFile, Codec.UTF8) } + + def markdownPage( + sourceCode: String, + path: String = "test-page", + params: Map[String, AnyRef] = Map.empty, + includes: Map[String, Include] = Map.empty, + docs: Map[String, Package] = Map.empty + ) = new MarkdownPage( + path, + stringToSource(path, sourceCode), + params, + includes, + docs + ) + + def htmlPage( + sourceCode: String, + path: String = "test-page", + params: Map[String, AnyRef] = Map.empty, + includes: Map[String, Include] = Map.empty, + docs: Map[String, Package] = Map.empty + ) = new HtmlPage( + path, + stringToSource(path, sourceCode), + params, + includes + ) } diff --git a/doc-tool/test/TemplateErrorTests.scala b/doc-tool/test/TemplateErrorTests.scala new file mode 100644 index 000000000..3359c7791 --- /dev/null +++ b/doc-tool/test/TemplateErrorTests.scala @@ -0,0 +1,32 @@ +package dotty.tools +package dottydoc +package staticsite + +import org.junit.Test +import org.junit.Assert._ + +class TemplateErrorTests extends DottyDocTest with SourceFileOps { + @Test def unclosedTag: Unit = { + htmlPage( + """|Yo dawg: + |{% include "stuff" + |I heard you like to include stuff""".stripMargin + ).html + } + + @Test def missingEndif: Unit = { + htmlPage( + """|{% if someStuff %} + |Dude + |""".stripMargin + ).html + } + + @Test def nonExistingTag: Unit = { + htmlPage( + """|{% someStuff 'ofDude' %} + |Dude + |""".stripMargin + ).html + } +} diff --git a/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala b/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala index 20a41e70b..7febe7fe5 100644 --- a/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala +++ b/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala @@ -5,38 +5,9 @@ package staticsite import org.junit.Test import org.junit.Assert._ -import model.Package - class PageTests extends DottyDocTest with SourceFileOps { import scala.collection.JavaConverters._ - private def markdownPage( - sourceCode: String, - path: String = "test-page", - params: Map[String, AnyRef] = Map.empty, - includes: Map[String, Include] = Map.empty, - docs: Map[String, Package] = Map.empty - ) = new MarkdownPage( - path, - stringToSource(path, sourceCode), - params, - includes, - docs - ) - - private def htmlPage( - sourceCode: String, - path: String = "test-page", - params: Map[String, AnyRef] = Map.empty, - includes: Map[String, Include] = Map.empty, - docs: Map[String, Package] = Map.empty - ) = new HtmlPage( - path, - stringToSource(path, sourceCode), - params, - includes - ) - @Test def mdHas1Key = { val page = markdownPage( """|--- @@ -51,7 +22,7 @@ class PageTests extends DottyDocTest with SourceFileOps { s"""incorrect yaml, expected "key:" without key in: ${page.yaml}""" ) - assertEquals("

great

\n", page.html) + assertEquals("

great

\n", page.html.get) } @Test def yamlPreservesLiquidTags = { @@ -69,7 +40,7 @@ class PageTests extends DottyDocTest with SourceFileOps { s"""incorrect yaml, expected "key:" without key in: ${page1.yaml}""" ) - assertEquals("

Hello, world!

\n", page1.html) + assertEquals("

Hello, world!

\n", page1.html.get) val page2 = markdownPage( """|{{ content }}""".stripMargin, @@ -79,7 +50,7 @@ class PageTests extends DottyDocTest with SourceFileOps { page2.yaml == Map(), s"""incorrect yaml, expected "key:" without key in: ${page2.yaml}""" ) - assertEquals("

hello

\n", page2.html) + assertEquals("

hello

\n", page2.html.get) val page3 = markdownPage( """|{% if product.title == "Awesome Shoes" %} @@ -90,14 +61,14 @@ class PageTests extends DottyDocTest with SourceFileOps { assertEquals( "

These shoes are awesome!

\n", - page3.html + page3.html.get ) } @Test def simpleHtmlPage = { val p1 = htmlPage("""

{{ "hello, world!" }}

""") assert(p1.yaml == Map(), "non-empty yaml found") - assertEquals("

hello, world!

", p1.html) + assertEquals("

hello, world!

", p1.html.get) } @Test def htmlPageHasNoYaml = { @@ -109,8 +80,8 @@ class PageTests extends DottyDocTest with SourceFileOps { |Hello, world!""".stripMargin ) - assert(!page.html.contains("---\nlayout: main\n---"), - s"page still contains yaml:\n${page.html}") + assert(!page.html.get.contains("---\nlayout: main\n---"), + s"page still contains yaml:\n${page.html.get}") } @Test def illegalYamlFrontMatter = try { @@ -122,7 +93,7 @@ class PageTests extends DottyDocTest with SourceFileOps { |Hello, world!""".stripMargin ) - page.html + page.html.get fail("illegal front matter didn't throw exception") } catch { case IllegalFrontMatter(x) => // success! diff --git a/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala index 77b49700c..a4279e18c 100644 --- a/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala +++ b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala @@ -6,16 +6,6 @@ import org.junit.Test import org.junit.Assert._ class SiteTests extends DottyDocTest with SourceFileOps { - import scala.collection.JavaConverters._ - val site = new Site(new java.io.File("../doc-tool/resources/"), "test-site", Map.empty) - - private def html( - str: String, - path: String = "test-page", - params: Map[String, AnyRef] = Map("docs" -> List.empty.asJava), - includes: Map[String, Include] = Map.empty - ) = new HtmlPage(path, stringToSource(path, str), params, includes) - @Test def hasCorrectLayoutFiles = { assert(site.root.exists && site.root.isDirectory, s"'${site.root.getName}' is not a directory") @@ -26,13 +16,13 @@ class SiteTests extends DottyDocTest with SourceFileOps { } @Test def renderHelloInMainLayout = { - val renderedPage = site.render(html( + val renderedPage = site.render(htmlPage( """|--- |layout: main |--- | |Hello, world!""".stripMargin - ), Map.empty) + ), Map.empty).get assert( renderedPage.contains("Hello, world!") && @@ -43,12 +33,12 @@ class SiteTests extends DottyDocTest with SourceFileOps { } @Test def renderMultipleTemplates = { - val renderedPage = site.render(html( + val renderedPage = site.render(htmlPage( """|--- |layout: index |--- |Hello, world!""".stripMargin - ), Map.empty) + ), Map.empty).get assert( renderedPage.contains("

Hello, world!

") && @@ -60,13 +50,13 @@ class SiteTests extends DottyDocTest with SourceFileOps { } @Test def preservesPageYaml = { - val renderedPage = site.render(html( + val renderedPage = site.render(htmlPage( """|--- |title: Hello, world |layout: index |--- |Hello, world!""".stripMargin - ), Map.empty) + ), Map.empty).get assert( renderedPage.contains("

Hello, world!

") && @@ -80,9 +70,9 @@ class SiteTests extends DottyDocTest with SourceFileOps { @Test def include = { val renderedInclude = site.render( - html("""{% include "header.html" %}""", includes = site.includes), + htmlPage("""{% include "header.html" %}""", includes = site.includes), Map.empty - ) + ).get assertEquals("

Some header

\n", renderedInclude) } -- cgit v1.2.3