]> gitweb @ CieloNegro.org - Rakka.git/blob - test/WikiParserTest.hs
384cc5fde51f549d9310000a98ba9ef1469bb35a
[Rakka.git] / test / WikiParserTest.hs
1 module WikiParserTest
2     ( testData
3     )
4     where
5
6 import           Rakka.Wiki
7 import           Rakka.Wiki.Parser
8 import           Test.HUnit
9 import           Text.ParserCombinators.Parsec
10
11
12 parseWiki :: String -> Either String WikiPage
13 parseWiki src = case parse wikiPage "" src of
14                   Left  err  -> Left (show err)
15                   Right page -> Right page
16
17
18 testData :: [Test]
19 testData = [ (parseWiki ""
20               ~?=
21               (Right []))
22
23            , (parseWiki "\n"
24               ~?=
25               (Right []))
26
27            , (parseWiki "=heading="
28               ~?=
29               (Right [ Heading 1 "heading" ]))
30
31            , (parseWiki "==      heading  ==  \n"
32               ~?=
33               (Right [ Heading 2 "heading" ]))
34
35            , (parseWiki "===== hello world =====\n"
36               ~?=
37               (Right [ Heading 5 "hello world" ]))
38
39            , (parseWiki "a =not a heading="
40               ~?=
41               (Right [ Paragraph [ Text "a =not a heading=" ]
42                      ]))
43
44            , (parseWiki "=h=\n\n=h="
45               ~?=
46               (Right [ Heading 1 "h"
47                      , Heading 1 "h"
48                      ]))
49            , (parseWiki "foo\nbar"
50               ~?=
51               (Right [ Paragraph [ Text "foo"
52                                  , Text "\n"
53                                  , Text "bar"
54                                  ]
55                      ]))
56            , (parseWiki "foo\nbar\n\nbaz\n"
57               ~?=
58               (Right [ Paragraph [ Text "foo"
59                                  , Text "\n"
60                                  , Text "bar"
61                                  ]
62                      , Paragraph [ Text "baz"
63                                  ]
64                      ]))
65
66            , (parseWiki "foo\n\n\nbar"
67               ~?=
68               (Right [ Paragraph [ Text "foo" ]
69                      , Paragraph [ Text "bar" ]
70                      ]))
71
72            , (parseWiki "foo\n=h="
73               ~?=
74               (Right [ Paragraph [ Text "foo" ]
75                      , Heading 1 "h"
76                      ]))
77
78            , (parseWiki "<!-- comment -->"
79               ~?=
80               (Right []))
81
82            , (parseWiki "<!-- comment -->foo"
83               ~?=
84               (Right [ Paragraph [ Text "foo" ]
85                      ]))
86
87            , (parseWiki "bar<!-- comment -->"
88               ~?=
89               (Right [ Paragraph [ Text "bar" ]
90                      ]))
91
92            , (parseWiki "foo<!-- comment -->bar"
93               ~?=
94               (Right [ Paragraph [ Text "foo"
95                                  , Text "bar"
96                                  ]
97                      ]))
98
99            , (parseWiki "<!-- comment -->=h="
100               ~?=
101               (Right [ Heading 1 "h" ]))
102
103            , (parseWiki "=h= <!---->"
104               ~?=
105               (Right [ Heading 1 "h" ]))
106
107            , (parseWiki "<!-- <!-- nested --> comment -->"
108               ~?=
109               (Right []))
110
111            , (parseWiki "[[Page]]"
112               ~?= 
113               (Right [ Paragraph [ PageLink (Just "Page") Nothing Nothing ]
114                      ]))
115
116            , (parseWiki "[[Page|Link to \"Page\"]]"
117               ~?=
118               (Right [ Paragraph [ PageLink (Just "Page") Nothing (Just "Link to \"Page\"") ]
119                      ]))
120
121            , (parseWiki "[[Page#foo]]"
122               ~?= 
123               (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") Nothing ]
124                      ]))
125
126            , (parseWiki "[[#foo]]"
127               ~?= 
128               (Right [ Paragraph [ PageLink Nothing (Just "foo") Nothing ]
129                      ]))
130
131            , (parseWiki "[[Page#foo|Link to \"Page#foo\"]]"
132               ~?=
133               (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") (Just "Link to \"Page#foo\"") ]
134                      ]))
135
136            , (parseWiki "foo [[Bar]] baz"
137               ~?=
138               (Right [ Paragraph [ Text "foo "
139                                  , PageLink (Just "Bar") Nothing Nothing
140                                  , Text " baz"
141                                  ]
142                      ]))
143
144            , (parseWiki "[[Foo]]\n[[Bar]]"
145               ~?= 
146               (Right [ Paragraph [ PageLink (Just "Foo") Nothing Nothing
147                                  , Text "\n"
148                                  , PageLink (Just "Bar") Nothing Nothing
149                                  ]
150                      ]))
151
152            , (parseWiki " foo"
153               ~?=
154               (Right [ Preformatted [ Text "foo" ] ]))
155
156            , (parseWiki " foo\n  bar\n"
157               ~?=
158               (Right [ Preformatted [ Text "foo"
159                                     , Text "\n"
160                                     , Text " bar"
161                                     ]
162                      ]))
163
164            , (parseWiki "foo\n bar\nbaz"
165               ~?=
166               (Right [ Paragraph    [ Text "foo" ]
167                      , Preformatted [ Text "bar" ]
168                      , Paragraph    [ Text "baz" ]
169                      ]))
170
171            , (parseWiki "----"
172               ~?=
173               (Right [ HorizontalLine ]))
174
175            , (parseWiki "\nfoo\nbar\n----\n"
176               ~?=
177               (Right [ Paragraph [ Text "foo"
178                                  , Text "\n"
179                                  , Text "bar"
180                                  ]
181                      , HorizontalLine
182                      ]))
183
184            , (parseWiki "a----b"
185               ~?=
186               (Right [ Paragraph [ Text "a----b" ] ]))
187
188            , (parseWiki "* a"
189               ~?=
190               (Right [ List (ListElement Bullet [[Right (Text "a")]]) ]))
191
192            , (parseWiki "* a*"
193               ~?=
194               (Right [ List (ListElement Bullet [[Right (Text "a*")]]) ]))
195
196            , (parseWiki "* a\n* b\n"
197               ~?=
198               (Right [ List (ListElement Bullet [ [Right (Text "a")]
199                                                 , [Right (Text "b")]
200                                                 ])
201                      ]))
202
203            , (parseWiki "*a\n*#b\n*#c\n"
204               ~?=
205               (Right [ List (ListElement Bullet [ [ Right (Text "a")
206                                                   , Left (ListElement Numbered [ [Right (Text "b")]
207                                                                                , [Right (Text "c")]
208                                                                                ])
209                                                   ]
210                                                 ])
211                      ]))
212
213            , (parseWiki "*a\n#b"
214               ~?=
215               (Right [ List (ListElement Bullet   [ [Right (Text "a")] ])
216                      , List (ListElement Numbered [ [Right (Text "b")] ])
217                      ]))
218
219            , (parseWiki "foo:bar"
220               ~?=
221               (Right [ Paragraph [ Text "foo"
222                                  , Text ":bar"
223                                  ]
224                      ]))
225
226            , (parseWiki "; foo: bar"
227               ~?=
228               (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
229
230            , (parseWiki "; foo: bar\n"
231               ~?=
232               (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
233
234            , (parseWiki "; foo\n: bar\n; bar\n: baz\n: baz"
235               ~?=
236               (Right [ DefinitionList [ Definition [Text "foo"] [ Text "bar" ]
237                                       , Definition [Text "bar"] [ Text "baz"
238                                                                 , Text "\n"
239                                                                 , Text "baz" ]
240                                       ]
241                      ]))
242
243            , (parseWiki "<![CDATA[foo [[bar]] baz]]>"
244               ~?=
245               (Right [ Paragraph [ Text "foo [[bar]] baz" ] ]))
246
247            , (parseWiki "<![PDATA[foo [[bar]] baz]]>"
248               ~?=
249               (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
250
251            , (parseWiki "<![PDATA[\nfoo [[bar]] baz\n]]>"
252               ~?=
253               (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
254
255            , (parseWiki "foo' bar"
256               ~?=
257               (Right [ Paragraph [ Text "foo"
258                                  , Text "'"
259                                  , Text " bar" ]
260                      ]))
261
262            , (parseWiki "''foo''"
263               ~?=
264               (Right [ Paragraph [ Italic [Text "foo"] ] ]))
265
266            , (parseWiki "'''foo'''"
267               ~?=
268               (Right [ Paragraph [ Bold [Text "foo"] ] ]))
269
270            , (parseWiki "foo''''"
271               ~?=
272               (Right [ Paragraph [ Text "foo"
273                                  , Text "'"
274                                  ]
275                      ]))
276
277            , (parseWiki "'''''foo'''''"
278               ~?=
279               (Right [ Paragraph [ Italic [Bold [Text "foo"]] ] ]))
280            ]