1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
module UnitTests.Distribution.Client.Tar (
tests
) where
import Codec.Archive.Tar
( foldEntries
)
import Codec.Archive.Tar.Entry
( simpleEntry
, toTarPath
)
import Distribution.Client.Tar
( filterEntries
, filterEntriesM
)
import Test.Tasty
import Test.Tasty.HUnit
import qualified Data.ByteString.Lazy as BS
import qualified Data.ByteString.Lazy.Char8 as BS.Char8
import Control.Monad.Writer.Lazy (runWriterT, tell)
import Distribution.Client.Compat.Tar
tests :: [TestTree]
tests = [ testCase "filterEntries" filterTest
, testCase "filterEntriesM" filterMTest
]
filterTest :: Assertion
filterTest = do
let e1 = getFileEntry "file1" "x"
e2 = getFileEntry "file2" "y"
p = (\e -> let str = BS.Char8.unpack $ case entryContent e of
NormalFile dta _ -> dta
_ -> error "Invalid entryContent"
in str /= "y")
assertEqual "Unexpected result for filter" "xz" $
entriesToString $ filterEntries p $ Next e1 $ Next e2 Done
assertEqual "Unexpected result for filter" "z" $
entriesToString $ filterEntries p $ Done
assertEqual "Unexpected result for filter" "xf" $
entriesToString $ filterEntries p $ Next e1 $ Next e2 $ Fail "f"
filterMTest :: Assertion
filterMTest = do
let e1 = getFileEntry "file1" "x"
e2 = getFileEntry "file2" "y"
p = (\e -> let str = BS.Char8.unpack $ case entryContent e of
NormalFile dta _ -> dta
_ -> error "Invalid entryContent"
in tell "t" >> return (str /= "y"))
(r, w) <- runWriterT $ filterEntriesM p $ Next e1 $ Next e2 Done
assertEqual "Unexpected result for filterM" "xz" $ entriesToString r
assertEqual "Unexpected result for filterM w" "tt" w
(r1, w1) <- runWriterT $ filterEntriesM p $ Done
assertEqual "Unexpected result for filterM" "z" $ entriesToString r1
assertEqual "Unexpected result for filterM w" "" w1
(r2, w2) <- runWriterT $ filterEntriesM p $ Next e1 $ Next e2 $ Fail "f"
assertEqual "Unexpected result for filterM" "xf" $ entriesToString r2
assertEqual "Unexpected result for filterM w" "tt" w2
getFileEntry :: FilePath -> [Char] -> Entry
getFileEntry pth dta =
simpleEntry tp $ NormalFile dta' $ BS.length dta'
where tp = case toTarPath False pth of
Right tp' -> tp'
Left e -> error e
dta' = BS.Char8.pack dta
entriesToString :: Entries String -> String
entriesToString =
foldEntries (\e acc -> let str = BS.Char8.unpack $ case entryContent e of
NormalFile dta _ -> dta
_ -> error "Invalid entryContent"
in str ++ acc) "z" id
|