pandoc/test/Tests/Readers/Man.hs
2022-02-23 09:20:06 +01:00

145 lines
4.5 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Tests.Readers.Man
Copyright : © 2018-2019 Yan Pas <yanp.bugz@gmail.com>,
2018-2022 John MacFarlane
License : GNU GPL, version 2 or above
Maintainer : John MacFarlane <jgm@berkeley.edu>
Stability : alpha
Portability : portable
Tests for the Man reader.
-}
module Tests.Readers.Man (tests) where
import Data.Text (Text)
import Test.Tasty
import Test.Tasty.HUnit (HasCallStack)
import Tests.Helpers
import Text.Pandoc
import Text.Pandoc.Arbitrary ()
import Text.Pandoc.Builder
import Text.Pandoc.Readers.Man
man :: Text -> Pandoc
man = purely $ readMan def
infix 4 =:
(=:) :: (ToString c, HasCallStack)
=> String -> (Text, c) -> TestTree
(=:) = test man
toRow :: [Blocks] -> Row
toRow = Row nullAttr . map simpleCell
tests :: [TestTree]
tests = [
-- .SH "HEllo bbb" "aaa"" as"
testGroup "Macros" [
"Bold" =:
".B foo"
=?> para (strong "foo")
, "Italic" =:
".I bar\n"
=?> para (emph "bar")
, "BoldItalic" =:
".BI foo bar"
=?> para (strong (str "foo") <> emph (str "bar"))
, "H1" =:
".SH The header\n"
=?> header 1 (text "The header")
, "H2" =:
".SS \"The header 2\""
=?> header 2 (text "The header 2")
, "Macro args" =:
".B \"single arg with \"\"Q\"\"\""
=?>para (strong $ text "single arg with \"Q\"")
, "Argument from next line" =:
".B\nsingle arg with \"Q\""
=?>para (strong $ text "single arg with \"Q\"")
, "comment" =:
".\\\"bla\naaa"
=?>para (str "aaa")
, "link" =:
".BR aa (1)"
=?> para (strong (str "aa") <> str "(1)")
],
testGroup "Escapes" [
"fonts" =:
"aa\\fIbb\\fRcc"
=?>para (str "aa" <> emph (str "bb") <> str "cc")
, "nested fonts" =:
"\\f[BI]hi\\f[I] there\\f[R]"
=?> para (emph (strong (text "hi") <> text " there"))
, "nested fonts 2" =:
"\\f[R]hi \\f[I]there \\f[BI]bold\\f[R] ok"
=?> para (text "hi " <> emph (text "there " <> strong (text "bold")) <>
text " ok")
, "skip" =:
"a\\%\\\n\\:b\\0"
=?>para (str "ab\8199")
, "replace" =:
"\\-\\ \\\\\\[lq]\\[rq]\\[em]\\[en]\\*(lq\\*(rq"
=?>para (text "- \\“”—–“”")
, "replace2" =:
"\\t\\e\\`\\^\\|\\'" =?>para (text "\\`\8202\8198'")
, "comment with \\\"" =:
"Foo \\\" bar\n" =?>para (text "Foo")
, "comment with \\#" =:
"Foo\\#\nbar\n" =?>para (text "Foobar")
, "two letter escapes" =:
"\\(oA\\(~O" =?>para (text "ÅÕ")
, "bracketed escapes" =:
"\\[oA]\\[~O]\\[Do]\\[Ye]\\[product]\\[ul]" =?>para (text "ÅÕ$¥∏_")
, "unicode escapes" =:
"\\[u2020]" =?>para (text "")
, "unicode escapes (combined)" =:
"\\[u0075_u0301]" =?>para (text "\250")
, "unknown escape (#5034)" =:
"\\9" =?>para (text "9")
],
testGroup "Lists" [
"bullet" =:
".IP \"\\[bu]\"\nfirst\n.IP \"\\[bu]\"\nsecond"
=?> bulletList [para $ str "first", para $ str "second"]
, "ordered" =:
".IP 2 a\nfirst\n.IP 3 a\nsecond"
=?> orderedListWith (2,Decimal,DefaultDelim) [para $ str "first", para $ str "second"]
, "upper" =:
".IP A) a\nfirst\n.IP B) a\nsecond"
=?> orderedListWith (1,UpperAlpha,OneParen) [para $ str "first", para $ str "second"]
, "nested" =:
".IP \"\\[bu]\"\nfirst\n.RS\n.IP \"\\[bu]\"\n1a\n.IP \"\\[bu]\"\n1b\n.RE"
=?> bulletList [para (str "first") <> bulletList [para $ str "1a", para $ str "1b"]]
, "change in list style" =:
".IP \\[bu]\nfirst\n.IP 1\nsecond"
=?> bulletList [para (str "first")] <>
orderedListWith (1,Decimal,DefaultDelim) [para (str "second")]
],
testGroup "CodeBlocks" [
"cb1"=:
".nf\naa\n\tbb\n.fi"
=?> codeBlock "aa\n\tbb"
],
testGroup "Tables" [
"t1" =:
".TS\nallbox;\nl l l.\na\tb\tc\nd\te\tf\n.TE"
=?> table
emptyCaption
(replicate 3 (AlignLeft, ColWidthDefault))
(TableHead nullAttr [])
[TableBody nullAttr 0 [] $ map toRow
[map (plain . str ) ["a", "b", "c"],
map (plain . str ) ["d", "e", "f"]]]
(TableFoot nullAttr []),
"longcell" =:
".TS\n;\nr.\nT{\na\nb\nc d\nT}\nf\n.TE"
=?> table
emptyCaption
[(AlignRight, ColWidthDefault)]
(TableHead nullAttr [])
[TableBody nullAttr 0 [] $ map toRow [[plain $ text "a b c d"], [plain $ str "f"]]]
(TableFoot nullAttr [])
]
]