2014-06-16 22:44:40 -07:00
|
|
|
module Tests.Readers.Docx (tests) where
|
2014-06-15 14:55:17 -04:00
|
|
|
|
|
|
|
import Text.Pandoc.Options
|
|
|
|
import Text.Pandoc.Readers.Native
|
|
|
|
import Text.Pandoc.Definition
|
|
|
|
import Tests.Helpers
|
|
|
|
import Test.Framework
|
|
|
|
import qualified Data.ByteString.Lazy as B
|
2014-06-16 22:44:40 -07:00
|
|
|
import Text.Pandoc.Readers.Docx
|
2014-06-20 18:26:15 -04:00
|
|
|
import Text.Pandoc.Writers.Native (writeNative)
|
|
|
|
import qualified Data.Map as M
|
2014-06-15 14:55:17 -04:00
|
|
|
|
2014-06-20 18:26:15 -04:00
|
|
|
-- We define a wrapper around pandoc that doesn't normalize in the
|
|
|
|
-- tests. Since we do our own normalization, we want to make sure
|
|
|
|
-- we're doing it right.
|
|
|
|
|
|
|
|
data NoNormPandoc = NoNormPandoc {unNoNorm :: Pandoc}
|
|
|
|
deriving Show
|
|
|
|
|
|
|
|
noNorm :: Pandoc -> NoNormPandoc
|
|
|
|
noNorm = NoNormPandoc
|
|
|
|
|
|
|
|
instance ToString NoNormPandoc where
|
|
|
|
toString d = writeNative def{ writerStandalone = s } $ toPandoc d
|
|
|
|
where s = case d of
|
|
|
|
NoNormPandoc (Pandoc (Meta m) _)
|
|
|
|
| M.null m -> False
|
|
|
|
| otherwise -> True
|
|
|
|
|
|
|
|
instance ToPandoc NoNormPandoc where
|
|
|
|
toPandoc = unNoNorm
|
|
|
|
|
|
|
|
compareOutput :: ReaderOptions
|
|
|
|
-> FilePath
|
|
|
|
-> FilePath
|
|
|
|
-> IO (NoNormPandoc, NoNormPandoc)
|
2014-06-19 12:05:16 -04:00
|
|
|
compareOutput opts docxFile nativeFile = do
|
2014-06-15 14:55:17 -04:00
|
|
|
df <- B.readFile docxFile
|
|
|
|
nf <- Prelude.readFile nativeFile
|
2014-06-20 18:26:15 -04:00
|
|
|
return $ (noNorm (readDocx opts df), noNorm (readNative nf))
|
2014-06-15 14:55:17 -04:00
|
|
|
|
2014-06-19 12:05:16 -04:00
|
|
|
testCompareWithOptsIO :: ReaderOptions -> String -> FilePath -> FilePath -> IO Test
|
|
|
|
testCompareWithOptsIO opts name docxFile nativeFile = do
|
|
|
|
(dp, np) <- compareOutput opts docxFile nativeFile
|
2014-06-15 14:55:17 -04:00
|
|
|
return $ test id name (dp, np)
|
|
|
|
|
2014-06-19 12:05:16 -04:00
|
|
|
testCompareWithOpts :: ReaderOptions -> String -> FilePath -> FilePath -> Test
|
|
|
|
testCompareWithOpts opts name docxFile nativeFile =
|
|
|
|
buildTest $ testCompareWithOptsIO opts name docxFile nativeFile
|
|
|
|
|
2014-06-15 14:55:17 -04:00
|
|
|
testCompare :: String -> FilePath -> FilePath -> Test
|
2014-06-19 12:05:16 -04:00
|
|
|
testCompare = testCompareWithOpts def
|
2014-06-15 14:55:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
tests :: [Test]
|
|
|
|
tests = [ testGroup "inlines"
|
|
|
|
[ testCompare
|
|
|
|
"font formatting"
|
|
|
|
"docx.inline_formatting.docx"
|
|
|
|
"docx.inline_formatting.native"
|
|
|
|
, testCompare
|
|
|
|
"hyperlinks"
|
|
|
|
"docx.links.docx"
|
|
|
|
"docx.links.native"
|
|
|
|
, testCompare
|
|
|
|
"inline image with reference output"
|
|
|
|
"docx.image.docx"
|
|
|
|
"docx.image_no_embed.native"
|
|
|
|
, testCompare
|
|
|
|
"handling unicode input"
|
|
|
|
"docx.unicode.docx"
|
2014-06-19 19:33:22 -04:00
|
|
|
"docx.unicode.native"
|
|
|
|
, testCompare
|
|
|
|
"literal tabs"
|
|
|
|
"docx.tabs.docx"
|
|
|
|
"docx.tabs.native"
|
2014-06-21 17:58:32 -04:00
|
|
|
, testCompare
|
|
|
|
"normalizing inlines"
|
|
|
|
"docx.normalize.docx"
|
|
|
|
"docx.normalize.native"
|
2014-06-22 01:58:41 -04:00
|
|
|
, testCompare
|
|
|
|
"normalizing inlines deep inside blocks"
|
|
|
|
"docx.deep_normalize.docx"
|
|
|
|
"docx.deep_normalize.native"
|
2014-06-23 15:40:34 -04:00
|
|
|
, testCompare
|
|
|
|
"move trailing spaces outside of formatting"
|
|
|
|
"docx.trailing_spaces_in_formatting.docx"
|
|
|
|
"docx.trailing_spaces_in_formatting.native"
|
2014-06-24 10:33:49 -04:00
|
|
|
, testCompare
|
|
|
|
"inline code (with VerbatimChar style)"
|
|
|
|
"docx.inline_code.docx"
|
|
|
|
"docx.inline_code.native"
|
2014-06-19 19:33:22 -04:00
|
|
|
]
|
2014-06-15 14:55:17 -04:00
|
|
|
, testGroup "blocks"
|
|
|
|
[ testCompare
|
|
|
|
"headers"
|
|
|
|
"docx.headers.docx"
|
|
|
|
"docx.headers.native"
|
|
|
|
, testCompare
|
|
|
|
"lists"
|
|
|
|
"docx.lists.docx"
|
|
|
|
"docx.lists.native"
|
|
|
|
, testCompare
|
|
|
|
"footnotes and endnotes"
|
|
|
|
"docx.notes.docx"
|
|
|
|
"docx.notes.native"
|
|
|
|
, testCompare
|
|
|
|
"blockquotes (parsing indent as blockquote)"
|
|
|
|
"docx.block_quotes.docx"
|
|
|
|
"docx.block_quotes_parse_indent.native"
|
|
|
|
, testCompare
|
|
|
|
"tables"
|
|
|
|
"docx.tables.docx"
|
|
|
|
"docx.tables.native"
|
2014-06-24 10:33:49 -04:00
|
|
|
, testCompare
|
|
|
|
"code block"
|
|
|
|
"docx.codeblock.docx"
|
|
|
|
"docx.codeblock.native"
|
|
|
|
|
2014-06-15 14:55:17 -04:00
|
|
|
]
|
|
|
|
]
|
|
|
|
|