packages feed

epub-metadata-5.2: src/tests/ParseSpine.hs

module ParseSpine
   ( tests )
   where

import Control.Monad.Except
import Control.Monad.IO.Class ( liftIO )
import System.FilePath
import Test.HUnit

import Codec.Epub.Data.Spine
import Codec.Epub.Parse


tests :: Test
tests = TestList
   [ testFull
   , testMinimal
   , testMissingAll
   ]


{- A test containing a couple of spine items
-}
testFull :: Test
testFull = TestCase $ do
   xmlString <- readFile $ "util" </> "resources" </> "epub2-full.opf"
   actual <- runExceptT $ getSpine xmlString
   let expected =
         Right Spine
            { spineToc = "ncx"
            , spineItemrefs = 
               [ SpineItemref {siIdRef = "titlePage", siLinear = Nothing}
               , SpineItemref {siIdRef = "someContent", siLinear = Nothing}
               ]
            }
   assertEqual "some spine items" expected actual


{- Minimal spine, only the spineToc is required
-}
testMinimal :: Test
testMinimal = TestCase $ do
   xmlString <- liftIO $ readFile $ "util" </> "resources" </> "epub2-minimal.opf"
   actual <- runExceptT $ getSpine xmlString
   let expected = Right Spine {spineToc = "ncx", spineItemrefs = []}
   assertEqual "minimal" expected actual


{- Missing any spine info at all
-}
testMissingAll :: Test
testMissingAll = TestCase $ do
   xmlString <- readFile $ "util" </> "resources" </> "epub2-missingAll.opf"
   actual <- runExceptT $ getSpine xmlString
   let expected = Right Spine {spineToc = "", spineItemrefs = []}
   assertEqual "missing all" expected actual