public void ReportLogToConsole_Does_Nothing_If_Logging_Event_Handled()
        {
            using (StringWriter sw = new StringWriter())
            {
                Console.SetOut(sw);
                string testMessage = "Test message";

                LoggerReporter reporter = new LoggerReporter();
                LoggerListener.SubscribeListener(reporter);

                //Check for event
                LoggerEventArgs arg = new LoggerEventArgs(new MessengerEventArgs(testMessage));
                reporter.ThrowLoggerEvent(arg);

                string expected = string.Format(testMessage + Environment.NewLine);
                Assert.AreEqual(expected, sw.ToString());

                // Clear Console output
                StringBuilder sb = sw.GetStringBuilder();
                sb.Remove(0, sb.Length);

                // Check that event does not trigger again
                arg.Handled = true;
                reporter.ThrowLoggerEvent(arg);

                expected = string.Empty;
                Assert.AreEqual(expected, sw.ToString());
            }
        }
        public void ReportLogToConsole_Logs_Exception_With_Stacktrace()
        {
            using (StringWriter sw = new StringWriter())
            {
                Console.SetOut(sw);
                string testMessage      = "Test message";
                string exceptionMessage = "Exception Message";

                LoggerReporter reporter = new LoggerReporter();
                LoggerListener.SubscribeListener(reporter);

                //Check for event
                try
                {
                    throwException(exceptionMessage);
                }
                catch (Exception expectedException)
                {
                    LoggerEventArgs arg = new LoggerEventArgs(expectedException, new MessengerEventArgs(testMessage));
                    reporter.ThrowLoggerEvent(arg);
                }

                string expectedWithoutStackTrace = string.Format(exceptionMessage + Environment.NewLine + testMessage + Environment.NewLine);
                Assert.IsTrue(sw.ToString().Contains(exceptionMessage));
                Assert.IsTrue(sw.ToString().Contains(testMessage));
                Assert.IsTrue(sw.ToString().Length > expectedWithoutStackTrace.Length);
            }
        }
        public void ReportLogToConsole_Logs_Parameters()
        {
            using (StringWriter sw = new StringWriter())
            {
                Console.SetOut(sw);
                string testMessage = "Test message";

                string key1   = "Key1:";
                string value1 = "Value1";
                string key2   = "Key2:";
                string value2 = "Value2";

                LoggerReporter reporter = new LoggerReporter();
                LoggerListener.SubscribeListener(reporter);

                //Check for event
                LoggerEventArgs arg = new LoggerEventArgs(new MessengerEventArgs(testMessage),
                                                          key1, value1,
                                                          key2, value2);
                reporter.ThrowLoggerEvent(arg);

                string expected = string.Format(testMessage + Environment.NewLine +
                                                key1 + " " + value1 + Environment.NewLine +
                                                key2 + " " + value2 + Environment.NewLine);
                Assert.AreEqual(expected, sw.ToString());
            }
        }
        public void SubscribeListener_Subsribes_Listener()
        {
            using (StringWriter sw = new StringWriter())
            {
                Console.SetOut(sw);
                string testMessage = "Test message";

                LoggerReporter reporter = new LoggerReporter();
                LoggerListener.SubscribeListener(reporter);

                //Check for event
                LoggerEventArgs arg = new LoggerEventArgs(new MessengerEventArgs(testMessage));
                reporter.ThrowLoggerEvent(arg);

                string expected = string.Format(testMessage + Environment.NewLine);
                Assert.AreEqual(expected, sw.ToString());
            }
        }
        public void ReportLogToConsole_Logs_Exception_With_No_Stacktrace()
        {
            using (StringWriter sw = new StringWriter())
            {
                Console.SetOut(sw);
                string testMessage      = "Test message";
                string exceptionMessage = "Exception Message";

                LoggerReporter reporter = new LoggerReporter();
                LoggerListener.SubscribeListener(reporter);

                //Check for event
                Exception expectedException = new Exception(exceptionMessage);

                LoggerEventArgs arg = new LoggerEventArgs(expectedException, new MessengerEventArgs(testMessage));
                reporter.ThrowLoggerEvent(arg);

                string expected = string.Format(exceptionMessage + Environment.NewLine + testMessage + Environment.NewLine);
                Assert.AreEqual(expected, sw.ToString());
            }
        }