1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Tests.Writers.RST (tests) where
import Prelude
import Test.Tasty
import Tests.Helpers
import Text.Pandoc
import Text.Pandoc.Arbitrary ()
import Text.Pandoc.Builder
infix 4 =:
(=:) :: (ToString a, ToPandoc a)
=> String -> (a, String) -> TestTree
(=:) = test (purely (writeRST def . toPandoc))
tests :: [TestTree]
tests = [ testGroup "rubrics"
[ "in list item" =:
bulletList [header 2 (text "foo")] =?>
"- .. rubric:: foo"
, "in definition list item" =:
definitionList [(text "foo", [header 2 (text "bar"),
para $ text "baz"])] =?>
unlines
[ "foo"
, " .. rubric:: bar"
, ""
, " baz"]
, "in block quote" =:
blockQuote (header 1 (text "bar")) =?>
" .. rubric:: bar"
, "with id" =:
blockQuote (headerWith ("foo",[],[]) 1 (text "bar")) =?>
unlines
[ " .. rubric:: bar"
, " :name: foo"]
, "with id class" =:
blockQuote (headerWith ("foo",["baz"],[]) 1 (text "bar")) =?>
unlines
[ " .. rubric:: bar"
, " :name: foo"
, " :class: baz"]
]
, testGroup "ligatures" -- handling specific sequences of blocks
[ "a list is closed by a comment before a quote" =: -- issue 4248
bulletList [plain "bulleted"] <> blockQuote (plain "quoted") =?>
unlines
[ "- bulleted"
, ""
, ".."
, ""
, " quoted"]
]
, testGroup "inlines"
[ "are removed when empty" =: -- #4434
plain (strong (str "")) =?> ""
, "do not cause the introduction of extra spaces when removed" =:
plain (strong (str "") <> emph (str "text")) =?> "*text*"
, "spaces are stripped at beginning and end" =:
-- pandoc issue 4327 "The text within inline markup may not
-- begin or end with whitespace"
-- http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#inline-markup
strong (space <> str "text" <> space <> space) =?> "**text**"
, "single space stripped" =:
strong space =?> ""
]
, testGroup "headings"
[ "normal heading" =:
header 1 (text "foo") =?>
unlines
[ "foo"
, "==="]
-- note: heading normalization is only done in standalone mode
, test (purely (writeRST def{ writerTemplate = Just "$body$\n" }) . toPandoc)
"heading levels" $
header 1 (text "Header 1") <>
header 3 (text "Header 2") <>
header 2 (text "Header 2") <>
header 1 (text "Header 1") <>
header 4 (text "Header 2") <>
header 5 (text "Header 3") <>
header 3 (text "Header 2") =?>
unlines
[ "Header 1"
, "========"
, ""
, "Header 2"
, "--------"
, ""
, "Header 2"
, "--------"
, ""
, "Header 1"
, "========"
, ""
, "Header 2"
, "--------"
, ""
, "Header 3"
, "~~~~~~~~"
, ""
, "Header 2"
, "--------"]
, test (purely (writeRST def{ writerTemplate = Just "$body$\n" }) . toPandoc)
"minimal heading levels" $
header 2 (text "Header 1") <>
header 3 (text "Header 2") <>
header 2 (text "Header 1") <>
header 4 (text "Header 2") <>
header 5 (text "Header 3") <>
header 3 (text "Header 2") =?>
unlines
[ "Header 1"
, "========"
, ""
, "Header 2"
, "--------"
, ""
, "Header 1"
, "========"
, ""
, "Header 2"
, "--------"
, ""
, "Header 3"
, "~~~~~~~~"
, ""
, "Header 2"
, "--------"]
]
]
|