packages feed

mockery-0.2.0: test/Test/Mockery/LoggingSpec.hs

module Test.Mockery.LoggingSpec (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.Mockery.Logging

spec :: Spec
spec = describe "captureLogs" $ do
  let logToIORef :: IORef [LogRecord] -> LogSink
      logToIORef ref record = modifyIORef ref (record :)

  it "returns all log messages of an action" $ do
    (logs, ()) <- captureLogMessages $ do
      Log.trace "this should be captured"
      Log.trace "this should be captured next"
    logs `shouldBe` [ (TRACE, "this should be captured")
                    , (TRACE, "this should be captured next")
                    ]

  it "restores the original log sink" $ do
    ref <- newIORef []
    setLogSink $ logToIORef ref
    _ <- captureLogMessages $ Log.trace "this should be captured"
    Log.trace "this should not be captured"
    readIORef ref `shouldReturn` [LogRecord TRACE Nothing "this should not be captured"]