@@ -5,6 +5,8 @@ module Network.Wai.Test
5 , runSession
5 , runSession
6 -- * Requests
6 -- * Requests
8 , SResponse (..)
10 , SResponse (..)
9 -- * Assertions
11 -- * Assertions
10 , assertStatus
12 , assertStatus
@@ -16,6 +18,7 @@ module Network.Wai.Test
16import Network.Wai
18import Network.Wai
17import qualified Test.HUnit.Base as H
19import qualified Test.HUnit.Base as H
18import Control.Monad.IO.Class (liftIO)
20import Control.Monad.IO.Class (liftIO)
21+import Control.Monad.Trans.Class (lift)
19import Control.Monad.Trans.State (StateT, evalStateT, get, put)
22import Control.Monad.Trans.State (StateT, evalStateT, get, put)
20import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask)
23import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask)
21import Data.Map (Map)
24import Data.Map (Map)
@@ -23,7 +26,7 @@ import qualified Data.Map as Map
23import Data.ByteString (ByteString)
26import Data.ByteString (ByteString)
24import qualified Data.ByteString as S
27import qualified Data.ByteString as S
25import qualified Data.ByteString.Char8 as S8
28import qualified Data.ByteString.Char8 as S8
26−import Data.Enumerator (joinI, consume, ($$))
29+import Data.Enumerator (joinI, consume, ($$), run_, enumList)
27import Blaze.ByteString.Builder.Enumerator (builderToByteString)
30import Blaze.ByteString.Builder.Enumerator (builderToByteString)
28import qualified Data.ByteString.Lazy as L
31import qualified Data.ByteString.Lazy as L
29import qualified Data.ByteString.Lazy.Char8 as L8
32import qualified Data.ByteString.Lazy.Char8 as L8
@@ -40,6 +43,10 @@ initState = ClientState Map.empty
40runSession :: Session a -> Application -> IO a
43runSession :: Session a -> Application -> IO a
41runSession session app = evalStateT (runReaderT session app) initState
44runSession session app = evalStateT (runReaderT session app) initState
46+data SRequest = SRequest
47+ { simpleRequest :: Request
48+ , simpleRequestBody :: L.ByteString
43data SResponse = SResponse
50data SResponse = SResponse
44 { simpleStatus :: Status
51 { simpleStatus :: Status
45 , simpleHeaders :: [(CIByteString, ByteString)]
52 , simpleHeaders :: [(CIByteString, ByteString)]
@@ -47,9 +54,13 @@ data SResponse = SResponse
48 deriving (Show, Eq)
55 deriving (Show, Eq)
49request :: Request -> Session SResponse
56request :: Request -> Session SResponse
50−request req = do
57+request = srequest . flip SRequest L.empty
59+srequest :: SRequest -> Session SResponse
60+srequest (SRequest req bod) = do
51 app <- ask
61 app <- ask
62+ res <- liftIO $ run_ $ enumList 4 (L.toChunks bod) $$ app req
52− sres <- liftIO $ app req >>= runResponse
63+ sres <- liftIO $ runResponse res
53 -- FIXME cookie processing
64 -- FIXME cookie processing
54 return sres
65 return sres