]> gitweb @ CieloNegro.org - Rakka.git/blob - test/WikiParserTest.hs
implemented listing
[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 [ LeadingSpaced [ Text "foo" ] ]))
155
156            , (parseWiki " foo\n  bar\n"
157               ~?=
158               (Right [ LeadingSpaced [ Text "foo"
159                                      , Text "\n"
160                                      , Text " bar"
161                                      ]
162                      ]))
163
164            , (parseWiki "foo\n bar\nbaz"
165               ~?=
166               (Right [ Paragraph     [ Text "foo" ]
167                      , LeadingSpaced [ 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            ]