hspec-contrib 0.2.0 → 0.2.1
raw patch · 7 files changed
+78/−8 lines, 7 filesdep +logging-facade
Dependencies added: logging-facade
Files
- LICENSE +1/−1
- hspec-contrib.cabal +7/−2
- src/Test/Hspec/Contrib/LoggingFacade.hs +25/−0
- test/Helper.hs +11/−0
- test/Test/Hspec/Contrib/HUnitSpec.hs +1/−3
- test/Test/Hspec/Contrib/LoggingFacadeSpec.hs +32/−0
- test/Test/Hspec/Contrib/RetrySpec.hs +1/−2
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2011-2014 Simon Hengel <sol@typeful.net>+Copyright (c) 2011-2015 Simon Hengel <sol@typeful.net> Copyright (c) 2011-2012 Trystan Spangler <trystan.s@comcast.net> Copyright (c) 2011-2011 Greg Weber <greg@gregweber.info>
hspec-contrib.cabal view
@@ -1,8 +1,8 @@ name: hspec-contrib-version: 0.2.0+version: 0.2.1 license: MIT license-file: LICENSE-copyright: (c) 2011-2014 Simon Hengel,+copyright: (c) 2011-2015 Simon Hengel, (c) 2014 Junji Hashimoto maintainer: Simon Hengel <sol@typeful.net>@@ -29,9 +29,11 @@ base == 4.* , hspec-core , HUnit+ , logging-facade exposed-modules: Test.Hspec.Contrib.Retry Test.Hspec.Contrib.HUnit+ Test.Hspec.Contrib.LoggingFacade other-modules: default-language: Haskell2010 @@ -43,14 +45,17 @@ main-is: Spec.hs other-modules:+ Helper Test.Hspec.Contrib.RetrySpec Test.Hspec.Contrib.HUnitSpec+ Test.Hspec.Contrib.LoggingFacadeSpec ghc-options: -Wall build-depends: base == 4.* , hspec-core , HUnit+ , logging-facade , hspec-contrib , hspec
+ src/Test/Hspec/Contrib/LoggingFacade.hs view
@@ -0,0 +1,25 @@+module Test.Hspec.Contrib.LoggingFacade (+ captureLogs+) where++import Control.Exception+import Data.IORef+import System.Logging.Facade.Types+import System.Logging.Facade.Sink++-- | Capture all logs produced by an IO action.+-- Logs are kept in memory.+captureLogs :: IO a -> IO ([LogRecord], a)+captureLogs action = bracket enter exit act+ where+ logToRef ref record = atomicModifyIORef' ref $ \logs -> (record : logs, ())+ enter = do+ oldSink <- getLogSink+ ref <- newIORef []+ setLogSink $ logToRef ref+ return (oldSink, ref)+ exit (oldSink, _) = setLogSink oldSink+ act (_, ref) = do+ val <- action+ logs <- readIORef ref+ return (reverse logs, val)
+ test/Helper.hs view
@@ -0,0 +1,11 @@+module Helper (+ module Test.Hspec+, module Test.QuickCheck+, module Control.Applicative+, module Data.IORef+) where++import Test.Hspec+import Test.QuickCheck+import Control.Applicative+import Data.IORef
test/Test/Hspec/Contrib/HUnitSpec.hs view
@@ -1,9 +1,7 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.Hspec.Contrib.HUnitSpec (main, spec) where -import Test.Hspec-import Test.QuickCheck-import Control.Applicative+import Helper import Test.Hspec.Core.Spec import Test.Hspec.Contrib.HUnit
+ test/Test/Hspec/Contrib/LoggingFacadeSpec.hs view
@@ -0,0 +1,32 @@+module Test.Hspec.Contrib.LoggingFacadeSpec (main, spec) where++import Test.Hspec+import Data.IORef+import System.Logging.Facade.Types+import System.Logging.Facade.Sink+import System.Logging.Facade as Log++import Test.Hspec.Contrib.LoggingFacade++main :: IO ()+main = hspec spec++spec :: Spec+spec = describe "Hspec.Contrib.LoggingFacade" $ do+ describe "captureLogs" $ do+ let logToIORef :: IORef [LogRecord] -> LogSink+ logToIORef ref record = modifyIORef ref (record :)++ it "returns all logs of an action" $ do+ (logs, ()) <- captureLogs $ do+ Log.trace "this should be captured"+ Log.trace "this should be captured next"+ logs `shouldBe` [ LogRecord TRACE Nothing "this should be captured"+ , LogRecord TRACE Nothing "this should be captured next"+ ]++ it "prevents logs from going to the log sink" $ do+ ref <- newIORef []+ setLogSink $ logToIORef ref+ _ <- captureLogs $ Log.trace "this should be captured"+ readIORef ref `shouldReturn` []
test/Test/Hspec/Contrib/RetrySpec.hs view
@@ -1,8 +1,7 @@ module Test.Hspec.Contrib.RetrySpec (main, spec) where -import Data.IORef+import Helper -import Test.Hspec import Test.Hspec.Contrib.Retry main :: IO ()