summaryrefslogtreecommitdiff
path: root/test/Tests/Writers
diff options
context:
space:
mode:
authorJesse Rosenthal <jrosenthal@jhu.edu>2018-01-26 14:23:18 -0500
committerJesse Rosenthal <jrosenthal@jhu.edu>2018-01-27 08:08:25 -0500
commitb3449a84aa19edd3b31e2f49fddb924b54d99df6 (patch)
tree61e1750ce667ac8c5d71d521222935780143b365 /test/Tests/Writers
parent9cf9f1f89d31e8a4a65cbdd419a50b6e4e62c9ab (diff)
Docx writer tests: Use new golden framework
These are based off the reader tests, with some removed (where the reader output was identical, based on different docx inputs). There are still more to be added. In particular, tests for custom-styles need to be added. All golden docx files have been checked in MS Word 2013 (windows). There is no corruption. There is questionable output in the `tables` test: the three tables seemed to be joined. This will be addressed in a future commit, and the golden docx file will be changed.
Diffstat (limited to 'test/Tests/Writers')
-rw-r--r--test/Tests/Writers/Docx.hs240
1 files changed, 113 insertions, 127 deletions
diff --git a/test/Tests/Writers/Docx.hs b/test/Tests/Writers/Docx.hs
index 1537ea85d..57e55e354 100644
--- a/test/Tests/Writers/Docx.hs
+++ b/test/Tests/Writers/Docx.hs
@@ -1,161 +1,147 @@
module Tests.Writers.Docx (tests) where
-import qualified Data.ByteString as BS
-import System.FilePath ((</>))
-import System.IO.Unsafe (unsafePerformIO)
+import Text.Pandoc
import Test.Tasty
-import Tests.Helpers
-import Text.Pandoc.Class (runIOorExplode, setUserDataDir)
-import Text.Pandoc.Definition
-import Text.Pandoc.Options
-import Text.Pandoc.Readers.Docx
-import Text.Pandoc.Readers.Native
-import qualified Text.Pandoc.UTF8 as UTF8
-import Text.Pandoc.Walk
-import Text.Pandoc.Writers.Docx
+import Tests.Writers.OOXML
+import Test.Tasty.HUnit
+import Data.List (isPrefixOf)
-type Options = (WriterOptions, ReaderOptions)
-
-compareOutput :: Options
- -> FilePath
- -> FilePath
- -> IO (Pandoc, Pandoc)
-compareOutput (wopts, ropts) nativeFileIn nativeFileOut = do
- nf <- UTF8.toText <$> BS.readFile nativeFileIn
- nf' <- UTF8.toText <$> BS.readFile nativeFileOut
- runIOorExplode $ do
- setUserDataDir $ Just (".." </> "data")
- roundtripped <- readNative def nf >>=
- writeDocx wopts >>= readDocx ropts
- orig <- readNative def nf'
- return (walk fixImages roundtripped, walk fixImages orig)
-
--- make all image filenames "image", since otherwise round-trip
--- tests fail because of different behavior of Data.Unique in
--- different ghc versions...
-fixImages :: Inline -> Inline
-fixImages (Image attr alt (_,tit)) = Image attr alt ("image",tit)
-fixImages x = x
-
-testCompareWithOptsIO :: Options -> String -> FilePath -> FilePath -> IO TestTree
-testCompareWithOptsIO opts name nativeFileIn nativeFileOut = do
- (dp, np) <- compareOutput opts nativeFileIn nativeFileOut
- return $ test id name (dp, np)
-
-testCompareWithOpts :: Options -> String -> FilePath -> FilePath -> TestTree
-testCompareWithOpts opts name nativeFileIn nativeFileOut =
- unsafePerformIO $ testCompareWithOptsIO opts name nativeFileIn nativeFileOut
-
-roundTripCompareWithOpts :: Options -> String -> FilePath -> TestTree
-roundTripCompareWithOpts opts name nativeFile =
- testCompareWithOpts opts name nativeFile nativeFile
-
--- testCompare :: String -> FilePath -> FilePath -> TestTree
--- testCompare = testCompareWithOpts def
-
-roundTripCompare :: String -> FilePath -> TestTree
-roundTripCompare = roundTripCompareWithOpts def
+-- we add an extra check to make sure that we're not writing in the
+-- toplevel docx directory. We don't want to accidentally overwrite an
+-- Word-generated docx file used to test the reader.
+docxTest :: String -> WriterOptions -> FilePath -> FilePath -> TestTree
+docxTest testName opts nativeFP goldenFP =
+ if "docx/golden/" `isPrefixOf` goldenFP
+ then ooxmlTest writeDocx testName opts nativeFP goldenFP
+ else testCase testName $
+ assertFailure $
+ goldenFP ++ " is not in `test/docx/golden`"
tests :: [TestTree]
tests = [ testGroup "inlines"
- [ roundTripCompare
+ [ docxTest
"font formatting"
- "docx/inline_formatting_writer.native"
- , roundTripCompare
- "font formatting with character styles"
- "docx/char_styles.native"
- , roundTripCompare
+ def
+ "docx/inline_formatting.native"
+ "docx/golden/inline_formatting.docx"
+ , docxTest
"hyperlinks"
- "docx/links_writer.native"
- , roundTripCompare
+ def
+ "docx/links.native"
+ "docx/golden/links.docx"
+ , docxTest
"inline image"
- "docx/image_no_embed_writer.native"
- , roundTripCompare
- "inline image in links"
- "docx/inline_images_writer.native"
- , roundTripCompare
+ def
+ "docx/image_writer_test.native"
+ "docx/golden/image.docx"
+ , docxTest
+ "inline images"
+ def
+ "docx/inline_images_writer_test.native"
+ "docx/golden/inline_images.docx"
+ , docxTest
"handling unicode input"
+ def
"docx/unicode.native"
- , roundTripCompare
- "literal tabs"
- "docx/tabs.native"
- , roundTripCompare
- "normalizing inlines"
- "docx/normalize.native"
- , roundTripCompare
- "normalizing inlines deep inside blocks"
- "docx/deep_normalize.native"
- , roundTripCompare
- "move trailing spaces outside of formatting"
- "docx/trailing_spaces_in_formatting.native"
- , roundTripCompare
- "inline code (with VerbatimChar style)"
+ "docx/golden/unicode.docx"
+ , docxTest
+ "inline code"
+ def
"docx/inline_code.native"
- , roundTripCompare
+ "docx/golden/inline_code.docx"
+ , docxTest
"inline code in subscript and superscript"
+ def
"docx/verbatim_subsuper.native"
+ "docx/golden/verbatim_subsuper.docx"
]
, testGroup "blocks"
- [ roundTripCompare
+ [ docxTest
"headers"
+ def
"docx/headers.native"
- , roundTripCompare
- "headers already having auto identifiers"
- "docx/already_auto_ident.native"
- , roundTripCompare
- "numbered headers automatically made into list"
- "docx/numbered_header.native"
- , roundTripCompare
- "i18n blocks (headers and blockquotes)"
- "docx/i18n_blocks.native"
- -- Continuation does not survive round-trip
- , roundTripCompare
+ "docx/golden/headers.docx"
+ , docxTest
+ "nested anchor spans in header"
+ def
+ "docx/nested_anchors_in_header.native"
+ "docx/golden/nested_anchors_in_header.docx"
+ , docxTest
"lists"
- "docx/lists_writer.native"
- , roundTripCompare
+ def
+ "docx/lists.native"
+ "docx/golden/lists.docx"
+ , docxTest
+ "lists continuing after interruption"
+ def
+ "docx/lists_continuing.native"
+ "docx/golden/lists_continuing.docx"
+ , docxTest
+ "lists restarting after interruption"
+ def
+ "docx/lists_restarting.native"
+ "docx/golden/lists_restarting.docx"
+ , docxTest
"definition lists"
+ def
"docx/definition_list.native"
- , roundTripCompare
- "custom defined lists in styles"
- "docx/german_styled_lists.native"
- , roundTripCompare
+ "docx/golden/definition_list.docx"
+ , docxTest
"footnotes and endnotes"
+ def
"docx/notes.native"
- , roundTripCompare
- "blockquotes (parsing indent as blockquote)"
+ "docx/golden/notes.docx"
+ , docxTest
+ "links in footnotes and endnotes"
+ def
+ "docx/link_in_notes.native"
+ "docx/golden/link_in_notes.docx"
+ , docxTest
+ "blockquotes"
+ def
"docx/block_quotes_parse_indent.native"
- , roundTripCompare
- "hanging indents"
- "docx/hanging_indent.native"
- -- tables headers do not survive round-trip, should look into that
- , roundTripCompare
+ "docx/golden/block_quotes.docx"
+ , docxTest
"tables"
+ def
"docx/tables.native"
- , roundTripCompare
+ "docx/golden/tables.docx"
+ , docxTest
"tables with lists in cells"
+ def
"docx/table_with_list_cell.native"
- , roundTripCompare
+ "docx/golden/table_with_list_cell.docx"
+ , docxTest
+ "tables with one row"
+ def
+ "docx/table_one_row.native"
+ "docx/golden/table_one_row.docx"
+ , docxTest
"code block"
+ def
"docx/codeblock.native"
- , roundTripCompare
- "dropcap paragraphs"
- "docx/drop_cap.native"
+ "docx/golden/codeblock.docx"
]
- , testGroup "metadata"
- [ roundTripCompareWithOpts (def,def{readerStandalone=True})
- "metadata fields"
- "docx/metadata.native"
- , roundTripCompareWithOpts (def,def{readerStandalone=True})
- "stop recording metadata with normal text"
- "docx/metadata_after_normal.native"
+ , testGroup "track changes"
+ [ docxTest
+ "insertion"
+ def
+ "docx/track_changes_insertion_all.native"
+ "docx/golden/track_changes_insertion.docx"
+ , docxTest
+ "deletion"
+ def
+ "docx/track_changes_deletion_all.native"
+ "docx/golden/track_changes_deletion.docx"
+ , docxTest
+ "move text"
+ def
+ "docx/track_changes_move_all.native"
+ "docx/golden/track_changes_move.docx"
+ , docxTest
+ "comments"
+ def
+ "docx/comments.native"
+ "docx/golden/comments.docx"
]
- , testGroup "customized styles"
- [ testCompareWithOpts
- ( def{writerReferenceDoc=Just "docx/custom-style-reference.docx"}
- , def)
- "simple customized blocks and inlines"
- "docx/custom-style-roundtrip-start.native"
- "docx/custom-style-roundtrip-end.native"
- ]
-
]