pandoc/test/Tests/Writers/JATS.hs
John MacFarlane e87b54dcad JATS writer: properly handle footnotes.
"Best Practice: When footnotes are grouped at the end of an article,
wrap them in a `<fn-group>` and use an `<xref>` element in the text, as
usual, to tie each footnote in the list to a particular location in the
text."

Closes #5511.
2019-05-16 21:39:03 -07:00

108 lines
4.1 KiB
Haskell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Tests.Writers.JATS (tests) where
import Prelude
import Data.Text (unpack)
import Test.Tasty
import Tests.Helpers
import Text.Pandoc
import Text.Pandoc.Arbitrary ()
import Text.Pandoc.Builder
jats :: (ToPandoc a) => a -> String
jats = unpack . purely (writeJATS def{ writerWrapText = WrapNone }) . toPandoc
{-
"my test" =: X =?> Y
is shorthand for
test jats "my test" $ X =?> Y
which is in turn shorthand for
test jats "my test" (X,Y)
-}
infix 4 =:
(=:) :: (ToString a, ToPandoc a)
=> String -> (a, String) -> TestTree
(=:) = test jats
tests :: [TestTree]
tests = [ testGroup "inline code"
[ "basic" =: code "@&" =?> "<p><monospace>@&amp;</monospace></p>"
, "lang" =: codeWith ("", ["c"], []) "@&" =?> "<p><code language=\"c\">@&amp;</code></p>"
]
, testGroup "block code"
[ "basic" =: codeBlock "@&" =?> "<preformat>@&amp;</preformat>"
, "lang" =: codeBlockWith ("", ["c"], []) "@&" =?> "<code language=\"c\">@&amp;</code>"
]
, testGroup "images"
[ "basic" =:
image "/url" "title" mempty
=?> "<graphic mimetype=\"image\" mime-subtype=\"\" xlink:href=\"/url\" xlink:title=\"title\" />"
]
, testGroup "inlines"
[ "Emphasis" =: emph "emphasized"
=?> "<p><italic>emphasized</italic></p>"
]
, "bullet list" =: bulletList [ plain $ text "first"
, plain $ text "second"
, plain $ text "third"
]
=?> "<list list-type=\"bullet\">\n\
\ <list-item>\n\
\ <p>first</p>\n\
\ </list-item>\n\
\ <list-item>\n\
\ <p>second</p>\n\
\ </list-item>\n\
\ <list-item>\n\
\ <p>third</p>\n\
\ </list-item>\n\
\</list>"
, testGroup "definition lists"
[ "with internal link" =: definitionList [(link "#go" "" (str "testing"),
[plain (text "hi there")])] =?>
"<def-list>\n\
\ <def-item>\n\
\ <term><xref alt=\"testing\" rid=\"go\">testing</xref></term>\n\
\ <def>\n\
\ <p>hi there</p>\n\
\ </def>\n\
\ </def-item>\n\
\</def-list>"
]
, testGroup "math"
[ "escape |" =: para (math "\\sigma|_{\\{x\\}}") =?>
"<p><inline-formula><alternatives>\n\
\<tex-math><![CDATA[\\sigma|_{\\{x\\}}]]></tex-math>\n\
\<mml:math display=\"inline\" xmlns:mml=\"http://www.w3.org/1998/Math/MathML\"><mml:mrow><mml:mi>σ</mml:mi><mml:msub><mml:mo stretchy=\"false\" form=\"prefix\">|</mml:mo><mml:mrow><mml:mo stretchy=\"false\" form=\"prefix\">{</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy=\"false\" form=\"postfix\">}</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:math></alternatives></inline-formula></p>"
]
, testGroup "headers"
[ "unnumbered header" =:
headerWith ("foo",["unnumbered"],[]) 1
(text "Header 1" <> note (plain $ text "note")) =?>
"<sec id=\"foo\">\n\
\ <title>Header 1<xref ref-type=\"fn\" rid=\"fn1\">1</xref></title>\n\
\</sec>"
, "unnumbered sub header" =:
headerWith ("foo",["unnumbered"],[]) 1
(text "Header")
<> headerWith ("foo",["unnumbered"],[]) 2
(text "Sub-Header") =?>
"<sec id=\"foo\">\n\
\ <title>Header</title>\n\
\ <sec id=\"foo\">\n\
\ <title>Sub-Header</title>\n\
\ </sec>\n\
\</sec>"
, "containing image" =:
header 1 (image "imgs/foo.jpg" "" (text "Alt text")) =?>
"<sec>\n\
\ <title><inline-graphic mimetype=\"image\" mime-subtype=\"jpeg\" xlink:href=\"imgs/foo.jpg\" /></title>\n\
\</sec>"
]
]