packages feed

hscdio-0.1.0.0: test/Test/Libcdio/Upstream/Foreign/Pregap.hs

{-|
Description:    

Copyright:      (c) 2019-2020 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      experimental
Portability:    portable
-}
module Test.Libcdio.Upstream.Foreign.Pregap
    ( tests
    , gaps
    ) where


import qualified Test.HUnit as U
import Test.HUnit ( (@=?), (~:) )

import qualified Control.Monad as M

import qualified System.Directory as D

import Foreign.Libcdio.Device
import Foreign.Libcdio.Track
import Foreign.Libcdio.Types

import Test.Libcdio.Upstream.Foreign.Common


tests :: U.Test
tests = "Foreign.Libcdio.Test.Pregap" ~: map ((\f (a,b,c)->f a b c) checkGap) gaps

gaps :: [(DriverId, FilePath, [(Track, Maybe Lsn)])]
gaps =
    [ (DriverCdrDao, "t2.toc", [(1, Just 4425), (2, Nothing)])
    , (DriverBinCue, "p1.cue", [(1, Just 0), (2, Just 150), (3, Nothing)])
    ] ++
    [ (DriverNrg, "p1.nrg", [(2, Just 225), (3, Nothing)])
    | haveDriver DriverNrg
    ]

checkGap :: DriverId -> FilePath -> [(Track, Maybe Lsn)] -> U.Assertion
checkGap d s gs
    | haveDriver d = do
        c <- D.withCurrentDirectory dataDir $ cdioOpen (Just s) d
        cdio <- case c of
            Nothing -> U.assertFailure $ "Can't open the disc image '" ++ s ++ "'"
            Just c' -> return c'
        
        M.forM_ gs $ \(t, g) -> do
            p <- pregapLsn cdio t
            g @=? p
    | otherwise = return ()