@@ -0,0 +1,41 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+import Test.Hspec.Monadic
3+import Test.Hspec.HUnit ()
4+import Test.Hspec.QuickCheck (prop)
5+import Test.HUnit
6+
7+import qualified Data.Conduit as C
8+import qualified Data.Conduit.List as CL
9+import qualified Data.Conduit.Binary as CB
10+import Control.Monad.Trans.Resource (runResourceT)
11+import System.IO.Unsafe (unsafePerformIO)
12+import Data.Monoid
13+import qualified Data.ByteString as S
14+
15+main :: IO ()
16+main = hspecX $ do
17+ describe "sum" $ do
18+ prop "is idempotent" $ \list ->
19+ (unsafePerformIO $ runResourceT $ CL.fromList list C.$$ CL.fold (+) (0 :: Int))
20+ == sum list
21+ describe "Monoid instance for Source" $ do
22+ it "mappend" $ do
23+ x <- runResourceT $ (CL.fromList [1..5 :: Int] `mappend` CL.fromList [6..10]) C.$$ CL.fold (+) 0
24+ x @?= sum [1..10]
25+ it "mconcat" $ do
26+ x <- runResourceT $ mconcat
27+ [ CL.fromList [1..5 :: Int]
28+ , CL.fromList [6..10]
29+ , CL.fromList [11..20]
30+ ] C.$$ CL.fold (+) 0
31+ x @?= sum [1..20]
32+ describe "file access" $ do
33+ it "read" $ do
34+ bs <- S.readFile "conduit.cabal"
35+ bss <- runResourceT $ CB.sourceFile "conduit.cabal" C.$$ CL.consume
36+ bs @=? S.concat bss
37+ it "write" $ do
38+ runResourceT $ CB.sourceFile "conduit.cabal" C.$$ CB.sinkFile "tmp"
39+ bs1 <- S.readFile "conduit.cabal"
40+ bs2 <- S.readFile "tmp"
41+ bs1 @=? bs2