packages feed

micrologger-0.3.0.0: test/LogSpec.hs

{-# LANGUAGE OverloadedStrings  #-}
module LogSpec where

import           Control.Monad    (forM_)
import           Data.Aeson       (Value(..), toJSON)
import           Data.Monoid
import qualified Data.IORef       as IORef
import qualified Data.Text.Lazy   as T
import           Test.Hspec

import           LuminescentDreams.Logger

writeBuffer :: IORef.IORef [T.Text] -> T.Text -> IO ()
writeBuffer buffer text = IORef.modifyIORef' buffer (\lst -> lst <> [text])

basicLogger :: Spec
basicLogger = describe "demonstrate IO output" $ do
  it "outputs in the standard format" $ do
    logRef <- IORef.newIORef []
    let l = Logger (writeBuffer logRef) LogDebug
    logMsgStd l LogInfo [("name", "value")] "message"
    logMsgStd l LogInfo [("name", "value")] "message2"
    IORef.readIORef logRef >>= flip forM_ (putStrLn . T.unpack)


jsonLogger :: Spec
jsonLogger = describe "demonstrate the JSON logger with IO output" $ do
  it "outputs in the JSON format" $ do
    logRef <- IORef.newIORef []
    let l = Logger (writeBuffer logRef) LogDebug
    logMsgJs l LogInfo [("name", String "value"), ("timing", toJSON (0.5 :: Float)), ("msg", String "message")]
    logMsgJs l LogInfo [("name", String "value"), ("timing", toJSON (0.5 :: Float)), ("msg", String "message2")]
    IORef.readIORef logRef >>= flip forM_ (putStrLn . T.unpack)


spec :: Spec
spec = do
  basicLogger
  jsonLogger