diff --git a/src/vstest.console/Internal/ConsoleLogger.cs b/src/vstest.console/Internal/ConsoleLogger.cs
index 230626260d..40eaabe21c 100644
--- a/src/vstest.console/Internal/ConsoleLogger.cs
+++ b/src/vstest.console/Internal/ConsoleLogger.cs
@@ -180,7 +180,7 @@ private static void PrintTimeSpan(TimeSpan timeSpan)
}
///
- /// Constructs a well formatted string using the given prefix before every message content on each line.
+ /// Constructs a well formatted string using the given prefix before every message content on each line.
///
private static string GetFormattedOutput(Collection testMessageCollection)
{
@@ -190,8 +190,12 @@ private static string GetFormattedOutput(Collection testMessa
foreach (var message in testMessageCollection)
{
var prefix = String.Format(CultureInfo.CurrentCulture, "{0}{1}", Environment.NewLine, TestMessageFormattingPrefix);
- var messageText = message.Text.Replace(Environment.NewLine, prefix).TrimEnd(TestMessageFormattingPrefix.ToCharArray());
- sb.AppendFormat(CultureInfo.CurrentCulture, "{0}{1}", TestMessageFormattingPrefix, messageText);
+ var messageText = message.Text?.Replace(Environment.NewLine, prefix).TrimEnd(TestMessageFormattingPrefix.ToCharArray());
+
+ if (!string.IsNullOrWhiteSpace(messageText))
+ {
+ sb.AppendFormat(CultureInfo.CurrentCulture, "{0}{1}", TestMessageFormattingPrefix, messageText);
+ }
}
return sb.ToString();
}
@@ -238,8 +242,12 @@ private static void DisplayFullInformation(TestResult result)
{
addAdditionalNewLine = false;
var stdOutMessages = GetFormattedOutput(stdOutMessagesCollection);
- Output.Information(CommandLineResources.StdOutMessagesBanner);
- Output.Information(stdOutMessages);
+
+ if (!string.IsNullOrEmpty(stdOutMessages))
+ {
+ Output.Information(CommandLineResources.StdOutMessagesBanner);
+ Output.Information(stdOutMessages);
+ }
}
var stdErrMessagesCollection = GetTestMessages(result.Messages, TestResultMessage.StandardErrorCategory);
@@ -247,17 +255,25 @@ private static void DisplayFullInformation(TestResult result)
{
addAdditionalNewLine = false;
var stdErrMessages = GetFormattedOutput(stdErrMessagesCollection);
- Output.Information(ConsoleColor.Red, CommandLineResources.StdErrMessagesBanner);
- Output.Information(ConsoleColor.Red, stdErrMessages);
+
+ if (!string.IsNullOrEmpty(stdErrMessages))
+ {
+ Output.Information(ConsoleColor.Red, CommandLineResources.StdErrMessagesBanner);
+ Output.Information(ConsoleColor.Red, stdErrMessages);
+ }
}
var addnlInfoMessagesCollection = GetTestMessages(result.Messages, TestResultMessage.AdditionalInfoCategory);
if (addnlInfoMessagesCollection.Count > 0)
{
addAdditionalNewLine = false;
- Output.Information(CommandLineResources.AddnlInfoMessagesBanner);
var addnlInfoMessages = GetFormattedOutput(addnlInfoMessagesCollection);
- Output.Information(addnlInfoMessages);
+
+ if (!string.IsNullOrEmpty(addnlInfoMessages))
+ {
+ Output.Information(CommandLineResources.AddnlInfoMessagesBanner);
+ Output.Information(addnlInfoMessages);
+ }
}
if (addAdditionalNewLine)
{
diff --git a/test/vstest.console.UnitTests/Internal/ConsoleLoggerTests.cs b/test/vstest.console.UnitTests/Internal/ConsoleLoggerTests.cs
index 4975ada8fa..7ed71f56f8 100644
--- a/test/vstest.console.UnitTests/Internal/ConsoleLoggerTests.cs
+++ b/test/vstest.console.UnitTests/Internal/ConsoleLoggerTests.cs
@@ -145,6 +145,156 @@ public void TestResultHandlerShouldThowExceptionIfEventArgsIsNull()
});
}
+ [TestMethod]
+ public void TestResultHandlerShouldShowStdOutMessagesBannerIfStdOutIsNotEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ string message = "Dummy message";
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.StandardOutCategory, message);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.StdOutMessagesBanner, OutputLevel.Information), Times.Once());
+ this.mockOutput.Verify(o => o.WriteLine(" " + message, OutputLevel.Information), Times.Once());
+ }
+
+ [TestMethod]
+ public void TestResultHandlerShouldNotShowStdOutMessagesBannerIfStdOutIsEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.StandardOutCategory, null);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.StdOutMessagesBanner, OutputLevel.Information), Times.Never());
+ }
+
+ [TestMethod]
+ public void TestResultHandlerShouldShowStdErrMessagesBannerIfStdErrIsNotEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ string message = "Dummy message";
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.StandardErrorCategory, message);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.StdErrMessagesBanner, OutputLevel.Information), Times.Once());
+ this.mockOutput.Verify(o => o.WriteLine(" " + message, OutputLevel.Information), Times.Once());
+ }
+
+ [TestMethod]
+ public void TestResultHandlerShouldNotShowStdErrMessagesBannerIfStdErrIsEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.StandardErrorCategory, null);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.StdErrMessagesBanner, OutputLevel.Information), Times.Never());
+ }
+
+ [TestMethod]
+ public void TestResultHandlerShouldShowAdditionalInfoBannerIfAdditionalInfoIsNotEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ string message = "Dummy message";
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.AdditionalInfoCategory, message);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.AddnlInfoMessagesBanner, OutputLevel.Information), Times.Once());
+ this.mockOutput.Verify(o => o.WriteLine(" " + message, OutputLevel.Information), Times.Once());
+ }
+
+ [TestMethod]
+ public void TestResultHandlerShouldNotShowAdditionalInfoBannerIfAdditionalInfoIsEmpty()
+ {
+ var parameters = new Dictionary();
+ parameters.Add("verbosity", "normal");
+ this.consoleLogger.Initialize(this.events.Object, parameters);
+
+ var testcase = new TestCase("TestName", new Uri("some://uri"), "TestSource");
+
+ TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.AdditionalInfoCategory, null);
+
+ var testresult = new ObjectModel.TestResult(testcase);
+ testresult.Outcome = TestOutcome.Failed;
+ testresult.Messages.Add(testResultMessage);
+
+ var eventArgs = new TestRunChangedEventArgs(null, new List { testresult }, null);
+
+ // Raise an event on mock object
+ this.testRunRequest.Raise(m => m.OnRunStatsChange += null, eventArgs);
+ this.FlushLoggerMessages();
+
+ this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.AddnlInfoMessagesBanner, OutputLevel.Information), Times.Never());
+ }
+
[TestMethod]
public void TestResultHandlerShouldWriteToConsoleShouldShowPassedTestsForNormalVebosity()
{