d46ea7d7da
Support has been added for the new `[alias|https://example.com|smart-card]` syntax.
124 lines
3.7 KiB
Haskell
124 lines
3.7 KiB
Haskell
{-# 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"
|
|
]
|
|
]
|
|
]
|