{-# LANGUAGE OverloadedStrings #-} module Tests.Writers.Jira (tests) where import Data.Text (unpack) import Test.Tasty import Test.Tasty.HUnit (HasCallStack) import Tests.Helpers import Text.Pandoc import Text.Pandoc.Arbitrary () import Text.Pandoc.Builder jira :: (ToPandoc a) => a -> String jira = unpack . purely (writeJira def) . toPandoc infix 4 =: (=:) :: (ToString a, ToPandoc a, HasCallStack) => String -> (a, String) -> TestTree (=:) = test jira tests :: [TestTree] tests = [ testGroup "inlines" [ "underlined text" =: underline "underlined text" =?> "+underlined text+" , "image with attributes" =: imageWith ("", [], [("align", "right"), ("height", "50")]) "image.png" "" mempty =?> "!image.png|align=right, height=50!" , testGroup "links" [ "external link" =: link "https://example.com/test.php" "" "test" =?> "[test|https://example.com/test.php]" , "external link without description" =: link "https://example.com/tmp.js" "" "https://example.com/tmp.js" =?> "[https://example.com/tmp.js]" , "email link" =: link "mailto:me@example.com" "" "Jane" =?> "[Jane|mailto:me@example.com]" , "email link without description" =: link "mailto:me@example.com" "" "me@example.com" =?> "[mailto:me@example.com]" , "attachment link" =: linkWith ("", ["attachment"], []) "foo.txt" "" "My file" =?> "[My file^foo.txt]" , "attachment link without description" =: linkWith ("", ["attachment"], []) "foo.txt" "" "foo.txt" =?> "[^foo.txt]" , "user link" =: linkWith ("", ["user-account"], []) "~johndoe" "" "John Doe" =?> "[John Doe|~johndoe]" , "user link with user as description" =: linkWith ("", ["user-account"], []) "~johndoe" "" "~johndoe" =?> "[~johndoe]" , "'smart' link" =: para (linkWith ("", ["smart-link"], []) "http://example.com" "" "x") =?> "[x|http://example.com|smart-link]" , "'smart' card" =: para (linkWith ("", ["smart-card"], []) "http://example.org" "" "x") =?> "[x|http://example.org|smart-card]" ] , testGroup "spans" [ "id is used as anchor" =: spanWith ("unicorn", [], []) (str "Unicorn") =?> "{anchor:unicorn}Unicorn" , "use `color` attribute" =: spanWith ("",[],[("color","red")]) "ruby" =?> "{color:red}ruby{color}" ] , testGroup "code" [ "code block with known language" =: codeBlockWith ("", ["java"], []) "Book book = new Book(\"Algebra\")" =?> "{code:java}\nBook book = new Book(\"Algebra\")\n{code}" , "code block without language" =: codeBlockWith ("", [], []) "preformatted\n text.\n" =?> "{noformat}\npreformatted\n text.\n{noformat}" ] ] , testGroup "blocks" [ testGroup "div" [ "empty attributes" =: divWith nullAttr (para "interesting text") =?> "interesting text" , "just identifier" =: divWith ("a", [], []) (para "interesting text") =?> "{anchor:a}interesting text" , "with class 'panel'" =: divWith ("", ["panel"], []) (para "Contents!") =?> "{panel}\nContents\\!\n{panel}\n" , "panel with id" =: divWith ("b", ["panel"], []) (para "text") =?> "{panel}\n{anchor:b}text\n{panel}\n" , "title attribute" =: divWith ("", [], [("title", "Gimme!")]) (para "Contents!") =?> "{panel:title=Gimme!}\nContents\\!\n{panel}\n" , "nested panels" =: let panelAttr = ("", ["panel"], []) in divWith panelAttr (para "hi" <> divWith panelAttr (para "wassup?")) =?> "{panel}\nhi\n\nwassup?\n{panel}\n" ] ] ]