packages feed

epub-metadata-5.0: src/tests/ParseManifest.hs

module ParseManifest
   ( tests )
   where

import Control.Monad.Except
import System.FilePath
import Test.HUnit

import Codec.Epub.Data.Manifest
import Codec.Epub.Parse


tests :: Test
tests = TestList
   [ testSeveral
   , testMissing
   ]


{- A fairly comprehensive test containing several manifest items
-}
testSeveral :: Test
testSeveral = TestCase $ do
   xmlString <- readFile $ "util" </> "resources" </> "epub2-full.opf"
   actual <- runExceptT $ getManifest xmlString
   let expected =
         Right $ Manifest [ ManifestItem 
                  { mfiId = "ncx"
                  , mfiHref = "toc.ncx"
                  , mfiMediaType = "application/x-dtbncx+xml"
                  }
               , ManifestItem 
                  { mfiId = "titlePage"
                  , mfiHref = "content/titlePage.html"
                  , mfiMediaType = "application/xhtml+xml"
                  }
               , ManifestItem 
                  { mfiId = "someContent"
                  , mfiHref = "content/someContent.html"
                  , mfiMediaType = "application/xhtml+xml"
                  }
               ]
   assertEqual "several manifest items" expected actual


{- Test data devoid of any manifest items
-}
testMissing :: Test
testMissing = TestCase $ do
   xmlString <- readFile $ "util" </> "resources" </> "epub2-missingAll.opf"
   actual <- runExceptT $ getManifest xmlString
   let expected =
         Right $ Manifest []
   assertEqual "missing entirely" expected actual