packages feed

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 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 ()