pandoc/src/Tests/Readers/Markdown.hs

103 lines
3.8 KiB
Haskell
Raw Normal View History

2011-01-27 07:09:09 +01:00
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Tests.Readers.Markdown (tests) where
import Text.Pandoc.Definition
import Test.Framework
import Tests.Helpers
import Tests.Arbitrary()
import Text.Pandoc.Builder
-- import Text.Pandoc.Shared ( normalize )
2011-01-27 07:09:09 +01:00
import Text.Pandoc
import Data.Sequence (singleton)
2011-01-27 07:09:09 +01:00
markdown :: String -> Pandoc
markdown = readMarkdown defaultParserState{ stateStandalone = True }
markdownSmart :: String -> Pandoc
markdownSmart = readMarkdown defaultParserState{ stateSmart = True }
2011-01-27 07:09:09 +01:00
infix 5 =:
(=:) :: ToString c
=> String -> (String, c) -> Test
(=:) = test markdown
{-
p_markdown_round_trip :: Block -> Bool
p_markdown_round_trip b = matches d' d''
where d' = normalize $ Pandoc (Meta [] [] []) [b]
d'' = normalize
$ readMarkdown defaultParserState{ stateSmart = True }
$ writeMarkdown defaultWriterOptions d'
matches (Pandoc _ [Plain []]) (Pandoc _ []) = True
matches (Pandoc _ [Para []]) (Pandoc _ []) = True
matches (Pandoc _ [Plain xs]) (Pandoc _ [Para xs']) = xs == xs'
matches x y = x == y
-}
2011-01-27 07:09:09 +01:00
tests :: [Test]
tests = [ testGroup "inline code"
[ "with attribute" =:
"`document.write(\"Hello\");`{.javascript}"
=?> para
(codeWith ("",["javascript"],[]) "document.write(\"Hello\");")
, "with attribute space" =:
"`*` {.haskell .special x=\"7\"}"
=?> para (codeWith ("",["haskell","special"],[("x","7")]) "*")
]
, testGroup "backslash escapes"
[ "in URL" =:
"[hi](/there\\))"
=?> para (link "hi" "/there)" "")
, "in title" =:
"[hi](/there \"a\\\"a)"
=?> para (link "hi" "/there" "a\"a")
, "in reference link title" =:
"[hi]\n\n[hi]: /there (a\\)a)"
=?> para (link "hi" "/there" "a)a")
, "in reference link URL" =:
"[hi]\n\n[hi]: /there\\."
=?> para (link "hi" "/there." "")
]
, testGroup "smart punctuation"
[ test markdownSmart "quote before ellipses"
("'...hi'"
=?> para (singleQuoted (singleton Ellipses +++ "hi")))
]
, testGroup "mixed emphasis and strong"
[ "emph and strong emph alternating" =:
"*xxx* ***xxx*** xxx\n*xxx* ***xxx*** xxx"
=?> para (emph "xxx" +++ space +++ strong (emph "xxx") +++
space +++ "xxx" +++ space +++
emph "xxx" +++ space +++ strong (emph "xxx") +++
space +++ "xxx")
, "emph with spaced strong" =:
"*x **xx** x*"
=?> para (emph ("x" +++ space +++ strong "xx" +++ space +++ "x"))
]
, testGroup "footnotes"
2011-02-01 16:37:22 +01:00
[ "indent followed by newline and flush-left text" =:
"[^1]\n\n[^1]: my note\n\n \nnot in note\n"
=?> para (note (para "my note")) +++ para "not in note"
2011-02-01 16:37:22 +01:00
, "indent followed by newline and indented text" =:
"[^1]\n\n[^1]: my note\n \n in note\n"
2011-02-01 16:37:22 +01:00
=?> para (note (para "my note" +++ para "in note"))
, "recursive note" =:
"[^1]\n\n[^1]: See [^1]\n"
=?> para (note (para "See [^1]"))
]
, testGroup "lhs"
[ test (readMarkdown defaultParserState{stateLiterateHaskell = True})
"inverse bird tracks and html" $
"> a\n\n< b\n\n<div>\n"
=?> codeBlockWith ("",["sourceCode","literate","haskell"],[]) "a"
+++
codeBlockWith ("",["sourceCode","haskell"],[]) "b"
+++
rawBlock "html" "<div>\n\n"
]
-- the round-trip properties frequently fail
-- , testGroup "round trip"
-- [ property "p_markdown_round_trip" p_markdown_round_trip
-- ]
2011-01-27 07:09:09 +01:00
]