module LoggingTests where
import Control.Eff
import Control.Eff.Log
import Test.Tasty
import Test.Tasty.HUnit
import Common
import Control.DeepSeq
import qualified Data.Sequence as Seq
demo :: Member (Logs String) e => Eff e ()
demo = do
logMsg "jo"
logMsg "test 123"
test_loggingInterception :: TestTree
test_loggingInterception = setTravisTestOptions $ testGroup
"Intercept Logging"
[ testCase "Convert Log Message Type" $ do
let (((), strLogs), otherLogs) = run
(captureLogs @OtherLogMsg
(captureLogs @String (interceptLogging toOtherLogMsg demo))
)
assertEqual "string logs must be empty" Seq.empty strLogs
assertEqual "other logs should contain all logging"
(Seq.fromList [OtherLogMsg "jo", OtherLogMsg "test 123"])
otherLogs
]
newtype OtherLogMsg = OtherLogMsg String deriving (Eq, NFData, Show)
toOtherLogMsg :: ('[Logs String, Logs OtherLogMsg] <:: e) => String -> Eff e ()
toOtherLogMsg = logMsg . OtherLogMsg
demo2 :: Member (Logs LogMessage) e => Eff e ()
demo2 = relogAsDebugMessages demo