on master help sign in
Test suite
commit1f5d6ed95bdfbebc080478292f757a8086f011be authorMichael <michael@snoyman.com> dateFri 9 Dec 2011, 12:00 (15 years ago) parent019375e
3 files changed+66
conduit/Data/Conduit/List.hs+11 conduit/conduit.cabal+14 conduit/test/main.hs+41
conduit/Data/Conduit/List.hs+11
@@ -6,6 +6,7 @@ module Data.Conduit.List
66 , map
77 , concatMap
88 , head
9+ , consume
910 ) where
1011
1112import qualified Prelude
@@ -68,3 +69,13 @@ map f a = return $ ConduitResult [] $ fmap f a
6869concatMap :: Monad m => (a -> [b]) -> Conduit a m b
6970concatMap _ EOF = return $ ConduitResult [] EOF
7071concatMap f (Chunks l) = return $ ConduitResult [] $ Chunks $ Prelude.concatMap f l
72+
73+consume :: MonadBaseControl IO m => Sink a m [a]
74+consume = Sink $ do
75+ ifront <- liftBase $ I.newIORef id
76+ return $ SinkData $ go ifront
77+ where
78+ go ifront EOF = SinkResult [] . Just . ($ []) <$> liftBase (I.readIORef ifront)
79+ go ifront (Chunks cs) = do
80+ liftBase $ I.atomicModifyIORef ifront $ \front -> (front . (cs ++), ())
81+ return $ SinkResult [] Nothing
conduit/conduit.cabal+14
@@ -10,6 +10,7 @@ Category: Data
1010Build-type: Simple
1111Cabal-version: >=1.8
1212Homepage: http://github.com/yesodweb/wai
13+extra-source-files: test/main.hs
1314
1415Library
1516 Exposed-modules: Data.Conduit
@@ -25,6 +26,19 @@ Library
2526 , system-fileio >= 0.3.3 && < 0.4
2627 , system-filepath >= 0.4.3 && < 0.5
2728 , bytestring >= 0.9
29+ ghc-options: -Wall
30+
31+test-suite test
32+ hs-source-dirs: test
33+ main-is: main.hs
34+ type: exitcode-stdio-1.0
35+ cpp-options: -DTEST
36+ build-depends: conduit
37+ , base
38+ , hspec
39+ , HUnit
40+ , QuickCheck
41+ ghc-options: -Wall
2842
2943source-repository head
3044 type: git
conduit/test/main.hsnew file+41
@@ -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