module WikiParserTest ( testData ) where import Rakka.Wiki import Rakka.Wiki.Parser import Test.HUnit import Text.ParserCombinators.Parsec parseWiki :: String -> Either String WikiPage parseWiki src = case parse wikiPage "" 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 "" ~?= (Right [])) , (parseWiki "foo" ~?= (Right [ Paragraph [ Text "foo" ] ])) , (parseWiki "bar" ~?= (Right [ Paragraph [ Text "bar" ] ])) , (parseWiki "foobar" ~?= (Right [ Paragraph [ Text "foo" , Text "bar" ] ])) , (parseWiki "=h=" ~?= (Right [ Heading 1 "h" ])) , (parseWiki "=h= " ~?= (Right [ Heading 1 "h" ])) , (parseWiki " 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 [ LeadingSpaced [ Text "foo" ] ])) , (parseWiki " foo\n bar\n" ~?= (Right [ LeadingSpaced [ Text "foo" , Text "\n" , Text " bar" ] ])) , (parseWiki "foo\n bar\nbaz" ~?= (Right [ Paragraph [ Text "foo" ] , LeadingSpaced [ 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")] ]) ])) ]