diff --git a/yesod-core/Yesod/Handler.hs b/yesod-core/Yesod/Handler.hs index e8659fb8..23e9a08f 100644 --- a/yesod-core/Yesod/Handler.hs +++ b/yesod-core/Yesod/Handler.hs @@ -119,7 +119,6 @@ import Yesod.Internal import Data.Time (UTCTime) import Control.Exception hiding (Handler, catch, finally) -import qualified Control.Exception as E import Control.Applicative import Control.Monad (liftM, join, MonadPlus) diff --git a/yesod-core/Yesod/Internal/TestApi.hs b/yesod-core/Yesod/Internal/TestApi.hs index 55090ae5..8ff18528 100644 --- a/yesod-core/Yesod/Internal/TestApi.hs +++ b/yesod-core/Yesod/Internal/TestApi.hs @@ -11,7 +11,7 @@ module Yesod.Internal.TestApi import Yesod.Internal.Request (randomString, parseWaiRequest') import Control.Exception (Exception, catch) -import Data.Enumerator (Iteratee (..)) +import Data.Enumerator (Iteratee (..), Step (..)) import Data.ByteString (ByteString) import Prelude hiding (catch) @@ -19,4 +19,9 @@ catchIter :: Exception e => Iteratee ByteString IO a -> (e -> Iteratee ByteString IO a) -> Iteratee ByteString IO a -catchIter (Iteratee mstep) f = Iteratee $ mstep `catch` (runIteratee . f) +catchIter (Iteratee mstep) f = Iteratee $ do + step <- mstep `catch` (runIteratee . f) + return $ case step of + Continue k -> Continue $ \s -> catchIter (k s) f + Yield b s -> Yield b s + Error e -> Error e diff --git a/yesod-core/test/Test/ErrorHandling.hs b/yesod-core/test/Test/ErrorHandling.hs index 7c853697..51dd8c67 100644 --- a/yesod-core/test/Test/ErrorHandling.hs +++ b/yesod-core/test/Test/ErrorHandling.hs @@ -100,7 +100,7 @@ caseAfter = runner $ do , simpleRequestBody = content } assertStatus 500 res - assertBodyContains "There was an error 2.71828" res + assertBodyContains "bin12345" res caseCatchIter :: IO () caseCatchIter = E.run_ $ E.enumList 8 (replicate 1000 "foo") E.$$ flip catchIter ignorer $ do diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index e3d3bbaa..e97a16c2 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -121,6 +121,7 @@ test-suite runtests , random ,HUnit ,QuickCheck >= 2 && < 3 + , enumerator ghc-options: -Wall source-repository head