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