|
Packit Service |
d2f85f |
module Tests.Readers.Odt (tests) where
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
import Control.Monad (liftM)
|
|
Packit Service |
d2f85f |
import qualified Data.ByteString as BS
|
|
Packit Service |
d2f85f |
import qualified Data.ByteString.Lazy as B
|
|
Packit Service |
d2f85f |
import qualified Data.Map as M
|
|
Packit Service |
d2f85f |
import Data.Text (unpack)
|
|
Packit Service |
d2f85f |
import System.IO.Unsafe (unsafePerformIO)
|
|
Packit Service |
d2f85f |
import Test.Tasty
|
|
Packit Service |
d2f85f |
import Tests.Helpers
|
|
Packit Service |
d2f85f |
import Text.Pandoc
|
|
Packit Service |
d2f85f |
import qualified Text.Pandoc.UTF8 as UTF8
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
defopts :: ReaderOptions
|
|
Packit Service |
d2f85f |
defopts = def{ readerExtensions = getDefaultExtensions "odt" }
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
tests :: [TestTree]
|
|
Packit Service |
d2f85f |
tests = testsComparingToMarkdown ++ testsComparingToNative
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
testsComparingToMarkdown :: [TestTree]
|
|
Packit Service |
d2f85f |
testsComparingToMarkdown = map nameToTest namesOfTestsComparingToMarkdown
|
|
Packit Service |
d2f85f |
where nameToTest name = createTest
|
|
Packit Service |
d2f85f |
compareOdtToMarkdown
|
|
Packit Service |
d2f85f |
name
|
|
Packit Service |
d2f85f |
(toOdtPath name)
|
|
Packit Service |
d2f85f |
(toMarkdownPath name)
|
|
Packit Service |
d2f85f |
toOdtPath name = "odt/odt/" ++ name ++ ".odt"
|
|
Packit Service |
d2f85f |
toMarkdownPath name = "odt/markdown/" ++ name ++ ".md"
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
testsComparingToNative :: [TestTree]
|
|
Packit Service |
d2f85f |
testsComparingToNative = map nameToTest namesOfTestsComparingToNative
|
|
Packit Service |
d2f85f |
where nameToTest name = createTest
|
|
Packit Service |
d2f85f |
compareOdtToNative
|
|
Packit Service |
d2f85f |
name
|
|
Packit Service |
d2f85f |
(toOdtPath name)
|
|
Packit Service |
d2f85f |
(toNativePath name)
|
|
Packit Service |
d2f85f |
toOdtPath name = "odt/odt/" ++ name ++ ".odt"
|
|
Packit Service |
d2f85f |
toNativePath name = "odt/native/" ++ name ++ ".native"
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
newtype NoNormPandoc = NoNormPandoc {unNoNorm :: Pandoc}
|
|
Packit Service |
d2f85f |
deriving ( Show )
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
instance ToString NoNormPandoc where
|
|
Packit Service |
d2f85f |
toString d = unpack $
|
|
Packit Service |
d2f85f |
purely (writeNative def{ writerTemplate = s }) $ toPandoc d
|
|
Packit Service |
d2f85f |
where s = case d of
|
|
Packit Service |
d2f85f |
NoNormPandoc (Pandoc (Meta m) _)
|
|
Packit Service |
d2f85f |
| M.null m -> Nothing
|
|
Packit Service |
d2f85f |
| otherwise -> Just "" -- need this for Meta output
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
instance ToPandoc NoNormPandoc where
|
|
Packit Service |
d2f85f |
toPandoc = unNoNorm
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
getNoNormVia :: (a -> Pandoc) -> String -> Either PandocError a -> NoNormPandoc
|
|
Packit Service |
d2f85f |
getNoNormVia _ readerName (Left _) = error (readerName ++ " reader failed")
|
|
Packit Service |
d2f85f |
getNoNormVia f _ (Right a) = NoNormPandoc (f a)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
type TestCreator = ReaderOptions
|
|
Packit Service |
d2f85f |
-> FilePath -> FilePath
|
|
Packit Service |
d2f85f |
-> IO (NoNormPandoc, NoNormPandoc)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
compareOdtToNative :: TestCreator
|
|
Packit Service |
d2f85f |
compareOdtToNative opts odtPath nativePath = do
|
|
Packit Service |
d2f85f |
nativeFile <- UTF8.toText <$> BS.readFile nativePath
|
|
Packit Service |
d2f85f |
odtFile <- B.readFile odtPath
|
|
Packit Service |
d2f85f |
native <- getNoNormVia id "native" <$> runIO (readNative def nativeFile)
|
|
Packit Service |
d2f85f |
odt <- getNoNormVia id "odt" <$> runIO (readOdt opts odtFile)
|
|
Packit Service |
d2f85f |
return (odt,native)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
compareOdtToMarkdown :: TestCreator
|
|
Packit Service |
d2f85f |
compareOdtToMarkdown opts odtPath markdownPath = do
|
|
Packit Service |
d2f85f |
markdownFile <- UTF8.toText <$> BS.readFile markdownPath
|
|
Packit Service |
d2f85f |
odtFile <- B.readFile odtPath
|
|
Packit Service |
d2f85f |
markdown <- getNoNormVia id "markdown" <$>
|
|
Packit Service |
d2f85f |
runIO (readMarkdown def{ readerExtensions = pandocExtensions }
|
|
Packit Service |
d2f85f |
markdownFile)
|
|
Packit Service |
d2f85f |
odt <- getNoNormVia id "odt" <$> runIO (readOdt opts odtFile)
|
|
Packit Service |
d2f85f |
return (odt,markdown)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
createTest :: TestCreator
|
|
Packit Service |
d2f85f |
-> TestName
|
|
Packit Service |
d2f85f |
-> FilePath -> FilePath
|
|
Packit Service |
d2f85f |
-> TestTree
|
|
Packit Service |
d2f85f |
createTest creator name path1 path2 =
|
|
Packit Service |
d2f85f |
unsafePerformIO $ liftM (test id name) (creator defopts path1 path2)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
{-
|
|
Packit Service |
d2f85f |
--
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
getMedia :: FilePath -> FilePath -> IO (Maybe B.ByteString)
|
|
Packit Service |
d2f85f |
getMedia archivePath mediaPath = do
|
|
Packit Service |
d2f85f |
zf <- B.readFile archivePath >>= return . toArchive
|
|
Packit Service |
d2f85f |
return $ findEntryByPath ("Pictures/" ++ mediaPath) zf >>= (Just . fromEntry)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
compareMediaPathIO :: FilePath -> MediaBag -> FilePath -> IO Bool
|
|
Packit Service |
d2f85f |
compareMediaPathIO mediaPath mediaBag odtPath = do
|
|
Packit Service |
d2f85f |
odtMedia <- getMedia odtPath mediaPath
|
|
Packit Service |
d2f85f |
let mbBS = case lookupMedia mediaPath mediaBag of
|
|
Packit Service |
d2f85f |
Just (_, bs) -> bs
|
|
Packit Service |
d2f85f |
Nothing -> error ("couldn't find " ++
|
|
Packit Service |
d2f85f |
mediaPath ++
|
|
Packit Service |
d2f85f |
" in media bag")
|
|
Packit Service |
d2f85f |
odtBS = case odtMedia of
|
|
Packit Service |
d2f85f |
Just bs -> bs
|
|
Packit Service |
d2f85f |
Nothing -> error ("couldn't find " ++
|
|
Packit Service |
d2f85f |
mediaPath ++
|
|
Packit Service |
d2f85f |
" in media bag")
|
|
Packit Service |
d2f85f |
return $ mbBS == odtBS
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
compareMediaBagIO :: FilePath -> IO Bool
|
|
Packit Service |
d2f85f |
compareMediaBagIO odtFile = do
|
|
Packit Service |
d2f85f |
df <- B.readFile odtFile
|
|
Packit Service |
d2f85f |
let (_, mb) = readOdt def df
|
|
Packit Service |
d2f85f |
bools <- mapM
|
|
Packit Service |
d2f85f |
(\(fp, _, _) -> compareMediaPathIO fp mb odtFile)
|
|
Packit Service |
d2f85f |
(mediaDirectory mb)
|
|
Packit Service |
d2f85f |
return $ and bools
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
testMediaBagIO :: String -> FilePath -> IO TestTree
|
|
Packit Service |
d2f85f |
testMediaBagIO name odtFile = do
|
|
Packit Service |
d2f85f |
outcome <- compareMediaBagIO odtFile
|
|
Packit Service |
d2f85f |
return $ testCase name (assertBool
|
|
Packit Service |
d2f85f |
("Media didn't match media bag in file " ++ odtFile)
|
|
Packit Service |
d2f85f |
outcome)
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
testMediaBag :: String -> FilePath -> TestTree
|
|
Packit Service |
d2f85f |
testMediaBag name odtFile = buildTest $ testMediaBagIO name odtFile
|
|
Packit Service |
d2f85f |
-}
|
|
Packit Service |
d2f85f |
--
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
namesOfTestsComparingToMarkdown :: [ String ]
|
|
Packit Service |
d2f85f |
namesOfTestsComparingToMarkdown = [ "bold"
|
|
Packit Service |
d2f85f |
-- , "citation"
|
|
Packit Service |
d2f85f |
, "endnote"
|
|
Packit Service |
d2f85f |
, "externalLink"
|
|
Packit Service |
d2f85f |
, "footnote"
|
|
Packit Service |
d2f85f |
, "headers"
|
|
Packit Service |
d2f85f |
-- , "horizontalRule"
|
|
Packit Service |
d2f85f |
, "italic"
|
|
Packit Service |
d2f85f |
-- , "listBlocks"
|
|
Packit Service |
d2f85f |
, "paragraph"
|
|
Packit Service |
d2f85f |
, "strikeout"
|
|
Packit Service |
d2f85f |
-- , "trackedChanges"
|
|
Packit Service |
d2f85f |
, "underlined"
|
|
Packit Service |
d2f85f |
]
|
|
Packit Service |
d2f85f |
|
|
Packit Service |
d2f85f |
namesOfTestsComparingToNative :: [ String ]
|
|
Packit Service |
d2f85f |
namesOfTestsComparingToNative = [ "blockquote"
|
|
Packit Service |
d2f85f |
, "image"
|
|
Packit Service |
d2f85f |
, "imageIndex"
|
|
Packit Service |
d2f85f |
, "imageWithCaption"
|
|
Packit Service |
d2f85f |
, "inlinedCode"
|
|
Packit Service |
d2f85f |
, "orderedListMixed"
|
|
Packit Service |
d2f85f |
, "orderedListRoman"
|
|
Packit Service |
d2f85f |
, "orderedListSimple"
|
|
Packit Service |
d2f85f |
, "referenceToChapter"
|
|
Packit Service |
d2f85f |
, "referenceToListItem"
|
|
Packit Service |
d2f85f |
, "referenceToText"
|
|
Packit Service |
d2f85f |
, "simpleTable"
|
|
Packit Service |
d2f85f |
, "simpleTableWithCaption"
|
|
Packit Service |
d2f85f |
-- , "table"
|
|
Packit Service |
d2f85f |
, "textMixedStyles"
|
|
Packit Service |
d2f85f |
, "tableWithContents"
|
|
Packit Service |
d2f85f |
, "unicode"
|
|
Packit Service |
d2f85f |
, "unorderedList"
|
|
Packit Service |
d2f85f |
]
|