@@ -5,7 +5,10 @@ import Text.Pandoc.Readers.Native
5import Text.Pandoc.Definition
5import Text.Pandoc.Definition
6import Tests.Helpers
6import Tests.Helpers
7import Test.Framework
7import Test.Framework
8+import qualified Data.ByteString as BS
8import qualified Data.ByteString.Lazy as B
9import qualified Data.ByteString.Lazy as B
10+import qualified Data.ByteString.Char8 as B8
11+import qualified Data.ByteString.Base64 as B64
9import Text.Pandoc.Readers.Docx
12import Text.Pandoc.Readers.Docx
10import Text.Pandoc.Writers.Native (writeNative)
13import Text.Pandoc.Writers.Native (writeNative)
11import qualified Data.Map as M
14import qualified Data.Map as M
@@ -52,6 +55,22 @@ testCompareWithOpts opts name docxFile nativeFile =
52testCompare :: String -> FilePath -> FilePath -> Test
55testCompare :: String -> FilePath -> FilePath -> Test
53testCompare = testCompareWithOpts def
56testCompare = testCompareWithOpts def
58+testCompareMediaIO :: String -> FilePath -> FilePath -> FilePath -> IO Test
59+testCompareMediaIO name docxFile mediaPath mediaFile = do
60+ df <- B.readFile docxFile
61+ mf <- B.readFile mediaFile
62+ let (_, mb) = readDocx def df
63+ dBytes = case M.lookup mediaPath mb of
65+ Nothing -> error "Media file not found"
66+ d64 = B8.unpack $ B64.encode $ BS.concat $ B.toChunks dBytes
67+ m64 = B8.unpack $ B64.encode $ BS.concat $ B.toChunks mf
68+ return $ test id name (d64, m64)
70+testCompareMedia :: String -> FilePath -> FilePath -> FilePath -> Test
71+testCompareMedia name docxFile mediaPath mediaFile =
72+ buildTest $ testCompareMediaIO name docxFile mediaPath mediaFile
56tests :: [Test]
75tests :: [Test]
57tests = [ testGroup "inlines"
76tests = [ testGroup "inlines"
@@ -165,6 +184,13 @@ tests = [ testGroup "inlines"
165 "docx.track_changes_deletion.docx"
184 "docx.track_changes_deletion.docx"
166 "docx.track_changes_deletion_all.native"
185 "docx.track_changes_deletion_all.native"
168 , testGroup "metadata"
194 , testGroup "metadata"
169 [ testCompareWithOpts def{readerStandalone=True}
195 [ testCompareWithOpts def{readerStandalone=True}
170 "metadata fields"
196 "metadata fields"