1
module Test.CerealConduit (tests) where
3
import Control.Monad.Identity
5
import qualified Data.Conduit as C
6
import Data.Conduit.Cereal
7
import Data.Conduit.List
9
import qualified Data.ByteString as BS
10
import Test.Framework.Providers.HUnit
15
sinktest1 = TestCase (assertEqual "Handles starting with empty bytestring"
17
(runIdentity $ (sourceList [BS.pack [], BS.pack [1]]) C.$$ (sinkGet getWord8)))
20
sinktest2 = TestCase (assertEqual "Handles empty bytestring in middle"
22
(runIdentity $ (sourceList [BS.pack [1], BS.pack [], BS.pack [3]]) C.$$ (sinkGet (do
28
sinktest3 = TestCase (assertBool "Handles no data"
29
(case (runIdentity $ (sourceList []) C.$$ (sinkGet getWord8)) of
34
sinktest4 = TestCase (assertEqual "Consumes no data"
36
(runIdentity $ (sourceList [BS.pack [1]]) C.$$ (sinkGet $ return ())))
38
twoItemGet :: Get Word8
45
conduittest1 = TestCase (assertEqual "Handles starting with empty bytestring"
47
(runIdentity $ (sourceList [BS.pack [], BS.pack [1]]) C.$= conduitGet twoItemGet C.$$ consume))
50
conduittest2 = TestCase (assertEqual "Works when the get is split across items"
52
(runIdentity $ (sourceList [BS.pack [1], BS.pack [2]]) C.$= conduitGet twoItemGet C.$$ consume))
55
conduittest3 = TestCase (assertEqual "Works when empty bytestring in middle of get"
57
(runIdentity $ (sourceList [BS.pack [1], BS.pack [], BS.pack [2]]) C.$= conduitGet twoItemGet C.$$ consume))
60
conduittest4 = TestCase (assertEqual "Works when empty bytestring at end of get"
62
(runIdentity $ (sourceList [BS.pack [1, 2], BS.pack [], BS.pack [3, 4]]) C.$= conduitGet twoItemGet C.$$ consume))
65
conduittest5 = TestCase (assertEqual "Works when multiple gets are in an item"
67
(runIdentity $ (sourceList [BS.pack [1, 2, 3, 4]]) C.$= conduitGet twoItemGet C.$$ consume))
70
conduittest6 = TestCase (assertEqual "Works with leftovers"
72
(runIdentity $ (sourceList [BS.pack [1, 2, 3]]) C.$= conduitGet twoItemGet C.$$ consume))
74
sinktests = TestList [sinktest1, sinktest2, sinktest3, sinktest4]
76
conduittests = TestList [conduittest1, conduittest2, conduittest3, conduittest4, conduittest5, conduittest6]
78
hunittests = TestList [sinktests, conduittests]
80
tests = hUnitTestToTests hunittests
83
counts <- runTestTT hunittests
84
if errors counts == 0 && failures counts == 0