never executed always true always false
    1 module HelVM.HelMA.Automaton.Eff.MockLogger
    2   ( MockLog (..)
    3   , MockLoggerData
    4   , MonadMockLogger
    5   , filterLogsWithLevel
    6   , filterLogsWithLevelDebug
    7   , filterLogsWithLevelInfo
    8   , mockLog
    9   ) where
   10 
   11 import           HelVM.HelMA.Automaton.API.IOTypes
   12 import qualified HelVM.HelMA.Automaton.API.LogLevel as LogLevel
   13 
   14 import           Control.Monad.Logger
   15 import           Control.Monad.Writer.Class         ( MonadWriter, tell )
   16 
   17 import           Data.MonoTraversable
   18 
   19 import qualified Data.Sequence                      as Seq
   20 
   21 filterLogsWithLevelInfo ∷ MockLoggerData → Output
   22 filterLogsWithLevelInfo = filterLogsWithLevel LevelInfo
   23 
   24 filterLogsWithLevelDebug ∷ MockLoggerData → Output
   25 filterLogsWithLevelDebug = filterLogsWithLevel LevelDebug
   26 
   27 filterLogsWithLevel ∷ LogLevel → MockLoggerData → Output
   28 filterLogsWithLevel t logsSeq = oconcat (line <$> Seq.filter condition logsSeq) where
   29   condition l = t <= logLevel l
   30   line l = (LogLevel.showEitherTextLogLevel . LogLevel.fromLogger . logLevel) l <> " " <> (decodeUtf8 . fromLogStr . logStr) l <> "\n"
   31 
   32 mockLog ∷ MonadMockLogger m ⇒ MockLog → m ()
   33 mockLog = tell . one
   34 
   35 ----
   36 
   37 type MonadMockLogger m = MonadWriter MockLoggerData m
   38 
   39 type MockLoggerData = Seq MockLog
   40 
   41 data MockLog
   42   = MockLog
   43       { logLoc    :: !Loc
   44       , logSource :: !LogSource
   45       , logLevel  :: !LogLevel
   46       , logStr    :: !LogStr
   47       }
   48   deriving stock (Eq, Show)