aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorbinaarinen <53334195+binaarinen@users.noreply.github.com>2021-12-19 21:10:41 +0100
committerGitHub <noreply@github.com>2021-12-19 12:10:41 -0800
commit0610f16f7f684b320325b6c0b501725138d10a52 (patch)
treea35f19aec4719a84d0b006bbfdc70b17c3c45970 /test
parentf8f03c2ffca168d5c897febc2a631c2605973699 (diff)
downloadpandoc-0610f16f7f684b320325b6c0b501725138d10a52.tar.gz
Add a writer for Markua 0.10 (#7729)
Markua is a markdown variant used by Leanpub. More information about Markua can be found at https://leanpub.com/markua/read. Adds a new exported function `writeMarkua` from T.P.Writers.Markdown. [API change] Closes #1871. Co-authored by Tim Wisotzki and Samuel Lemmenmeier.
Diffstat (limited to 'test')
-rw-r--r--test/Tests/Old.hs1
-rw-r--r--test/Tests/Writers/Markua.hs40
-rw-r--r--test/tables.markua58
-rw-r--r--test/test-pandoc.hs2
-rw-r--r--test/writer.markua700
5 files changed, 801 insertions, 0 deletions
diff --git a/test/Tests/Old.hs b/test/Tests/Old.hs
index e03d94e85..450449946 100644
--- a/test/Tests/Old.hs
+++ b/test/Tests/Old.hs
@@ -228,6 +228,7 @@ tests pandocPath =
, test' "reader" ["-f", "ipynb", "-t", "html"]
"ipynb/rank.ipynb" "ipynb/rank.out.html"
]
+ , testGroup "markua" [ testGroup "writer" $ writerTests' "markua"]
]
where
test' = test pandocPath
diff --git a/test/Tests/Writers/Markua.hs b/test/Tests/Writers/Markua.hs
new file mode 100644
index 000000000..62239f3da
--- /dev/null
+++ b/test/Tests/Writers/Markua.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Tests.Writers.Markua (tests) where
+
+import Test.Tasty
+import Tests.Helpers
+import Text.Pandoc
+import Text.Pandoc.Arbitrary ()
+import Text.Pandoc.Builder
+
+{-
+ "my test" =: X =?> Y
+
+is shorthand for
+
+ test html "my test" $ X =?> Y
+
+which is in turn shorthand for
+
+ test html "my test" (X,Y)
+-}
+
+infix 4 =:
+(=:) :: (ToString a, ToPandoc a)
+ => String -> (a, String) -> TestTree
+(=:) = test (purely (writeMarkua def) . toPandoc)
+
+tests :: [TestTree]
+tests = [ testGroup "simple blurb/aside"
+ ["blurb" =: divWith ("",["blurb"],[]) (bulletList [para "blurb content"])
+ =?> "B> * blurb content"
+ ,"aside" =: divWith ("",["aside"],[]) (bulletList [para "aside list"])
+ =?> "A> * aside list"
+ ]
+ ,testGroup "multiclass blurb/aside"
+ ["blurb" =: divWith ("",["blurb", "otherclass"],[]) (bulletList [para "blurb content"])
+ =?> "B> * blurb content"
+ ,"aside" =: divWith ("",["otherclass", "aside"],[]) (bulletList [para "aside list"])
+ =?> "A> * aside list"
+ ]
+ ]
diff --git a/test/tables.markua b/test/tables.markua
new file mode 100644
index 000000000..b82264fd7
--- /dev/null
+++ b/test/tables.markua
@@ -0,0 +1,58 @@
+Simple table with caption:
+
+| Right | Left | Center | Default |
+|------:|:-----|:------:|---------|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+Demonstration of simple table syntax.
+
+Simple table without caption:
+
+| Right | Left | Center | Default |
+|------:|:-----|:------:|---------|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+Simple table indented two spaces:
+
+| Right | Left | Center | Default |
+|------:|:-----|:------:|---------|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+Demonstration of simple table syntax.
+
+Multiline table with caption:
+
+| Centered Header | Left Aligned | Right Aligned | Default aligned |
+|:---------------:|:-------------|--------------:|:------------------------------------------------------|
+| First | row | 12.0 | Example of a row that spans multiple lines. |
+| Second | row | 5.0 | Here’s another one. Note the blank line between rows. |
+
+Here’s the caption. It may span multiple lines.
+
+Multiline table without caption:
+
+| Centered Header | Left Aligned | Right Aligned | Default aligned |
+|:---------------:|:-------------|--------------:|:------------------------------------------------------|
+| First | row | 12.0 | Example of a row that spans multiple lines. |
+| Second | row | 5.0 | Here’s another one. Note the blank line between rows. |
+
+Table without column headers:
+
+| | | | |
+|----:|:----|:---:|----:|
+| 12 | 12 | 12 | 12 |
+| 123 | 123 | 123 | 123 |
+| 1 | 1 | 1 | 1 |
+
+Multiline table without column headers:
+
+| | | | |
+|:------:|:----|-----:|-------------------------------------------------------|
+| First | row | 12.0 | Example of a row that spans multiple lines. |
+| Second | row | 5.0 | Here’s another one. Note the blank line between rows. |
diff --git a/test/test-pandoc.hs b/test/test-pandoc.hs
index 476762aac..fcb157fb7 100644
--- a/test/test-pandoc.hs
+++ b/test/test-pandoc.hs
@@ -50,6 +50,7 @@ import qualified Tests.Writers.Powerpoint
import qualified Tests.Writers.RST
import qualified Tests.Writers.AnnotatedTable
import qualified Tests.Writers.TEI
+import qualified Tests.Writers.Markua
import Text.Pandoc.Shared (inDirectory)
tests :: FilePath -> TestTree
@@ -72,6 +73,7 @@ tests pandocPath = testGroup "pandoc tests"
, testGroup "Docx" Tests.Writers.Docx.tests
, testGroup "RST" Tests.Writers.RST.tests
, testGroup "TEI" Tests.Writers.TEI.tests
+ , testGroup "markua" Tests.Writers.Markua.tests
, testGroup "Muse" Tests.Writers.Muse.tests
, testGroup "FB2" Tests.Writers.FB2.tests
, testGroup "PowerPoint" Tests.Writers.Powerpoint.tests
diff --git a/test/writer.markua b/test/writer.markua
new file mode 100644
index 000000000..1c5b44cc2
--- /dev/null
+++ b/test/writer.markua
@@ -0,0 +1,700 @@
+This is a set of tests for pandoc. Most of them are adapted from John Gruber’s
+markdown test suite.
+
+* * *
+
+{id: headers}
+# Headers
+
+{id: level-2-with-an-embedded-link}
+## Level 2 with an [embedded link](/url)
+
+{id: level-3-with-emphasis}
+### Level 3 with *emphasis*
+
+{id: level-4}
+#### Level 4
+
+{id: level-5}
+##### Level 5
+
+{id: level-1}
+# Level 1
+
+{id: level-2-with-emphasis}
+## Level 2 with *emphasis*
+
+{id: level-3}
+### Level 3
+
+with no blank line
+
+{id: level-2}
+## Level 2
+
+with no blank line
+
+* * *
+
+{id: paragraphs}
+# Paragraphs
+
+Here’s a regular paragraph.
+
+In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item.
+Because a hard-wrapped line in the middle of a paragraph looked like a list
+item.
+
+Here’s one with a bullet. * criminey.
+
+There should be a hard line break
+here.
+
+* * *
+
+{id: block-quotes}
+# Block Quotes
+
+E-mail style:
+
+> This is a block quote. It is pretty short.
+
+> Code in a block quote:
+>
+> ```
+> sub status {
+> print "working";
+> }
+> ```
+>
+> A list:
+>
+> 1. item one
+> 2. item two
+>
+> Nested block quotes:
+>
+> > nested
+>
+> > nested
+
+This should not be a block quote: 2 > 1.
+
+And a following paragraph.
+
+* * *
+
+{id: code-blocks}
+# Code Blocks
+
+Code:
+
+```
+---- (should be four hyphens)
+
+sub status {
+ print "working";
+}
+
+this code block is indented by one tab
+```
+
+And:
+
+```
+ this code block is indented by two tabs
+
+These should not be escaped: \$ \\ \> \[ \{
+```
+
+* * *
+
+{id: lists}
+# Lists
+
+{id: unordered}
+## Unordered
+
+Asterisks tight:
+
+* asterisk 1
+* asterisk 2
+* asterisk 3
+
+Asterisks loose:
+
+* asterisk 1
+
+* asterisk 2
+
+* asterisk 3
+
+Pluses tight:
+
+* Plus 1
+* Plus 2
+* Plus 3
+
+Pluses loose:
+
+* Plus 1
+
+* Plus 2
+
+* Plus 3
+
+Minuses tight:
+
+* Minus 1
+* Minus 2
+* Minus 3
+
+Minuses loose:
+
+* Minus 1
+
+* Minus 2
+
+* Minus 3
+
+{id: ordered}
+## Ordered
+
+Tight:
+
+1. First
+2. Second
+3. Third
+
+and:
+
+1. One
+2. Two
+3. Three
+
+Loose using tabs:
+
+1. First
+
+2. Second
+
+3. Third
+
+and using spaces:
+
+1. One
+
+2. Two
+
+3. Three
+
+Multiple paragraphs:
+
+1. Item 1, graf one.
+
+ Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.
+
+2. Item 2.
+
+3. Item 3.
+
+{id: nested}
+## Nested
+
+* Tab
+ * Tab
+ * Tab
+
+Here’s another:
+
+1. First
+2. Second:
+ * Fee
+ * Fie
+ * Foe
+3. Third
+
+Same thing but with paragraphs:
+
+1. First
+
+2. Second:
+
+ * Fee
+ * Fie
+ * Foe
+
+3. Third
+
+{id: tabs-and-spaces}
+## Tabs and spaces
+
+* this is a list item indented with tabs
+
+* this is a list item indented with spaces
+
+ * this is an example list item indented with tabs
+
+ * this is an example list item indented with spaces
+
+{id: fancy-list-markers}
+## Fancy list markers
+
+2) begins with 2
+
+3) and now 3
+
+ with a continuation
+
+ iv. sublist with roman numerals, starting with 4
+ v. more items
+ A) a subsublist
+ B) a subsublist
+
+Nesting:
+
+A. Upper Alpha
+ I. Upper Roman.
+ 6) Decimal start with 6
+ c) Lower alpha with paren
+
+Autonumbering:
+
+1. Autonumber.
+2. More.
+ 1. Nested.
+
+Should not be a list item:
+
+M.A. 2007
+
+B. Williams
+
+* * *
+
+{id: definition-lists}
+# Definition Lists
+
+Tight using spaces:
+
+apple
+: red fruit
+
+orange
+: orange fruit
+
+banana
+: yellow fruit
+
+Tight using tabs:
+
+apple
+: red fruit
+
+orange
+: orange fruit
+
+banana
+: yellow fruit
+
+Loose:
+
+apple
+
+: red fruit
+
+orange
+
+: orange fruit
+
+banana
+
+: yellow fruit
+
+Multiple blocks with italics:
+
+*apple*
+
+: red fruit
+
+ contains seeds, crisp, pleasant to taste
+
+*orange*
+
+: orange fruit
+
+ ```
+ { orange code block }
+ ```
+
+ > orange block quote
+
+Multiple definitions, tight:
+
+apple
+: red fruit
+: computer
+
+orange
+: orange fruit
+: bank
+
+Multiple definitions, loose:
+
+apple
+
+: red fruit
+
+: computer
+
+orange
+
+: orange fruit
+
+: bank
+
+Blank line after term, indented marker, alternate markers:
+
+apple
+
+: red fruit
+
+: computer
+
+orange
+
+: orange fruit
+
+ 1. sublist
+ 2. sublist
+
+{id: html-blocks}
+# HTML Blocks
+
+Simple block on one line:
+
+foo
+
+And nested without indentation:
+
+foo
+
+bar
+
+Interpreted markdown in a table:
+
+This is *emphasized*
+And this is **strong**
+Here’s a simple block:
+
+foo
+
+This should be a code block, though:
+
+```
+<div>
+ foo
+</div>
+```
+
+As should this:
+
+```
+<div>foo</div>
+```
+
+Now, nested:
+
+foo
+
+This should just be an HTML comment:
+
+Multiline:
+
+Code block:
+
+```
+<!-- Comment -->
+```
+
+Just plain comment, with trailing spaces on the line:
+
+Code:
+
+```
+<hr />
+```
+
+Hr’s:
+
+* * *
+
+{id: inline-markup}
+# Inline Markup
+
+This is *emphasized*, and so *is this*.
+
+This is **strong**, and so **is this**.
+
+An *[emphasized link](/url)*.
+
+***This is strong and em.***
+
+So is ***this*** word.
+
+***This is strong and em.***
+
+So is ***this*** word.
+
+This is code: `>`, `$`, `\`, `\$`, `<html>`.
+
+~~This is *strikeout*.~~
+
+Superscripts: a^bc^d a^*hello*^ a^hello there^.
+
+Subscripts: H~2~O, H~23~O, H~many of them~O.
+
+These should not be superscripts or subscripts, because of the unescaped spaces:
+a^b c^d, a~b c~d.
+
+* * *
+
+{id: smart-quotes-ellipses-dashes}
+# Smart quotes, ellipses, dashes
+
+"Hello," said the spider. "'Shelob' is my name."
+
+'A', 'B', and 'C' are letters.
+
+'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.'
+
+'He said, "I want to go."' Were you alive in the 70’s?
+
+Here is some quoted '`code`' and a "[quoted
+link](http://example.com/?foo=1&bar=2)".
+
+Some dashes: one—two — three—four — five.
+
+Dashes between numbers: 5–7, 255–66, 1987–1999.
+
+Ellipses…and…and….
+
+* * *
+
+{id: latex}
+# LaTeX
+
+*
+* `2+2=4`$
+* `x \in y`$
+* `\alpha \wedge \omega`$
+* `223`$
+* `p`$-Tree
+* Here’s some display math:
+
+ {format: latex}
+ ```
+ \frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}
+ ```
+* Here’s one that has a line break in it: `\alpha + \omega \times x^2`$.
+
+These shouldn’t be math:
+
+* To get the famous equation, write `$e = mc^2$`.
+* $22,000 is a *lot* of money. So is $34,000. (It worked if "lot" is
+ emphasized.)
+* Shoes ($20) and socks ($5).
+* Escaped `$`: $73 *this should be emphasized* 23$.
+
+Here’s a LaTeX table:
+
+* * *
+
+{id: special-characters}
+# Special Characters
+
+Here is some unicode:
+
+* I hat: Î
+* o umlaut: ö
+* section: §
+* set membership: ∈
+* copyright: ©
+
+AT&T has an ampersand in their name.
+
+AT&T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Backslash: \
+
+Backtick: `
+
+Asterisk: *
+
+Underscore: _
+
+Left brace: {
+
+Right brace: }
+
+Left bracket: [
+
+Right bracket: ]
+
+Left paren: (
+
+Right paren: )
+
+Greater-than: >
+
+Hash: #
+
+Period: .
+
+Bang: !
+
+Plus: +
+
+Minus: -
+
+* * *
+
+{id: links}
+# Links
+
+{id: explicit}
+## Explicit
+
+Just a [URL](/url/).
+
+[URL and title](/url/){title: "title"}.
+
+[URL and title](/url/){title: "title preceded by two spaces"}.
+
+[URL and title](/url/){title: "title preceded by a tab"}.
+
+[URL and title](/url/){title: "title with "quotes" in it"}
+
+[URL and title](/url/){title: "title with single quotes"}
+
+[with_underscore](/url/with_underscore)
+
+[Email link](mailto:nobody@nowhere.net)
+
+[Empty]().
+
+{id: reference}
+## Reference
+
+Foo [bar](/url/).
+
+With [embedded [brackets]](/url/).
+
+[b](/url/) by itself should be a link.
+
+Indented [once](/url).
+
+Indented [twice](/url).
+
+Indented [thrice](/url).
+
+This should [not][] be a link.
+
+```
+[not]: /url
+```
+
+Foo [bar](/url/){title: "Title with "quotes" inside"}.
+
+Foo [biz](/url/){title: "Title with "quote" inside"}.
+
+{id: with-ampersands}
+## With ampersands
+
+Here’s a [link with an ampersand in the URL](http://example.com/?foo=1&bar=2).
+
+Here’s a link with an amersand in the link text:
+[AT&T](http://att.com/){title: "AT&T"}.
+
+Here’s an [inline link](/script?foo=1&bar=2).
+
+Here’s an [inline link in pointy braces](/script?foo=1&bar=2).
+
+{id: autolinks}
+## Autolinks
+
+With an ampersand:
+[http:~/~/example.com/?foo=1&bar=2](http://example.com/?foo=1&bar=2){class: uri}
+
+* In a list?
+* [http:~/~/example.com/](http://example.com/){class: uri}
+* It should.
+
+An e-mail address: [nobody@nowhere.net](mailto:nobody@nowhere.net){class: email}
+
+> Blockquoted: [http:~/~/example.com/](http://example.com/){class: uri}
+
+Auto-links should not occur here: `<http://example.com/>`
+
+```
+or here: <http://example.com/>
+```
+
+* * *
+
+{id: images}
+# Images
+
+From "Voyage dans la Lune" by Georges Melies (1902):
+
+{alt: "lalune", title: "Voyage dans la Lune"}
+![](lalune.jpg)
+
+Here is a movie
+{alt: "movie"}
+![](movie.jpg)
+icon.
+
+* * *
+
+{id: footnotes}
+# Footnotes
+
+Here is a footnote reference,[^1] and another.[^2] This should *not* be a
+footnote reference, because it contains a space.[^my note] Here is an inline
+note.[^3]
+
+> Notes can go in quotes.[^4]
+
+1. And in list items.[^5]
+
+This paragraph should not be part of the note, as it is not indented.
+
+[^1]: Here is the footnote. It can go anywhere after the footnote reference. It
+ need not be placed at the end of the document.
+
+[^2]: Here’s the long note. This one contains multiple blocks.
+
+ Subsequent blocks are indented to show that they belong to the footnote (as
+ with list items).
+
+ ```
+ { <code> }
+ ```
+
+ If you want, you can indent every line, but you can also be lazy and just
+ indent the first line of each block.
+
+[^3]: This is *easier* to type. Inline notes may contain
+ [links](http://google.com) and `]` verbatim characters, as well as
+ [bracketed text].
+
+[^4]: In quote.
+
+[^5]: In list.