summaryrefslogtreecommitdiff
path: root/test/Tests/Readers/Creole.hs
diff options
context:
space:
mode:
Diffstat (limited to 'test/Tests/Readers/Creole.hs')
-rw-r--r--test/Tests/Readers/Creole.hs286
1 files changed, 286 insertions, 0 deletions
diff --git a/test/Tests/Readers/Creole.hs b/test/Tests/Readers/Creole.hs
new file mode 100644
index 000000000..3f60a523d
--- /dev/null
+++ b/test/Tests/Readers/Creole.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Tests.Readers.Creole (tests) where
+
+import Data.Text (Text)
+import qualified Data.Text as T
+import Test.Tasty
+import Tests.Helpers
+import Text.Pandoc
+import Text.Pandoc.Arbitrary ()
+import Text.Pandoc.Builder
+
+creole :: Text -> Pandoc
+creole = purely $ readCreole def{ readerStandalone = True }
+
+infix 4 =:
+(=:) :: ToString c
+ => String -> (Text, c) -> TestTree
+(=:) = test creole
+
+tests :: [TestTree]
+tests = [
+ testGroup "Basic Text Formatting" [
+ "bold, single line, fully delimited" =:
+ "only **bold** is bold"
+ =?> para ("only " <> strong "bold" <> " is bold")
+ , "italics, single line, fully delimited" =:
+ "only //this// is in italics"
+ =?> para ("only " <> emph "this" <> " is in italics")
+ , "bold in italics, fully delimited" =:
+ "//**this**// is in bold italics"
+ =?> para (emph (strong "this") <> " is in bold italics")
+ , "italics in bold, fully delimited" =:
+ "**//this//** is in bold italics"
+ =?> para (strong (emph "this") <> " is in bold italics")
+
+ , "escape bold marker" =:
+ "~**not bold" =?> para "**not bold"
+ , "escape italics marker" =:
+ "~//not in italics" =?> para "//not in italics"
+
+ , "inline nowiki, simple" =:
+ "this is {{{**not** ~interpreted}}} at all"
+ =?> para ("this is " <> code "**not** ~interpreted" <> " at all")
+ , "inline nowiki, curly braces inside" =:
+ "this is {{{{{{//including// some `}' chars}}}}}}"
+ =?> para ("this is " <> code "{{{//including// some `}' chars}}}")
+
+ , "placeholder" =:
+ "foo <<<place holder>>> bar"
+ =?> para "foo bar"
+ , "placeholder escaped" =:
+ "foo ~<<<no place holder>>> bar"
+ =?> para "foo <<<no place holder>>> bar"
+ ]
+ , testGroup "Headers" [
+ "header level 1, no space, no trailing =" =:
+ "= Top-Level Header"
+ =?> header 1 (str "Top-Level Header")
+ , "header level 1, leading space, trailing =" =:
+ " = Top-Level Header = "
+ =?> header 1 (str "Top-Level Header")
+ , "header level 2, no space, no trailing =" =:
+ "== Second Level"
+ =?> header 2 (str "Second Level")
+ , "header level 2, leading space, no trailing =" =:
+ " == Second Level"
+ =?> header 2 (str "Second Level")
+ , "header level 3, no space, no trailing =" =:
+ "=== Third"
+ =?> header 3 (str "Third")
+ , "header level 3, no space, > 3 trailing =" =:
+ "=== Third ======="
+ =?> header 3 (str "Third")
+ , "header level 4, no space, no trailing =" =:
+ "==== Fourth Level Heading"
+ =?> header 4 (str "Fourth Level Heading")
+ , "header level 4, no space, < 4 trailing =" =:
+ "==== Fourth Level Heading =="
+ =?> header 4 (str "Fourth Level Heading")
+ , "header level 5, no space, no trailing =" =:
+ "===== Fifth"
+ =?> header 5 (str "Fifth")
+ , "header level 6, no space, no trailing =" =:
+ "====== Sixth"
+ =?> header 6 (str "Sixth")
+ ]
+ , testGroup "Paragraphs" [
+ "paragraphs: multiple, one line" =:
+ "first line\n\nanother line\n"
+ =?> para "first line" <> para "another line"
+ ]
+ , testGroup "Lists" [
+ "unordered list, two entries, one separating space" =:
+ "* foo\n* bar"
+ =?> bulletList [ plain "foo", plain "bar" ]
+ , "unordered list, three entries, one separating space" =:
+ "* foo\n* bar\n* baz"
+ =?> bulletList [ plain "foo", plain "bar", plain "baz" ]
+ , "para followed by, unordered list, two entries, one separating space" =:
+ "blubber\n* foo\n* bar"
+ =?> para "blubber" <> bulletList [ plain "foo", plain "bar" ]
+ , "nested unordered list, one separating space" =:
+ "* foo\n** bar\n** baz\n* blubb"
+ =?> bulletList [ plain "foo"
+ <> bulletList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "nested many unordered lists, one separating space" =:
+ ("* foo\n** bar\n*** third\n*** third two\n** baz\n*** third again\n"
+ <> "**** fourth\n***** fith\n* blubb")
+ =?> bulletList [ plain "foo"
+ <> bulletList [ plain "bar"
+ <> bulletList [ plain "third"
+ , plain "third two"]
+ , plain "baz"
+ <> bulletList [ plain "third again"
+ <> bulletList [
+ plain "fourth"
+ <> bulletList [
+ plain "fith"
+ ]
+ ]
+ ]
+ ]
+ , plain "blubb" ]
+ , "nested unordered list, mixed separating space" =:
+ "*foo\n ** bar\n **baz\n * blubb"
+ =?> bulletList [ plain "foo"
+ <> bulletList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "nested unordered list, one separating space, trailing space" =:
+ "* foo \n** bar \n** baz \n* blubb "
+ =?> bulletList [ plain "foo"
+ <> bulletList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "ordered list, two entries, one separating space" =:
+ "# foo\n# bar"
+ =?> orderedList [ plain "foo", plain "bar" ]
+ , "ordered list, three entries, one separating space" =:
+ "# foo\n# bar\n# baz"
+ =?> orderedList [ plain "foo", plain "bar", plain "baz" ]
+ , "para followed by, ordered list, two entries, one separating space" =:
+ "blubber\n# foo\n# bar"
+ =?> para "blubber" <> orderedList [ plain "foo", plain "bar" ]
+ , "nested ordered list, one separating space" =:
+ "# foo\n## bar\n## baz\n# blubb"
+ =?> orderedList [ plain "foo"
+ <> orderedList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "nested ordered list, one separating space, trailing space" =:
+ "# foo \n## bar \n## baz \n# blubb "
+ =?> orderedList [ plain "foo"
+ <> orderedList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "nested many ordered lists, one separating space" =:
+ ("# foo\n## bar\n### third\n### third two\n## baz\n### third again\n"
+ <> "#### fourth\n##### fith\n# blubb")
+ =?> orderedList [ plain "foo"
+ <> orderedList [ plain "bar"
+ <> orderedList [ plain "third"
+ , plain "third two"]
+ , plain "baz"
+ <> orderedList [ plain "third again"
+ <> orderedList [
+ plain "fourth"
+ <> orderedList [
+ plain "fith"
+ ]
+ ]
+ ]
+ ]
+ , plain "blubb" ]
+ , "nested ordered list, mixed separating space" =:
+ "#foo\n ## bar\n ##baz\n # blubb"
+ =?> orderedList [ plain "foo"
+ <> orderedList [ plain "bar", plain "baz" ]
+ , plain "blubb" ]
+ , "mixed nested ordered and unordered lists, one separating space" =:
+ ("# foo\n** bar\n### third\n### third two\n** baz\n### third again\n"
+ <> "#### fourth\n***** fith\n# blubb")
+ =?> orderedList [ plain "foo"
+ <> bulletList [ plain "bar"
+ <> orderedList [ plain "third"
+ , plain "third two"]
+ , plain "baz"
+ <> orderedList [ plain "third again"
+ <> orderedList [
+ plain "fourth"
+ <> bulletList [
+ plain "fith"
+ ]
+ ]
+ ]
+ ]
+ , plain "blubb" ]
+ ]
+ , testGroup "NoWiki" [
+ "quoted block, simple" =:
+ "{{{\nfoo bar\n //baz//\n}}}"
+ =?> codeBlock "foo bar\n //baz//"
+ , "quoted block, curly bracket exception" =:
+ "{{{\nfoo bar\n }}}\nbaz\n }}}\n}}}"
+ =?> codeBlock "foo bar\n }}}\nbaz\n}}}"
+ , "forced line breaks" =:
+ "{{{no break!\\\\here}}} but a break\\\\here!"
+ =?> para (code "no break!\\\\here" <> " but a break"
+ <> linebreak <> "here!"),
+ "quoted block, after trailing white space" =:
+ "this is a paragraph \n{{{\nfoo bar\n //baz//\n}}}"
+ =?> para "this is a paragraph" <> codeBlock "foo bar\n //baz//"
+ ]
+ , testGroup "Images and Links" [
+ "image simple" =:
+ "{{foo.png}}" =?> para (image "foo.png" "" (str ""))
+ , "image with alt text" =:
+ "Image of a bar: {{/path/to/bar.png|A Bar}} look at it!"
+ =?> para ("Image of a bar: "
+ <> image "/path/to/bar.png" "" (str "A Bar") <> " look at it!")
+
+ , "auto link" =:
+ "foo http://foo.example.com/bar/baz.html bar"
+ =?> para ("foo "
+ <> link "http://foo.example.com/bar/baz.html" ""
+ (str "http://foo.example.com/bar/baz.html")
+ <> " bar")
+ , "escaped auto link" =:
+ "foo ~http://foo.example.com/bar/baz.html bar"
+ =?> para "foo http://foo.example.com/bar/baz.html bar"
+ , "wiki link simple" =:
+ "foo [[http://foo.example.com/foo.png]] bar"
+ =?> para ("foo "
+ <> link "http://foo.example.com/foo.png" ""
+ (str "http://foo.example.com/foo.png")
+ <> " bar")
+ , "wiki link with name" =:
+ "foo [[http://foo.example.com/foo.png|my link]] bar"
+ =?> para ("foo "
+ <> link "http://foo.example.com/foo.png" ""
+ (str "my link")
+ <> " bar")
+ , "image link" =:
+ "[[http://foo.example.com/|{{foo.png}}]]"
+ =?> para (link "http://foo.example.com/" "" (image "foo.png" "" (str "")))
+ ]
+ , testGroup "Table" [
+ "Table with Header" =:
+ T.unlines [ "|= Foo |= Bar |= Baz |"
+ , "| One | Two | Three |"
+ , "| 1 | 2 | 3 |"
+ , "| A | B | C |"
+ ]
+ =?> simpleTable
+ [plain "Foo", plain "Bar" , plain "Baz"]
+ [[plain "One", plain "Two" , plain "Three"]
+ ,[plain "1", plain "2" , plain "3"]
+ ,[plain "A", plain "B" , plain "C"]]
+ , "Table without Header" =:
+ T.unlines [ "| One | Two | Three |"
+ , "| 1 | 2 | 3 |"
+ , "| A | B | C |"
+ ]
+ =?> simpleTable [mempty]
+ [[plain "One", plain "Two" , plain "Three"]
+ ,[plain "1", plain "2" , plain "3"]
+ ,[plain "A", plain "B" , plain "C"]]
+ , "Table without Header, no markers at line ends" =:
+ T.unlines [ "| One | Two | Three"
+ , "| 1 | 2 | 3"
+ , "| A | B | C "
+ ]
+ =?> simpleTable [mempty]
+ [[plain "One", plain "Two" , plain "Three"]
+ ,[plain "1", plain "2" , plain "3"]
+ ,[plain "A", plain "B" , plain "C"]]
+ , "Table with Header, with formatting" =:
+ T.unlines [ "|= **Foo** |= **Bar** |= **Baz** |"
+ , "|//one// element |//second// elt|Three |"
+ , "| {{{1}}} | {{{{}}}} | [[link]] |"
+ ]
+ =?> simpleTable
+ [plain $ strong "Foo", plain $ strong "Bar" , plain $ strong "Baz"]
+ [[plain (emph "one" <> " element"), plain (emph "second" <> " elt")
+ ,plain "Three"]
+ ,[plain $ code "1", plain $ code "{}"
+ ,plain $ link "link" "" (str "link")]]
+ ]
+ ]