]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - tests/WikiParserTest.hs
Implemented more features
[Rakka.git] / tests / WikiParserTest.hs
diff --git a/tests/WikiParserTest.hs b/tests/WikiParserTest.hs
new file mode 100644 (file)
index 0000000..d8772a1
--- /dev/null
@@ -0,0 +1,323 @@
+module WikiParserTest
+    ( testData
+    )
+    where
+
+import           Rakka.Wiki
+import           Rakka.Wiki.Parser
+import           Test.HUnit
+import           Text.ParserCombinators.Parsec
+
+
+cmdTypeOf :: String -> Maybe CommandType
+cmdTypeOf "br"   = Just InlineCommandType
+cmdTypeOf "i"    = Just InlineCommandType
+cmdTypeOf "b"    = Just InlineCommandType
+cmdTypeOf "span" = Just InlineCommandType
+cmdTypeOf "div"  = Just BlockCommandType
+cmdTypeOf _      = Nothing
+
+
+parseWiki :: String -> Either String WikiPage
+parseWiki src = case parse (wikiPage cmdTypeOf) "" src of
+                  Left  err  -> Left (show err)
+                  Right page -> Right page
+
+
+testData :: [Test]
+testData = [ (parseWiki ""
+              ~?=
+              (Right []))
+
+           , (parseWiki "\n"
+              ~?=
+              (Right []))
+
+           , (parseWiki "=heading="
+              ~?=
+              (Right [ Heading 1 "heading" ]))
+
+           , (parseWiki "==      heading  ==  \n"
+              ~?=
+              (Right [ Heading 2 "heading" ]))
+
+           , (parseWiki "===== hello world =====\n"
+              ~?=
+              (Right [ Heading 5 "hello world" ]))
+
+           , (parseWiki "a =not a heading="
+              ~?=
+              (Right [ Paragraph [ Text "a =not a heading=" ]
+                     ]))
+
+           , (parseWiki "=h=\n\n=h="
+              ~?=
+              (Right [ Heading 1 "h"
+                     , Heading 1 "h"
+                     ]))
+           , (parseWiki "foo\nbar"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "\n"
+                                 , Text "bar"
+                                 ]
+                     ]))
+           , (parseWiki "foo\nbar\n\nbaz\n"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "\n"
+                                 , Text "bar"
+                                 ]
+                     , Paragraph [ Text "baz"
+                                 ]
+                     ]))
+
+           , (parseWiki "foo\n\n\nbar"
+              ~?=
+              (Right [ Paragraph [ Text "foo" ]
+                     , Paragraph [ Text "bar" ]
+                     ]))
+
+           , (parseWiki "foo\n=h="
+              ~?=
+              (Right [ Paragraph [ Text "foo" ]
+                     , Heading 1 "h"
+                     ]))
+
+           , (parseWiki "<!-- comment -->"
+              ~?=
+              (Right []))
+
+           , (parseWiki "<!-- comment -->foo"
+              ~?=
+              (Right [ Paragraph [ Text "foo" ]
+                     ]))
+
+           , (parseWiki "bar<!-- comment -->"
+              ~?=
+              (Right [ Paragraph [ Text "bar" ]
+                     ]))
+
+           , (parseWiki "foo<!-- comment -->bar"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "bar"
+                                 ]
+                     ]))
+
+           , (parseWiki "<!-- comment -->=h="
+              ~?=
+              (Right [ Heading 1 "h" ]))
+
+           , (parseWiki "=h= <!---->"
+              ~?=
+              (Right [ Heading 1 "h" ]))
+
+           , (parseWiki "<!-- <!-- nested --> comment -->"
+              ~?=
+              (Right []))
+
+           , (parseWiki "[[Page]]"
+              ~?= 
+              (Right [ Paragraph [ PageLink (Just "Page") Nothing Nothing ]
+                     ]))
+
+           , (parseWiki "[[Page|Link to \"Page\"]]"
+              ~?=
+              (Right [ Paragraph [ PageLink (Just "Page") Nothing (Just "Link to \"Page\"") ]
+                     ]))
+
+           , (parseWiki "[[Page#foo]]"
+              ~?= 
+              (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") Nothing ]
+                     ]))
+
+           , (parseWiki "[[#foo]]"
+              ~?= 
+              (Right [ Paragraph [ PageLink Nothing (Just "foo") Nothing ]
+                     ]))
+
+           , (parseWiki "[[Page#foo|Link to \"Page#foo\"]]"
+              ~?=
+              (Right [ Paragraph [ PageLink (Just "Page") (Just "foo") (Just "Link to \"Page#foo\"") ]
+                     ]))
+
+           , (parseWiki "foo [[Bar]] baz"
+              ~?=
+              (Right [ Paragraph [ Text "foo "
+                                 , PageLink (Just "Bar") Nothing Nothing
+                                 , Text " baz"
+                                 ]
+                     ]))
+
+           , (parseWiki "[[Foo]]\n[[Bar]]"
+              ~?= 
+              (Right [ Paragraph [ PageLink (Just "Foo") Nothing Nothing
+                                 , Text "\n"
+                                 , PageLink (Just "Bar") Nothing Nothing
+                                 ]
+                     ]))
+
+           , (parseWiki " foo"
+              ~?=
+              (Right [ Preformatted [ Text "foo" ] ]))
+
+           , (parseWiki " foo\n  bar\n"
+              ~?=
+              (Right [ Preformatted [ Text "foo"
+                                    , Text "\n"
+                                    , Text " bar"
+                                    ]
+                     ]))
+
+           , (parseWiki "foo\n bar\nbaz"
+              ~?=
+              (Right [ Paragraph    [ Text "foo" ]
+                     , Preformatted [ Text "bar" ]
+                     , Paragraph    [ Text "baz" ]
+                     ]))
+
+           , (parseWiki "----"
+              ~?=
+              (Right [ HorizontalLine ]))
+
+           , (parseWiki "\nfoo\nbar\n----\n"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "\n"
+                                 , Text "bar"
+                                 ]
+                     , HorizontalLine
+                     ]))
+
+           , (parseWiki "a----b"
+              ~?=
+              (Right [ Paragraph [ Text "a----b" ] ]))
+
+           , (parseWiki "* a"
+              ~?=
+              (Right [ List (ListElement Bullet [[Right (Text "a")]]) ]))
+
+           , (parseWiki "* a*"
+              ~?=
+              (Right [ List (ListElement Bullet [[Right (Text "a*")]]) ]))
+
+           , (parseWiki "* a\n* b\n"
+              ~?=
+              (Right [ List (ListElement Bullet [ [Right (Text "a")]
+                                                , [Right (Text "b")]
+                                                ])
+                     ]))
+
+           , (parseWiki "*a\n*#b\n*#c\n"
+              ~?=
+              (Right [ List (ListElement Bullet [ [ Right (Text "a")
+                                                  , Left (ListElement Numbered [ [Right (Text "b")]
+                                                                               , [Right (Text "c")]
+                                                                               ])
+                                                  ]
+                                                ])
+                     ]))
+
+           , (parseWiki "*a\n#b"
+              ~?=
+              (Right [ List (ListElement Bullet   [ [Right (Text "a")] ])
+                     , List (ListElement Numbered [ [Right (Text "b")] ])
+                     ]))
+
+           , (parseWiki "*a<!-- comment -->"
+              ~?=
+              (Right [ List (ListElement Bullet [ [Right (Text "a")] ]) ]))
+
+           , (parseWiki "*a<!-- comment -->\n*b"
+              ~?=
+              (Right [ List (ListElement Bullet [ [Right (Text "a")]
+                                                , [Right (Text "b")]
+                                                ])
+                     ]))
+
+           , (parseWiki "foo:bar"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text ":bar"
+                                 ]
+                     ]))
+
+           , (parseWiki "; foo: bar"
+              ~?=
+              (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
+
+           , (parseWiki "; foo: bar\n"
+              ~?=
+              (Right [ DefinitionList [Definition [Text "foo"] [Text "bar"]] ]))
+
+           , (parseWiki "; foo\n: bar\n; bar\n: baz\n: baz"
+              ~?=
+              (Right [ DefinitionList [ Definition [Text "foo"] [ Text "bar" ]
+                                      , Definition [Text "bar"] [ Text "baz"
+                                                                , Text "\n"
+                                                                , Text "baz" ]
+                                      ]
+                     ]))
+
+           , (parseWiki "<![CDATA[foo [[bar]] baz]]>"
+              ~?=
+              (Right [ Paragraph [ Text "foo [[bar]] baz" ] ]))
+
+           , (parseWiki "<![PDATA[foo [[bar]] baz]]>"
+              ~?=
+              (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
+
+           , (parseWiki "<![PDATA[\nfoo [[bar]] baz\n]]>"
+              ~?=
+              (Right [ Preformatted [ Text "foo [[bar]] baz" ] ]))
+
+           , (parseWiki "foo' bar"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "'"
+                                 , Text " bar" ]
+                     ]))
+
+           , (parseWiki "''foo''"
+              ~?=
+              (Right [ Paragraph [ Italic [Text "foo"] ] ]))
+
+           , (parseWiki "'''foo'''"
+              ~?=
+              (Right [ Paragraph [ Bold [Text "foo"] ] ]))
+
+           , (parseWiki "foo''''"
+              ~?=
+              (Right [ Paragraph [ Text "foo"
+                                 , Text "'"
+                                 ]
+                     ]))
+
+           , (parseWiki "'''''foo'''''"
+              ~?=
+              (Right [ Paragraph [ Italic [Bold [Text "foo"]] ] ]))
+
+           , (parseWiki "<br />"
+              ~?=
+              (Right [ Paragraph [ InlineCmd (InlineCommand "br" [] []) ] ]))
+
+           , (parseWiki "<br style=\"clear: both\"/>"
+              ~?=
+              (Right [ Paragraph [ InlineCmd (InlineCommand "br" [("style", "clear: both")] []) ] ]))
+
+           , (parseWiki "<i><b>foo</b></i>"
+              ~?=
+              (Right [ Paragraph [ InlineCmd (InlineCommand "i" []
+                                              [ InlineCmd (InlineCommand "b" [] [ Text "foo" ]) ]) ] ]))
+
+           , (parseWiki "<i>\nfoo\n<!-- comment -->\nbar</i>"
+              ~?=
+              (Right [ Paragraph [ InlineCmd (InlineCommand "i" []
+                                              [ Text "\n"
+                                              , Text "foo"
+                                              , Text "\n"
+                                              , Text "\n"
+                                              , Text "bar"
+                                              ]) ] ]))
+           ]