packages feed

advent-of-code-api-0.1.2.0: test/Spec.hs

{-# LANGUAGE ViewPatterns #-}

import           Advent
import           Control.Monad
import           Data.List
import           System.Directory
import           System.Exit
import           System.FilePath
import           Test.HUnit
import           Text.Read        (readMaybe)
import qualified Data.Text        as T
import qualified Data.Text.IO     as T

fileTest :: FilePath -> IO Test
fileTest fp = do
    ls <- T.lines <$> T.readFile ("test-data" </> fp)
    (T.strip->x, T.unlines->xs) <- maybe (fail "Empty test file") pure $
                                      uncons ls

    r <- maybe (fail "No parse expected result") pure $
            readMaybe (T.unpack x)

    pure . TestLabel fp $ r ~=? parseSubmitRes xs

main :: IO ()
main = do
    tests <- fmap TestList
           . mapM fileTest
         =<< listDirectory "test-data"
    c <- runTestTT tests
    unless (failures c == 0) $
      exitFailure