packages feed

heatshrink-0.1.0.0: tests/Codec/Compression/Heatshrink/Tests.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}

--------------------------------------------------------------------------------
module Codec.Compression.Heatshrink.Tests (tests) where


--------------------------------------------------------------------------------
import           Codec.Compression.Heatshrink
import qualified Data.ByteString.Lazy as BL
import           System.IO.Unsafe
import           Test.Tasty
import           Test.Tasty.Golden
import           Text.Regex.PCRE.Heavy


--------------------------------------------------------------------------------
tests :: TestTree
tests = testGroup "Codec.Compression.Heatshrink"
        [ testGroup "decoding files" $ unsafePerformIO goldenTests
        ]


--------------------------------------------------------------------------------
decodeFile :: DecodeParams-> FilePath -> FilePath -> IO ()
decodeFile p s t  = do
  c <- BL.readFile s
  u <- decodeWith p c
  BL.writeFile t u


--------------------------------------------------------------------------------
goldenTests :: IO [TestTree]
goldenTests = do
  files <- findByExtension [".golden"] "files"
  let test = map (scan [re|((.*)/(\w+)_w(\d+)l(\d+))\.golden|]) files
  return $ map createTest test


--------------------------------------------------------------------------------
createTest :: [(String, [String])] -> TestTree
createTest [(f, [noext, dir, base, sw, sl])] = goldenVsFile f f dstFile (decodeFile params srcFile dstFile)
    where
      params = DecodeParams 1024 w l
      srcFile = noext ++ ".hex"
      dstFile = noext ++ ".tmp"
      w = read sw :: Int
      l = read sl :: Int