packages feed

hscdio-0.1.0.0: test/Test/Libcdio/Unit/Foreign/RevolutionDays.hs

{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}

{-|
Description:    

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

Stability:      experimental
Portability:    portable

The CDTEXT file used in this module comes via Pigeon at
<https://pigeonsnest.co.uk/stuff/cdtext.html> (warning for a /lot/ of
swearing).  The encoding was later manually set to ASCII.
-}
module Test.Libcdio.Unit.Foreign.RevolutionDays (tests) where


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

import qualified Data.ByteString as BS
import qualified Data.Maybe as Y

import Foreign.Libcdio.CdText

import Test.Libcdio.Unit.Common


testFile :: FilePath
testFile = dataFile "revolution-days.cdtext"


tests :: U.Test
tests = "Foreign.Libcdio.Test.RevolutionDays" ~: U.TestList
    [ parse
    ]

parse :: U.Test
parse = "Binary CDTEXT is read properly" ~: U.TestCase $ do
    bs <- BS.readFile testFile
    x' <- cdTextDataInit bs

    Y.isJust x' @? "Failed to read binary CdText"
    let Just x = x'

    t1 <- firstTrack x
    t1 @?= Just 1

    tl <- lastTrack x
    tl @?= Just (fromIntegral $ length titles)

    t <- cdTextGet x Title Nothing
    t @?= Just "REVOLUTION DAYS"

    p <- cdTextGet x Performer Nothing
    p @?= Just "BARCLAY JAMES HARVEST FEATURING LES HOLROYD"

    ts <- mapM (cdTextGet x Title . Just . fromIntegral) [1 .. length titles]
    ts @?= titles

titles :: [Maybe String]
titles = map Just
    [ "IT'S MY LIFE"
    , "MISSING YOU"
    , "THAT WAS THEN... THIS IS NOW"
    , "PRELUDE"
    , "JANUARY MORNING"
    , "LOVE ON THE LINE"
    , "QUIERO EL SOL"
    , "TOTALLY COOL"
    , "LIFE IS FOR LIVING"
    , "SLEEPY SUNDAY"
    , "REVOLUTION DAY"
    , "MARLENE (from the BERLIN SUITE)"
    ]