public void Critical_LogAnonymousObjectOnEnabledLevel_LogsMessage()
        {
            var logger = new TestableLogger(Level.Critical, _output);
            int number = Factory.GetInteger();

            LoggerExtensions.Critical(logger, new { message = "Hello", number });
            Assert.Equal($"CRITICAL: {{\"message\":\"Hello\",\"number\":{number}}}", logger.Messages.First());
        }
        public void Critical_LogAnonymousObjectOnEnabledLevel_VerifyLog()
        {
            var logMock = new Mock <ILogger>();
            int number  = Factory.GetInteger();

            LoggerExtensions.Critical(logMock.Object, new { message = "Hello", number });
            logMock.VerifyLog <object>(Level.Critical, Times.Once());
        }
        public void Critical_LogAnonymousObjectAndExceptionOnEnabledLevel_VerifyLog()
        {
            var logMock   = new Mock <ILogger>();
            int number    = Factory.GetInteger();
            var exception = new Exception("OMG!");

            LoggerExtensions.Critical(logMock.Object, new { message = "Hello", number }, exception);
            logMock.VerifyLog <object, Exception>(Level.Critical, exception, Times.Once());
        }
        public void Critical_LazyLogAnonymousObjectOnEnabledLevel_CallMessageFormatter()
        {
            bool isInvoked = false;
            var  logger    = new TestableLogger(Level.Critical, _output);
            int  state     = Factory.GetInteger();

            LoggerExtensions.Critical(logger, state, number =>
            {
                isInvoked = true;
                return(new { message = "Hello", number });
            });
            Assert.True(isInvoked);
        }
        public void Critical_LazyLogAnonymousObjectAndExceptionOnDisabledLevel_DoesNotCallMessageFormatter()
        {
            bool isInvoked = false;
            var  logger    = new TestableLogger((Level)1337, _output);
            int  state     = Factory.GetInteger();

            LoggerExtensions.Critical(logger, state, new Exception("OMG!"), (number, ex) =>
            {
                isInvoked = true;
                return(new { message = "Hello", number });
            });
            Assert.False(isInvoked);
        }