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