diff options
Diffstat (limited to 'test/Tests/Readers')
-rw-r--r-- | test/Tests/Readers/Creole.hs | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/test/Tests/Readers/Creole.hs b/test/Tests/Readers/Creole.hs new file mode 100644 index 000000000..96517c25c --- /dev/null +++ b/test/Tests/Readers/Creole.hs @@ -0,0 +1,273 @@ +{-# 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" ] + , "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 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!") + ] + , 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")]] + ] + ] |