micrologger-0.5.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 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 "test" []
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 "test" []
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)
loggerTypes :: Spec
loggerTypes = describe "verify that the built-in logger types work" $ do
it "outputs to stdout" $ pendingWith "how does one even verify this?"
it "outputs to a file buffer" $ do
logRef <- IORef.newIORef T.empty
withLogger (Buffer logRef LogInfo "test" []) $ \l -> do
logMsgStd l LogInfo [("name", "value")] "message"
logMsgStd l LogDebug [("name", "value")] "message2"
logMsgJs l LogDebug [("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 >>= putStrLn . T.unpack
spec :: Spec
spec = do
basicLogger
jsonLogger
loggerTypes