packages feed

hspec-contrib-0.2.2: test/Test/Hspec/Contrib/LoggingFacadeSpec.hs

{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
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` []