packages feed

rio-0.0.2.0: test/RIO/LoggerSpec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module RIO.LoggerSpec (spec) where

import Test.Hspec
import RIO
import Data.ByteString.Builder (toLazyByteString)

spec :: Spec
spec = do
  it "sanity" $ do
    ref <- newIORef mempty
    let options = LogOptions
          { logMinLevel = LevelInfo
          , logVerboseFormat = False
          , logTerminal = True
          , logUseTime = False
          , logUseColor = False
          , logSend = \builder -> modifyIORef ref (<> builder)
          }
    withStickyLogger options $ \lf -> runRIO lf $ do
      logDebug "should not appear"
      logInfo "should appear"
    builder <- readIORef ref
    toLazyByteString builder `shouldBe` "should appear\n"
  it "sticky" $ do
    ref <- newIORef mempty
    let options = LogOptions
          { logMinLevel = LevelInfo
          , logVerboseFormat = False
          , logTerminal = True
          , logUseTime = False
          , logUseColor = False
          , logSend = \builder -> modifyIORef ref (<> builder)
          }
    withStickyLogger options $ \lf -> runRIO lf $ do
      logSticky "ABC"
      logDebug "should not appear"
      logInfo "should appear"
      logStickyDone "XYZ"
    builder <- readIORef ref
    toLazyByteString builder `shouldBe` "ABC\b\b\b   \b\b\bshould appear\nABC\b\b\b   \b\b\bXYZ\n"