diff --git a/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs b/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs
index e1447038c5..0312340891 100644
--- a/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs
+++ b/src/Microsoft.TestPlatform.Extensions.TrxLogger/TrxLogger.cs
@@ -366,20 +366,35 @@ internal void TestRunCompleteHandler(object sender, TestRunCompleteEventArgs e)
if (string.IsNullOrEmpty(trxFileName))
{
// save the xml to file in testResultsFolder
- trxFileName = this.GetTrxFileName(TrxFileDirectory, this.testRun.RunConfiguration.RunDeploymentRootDirectory);
+ // [RunDeploymentRootDirectory] Replace white space with underscore from trx file name to make it command line friendly
+ trxFileName = this.GetTrxFileName(TrxFileDirectory, this.testRun.RunConfiguration.RunDeploymentRootDirectory.Replace(' ', '_'));
}
- try
- {
- FileStream fs = File.OpenWrite(trxFileName);
- rootElement.OwnerDocument.Save(fs);
- String resultsFileMessage = String.Format(CultureInfo.CurrentCulture, TrxLoggerResources.TrxLoggerResultsFile, trxFileName);
- Console.WriteLine(resultsFileMessage);
- }
- catch (System.UnauthorizedAccessException fileWriteException)
- {
- Console.WriteLine(fileWriteException.Message);
- }
+ this.PopulateTrxFile(trxFileName, rootElement);
+ }
+ }
+
+ ///
+ /// populate trx file from the xmlelement
+ ///
+ ///
+ /// Trx full path
+ ///
+ ///
+ /// XmlElement.
+ ///
+ internal virtual void PopulateTrxFile(string trxFileName, XmlElement rootElement)
+ {
+ try
+ {
+ FileStream fs = File.OpenWrite(trxFileName);
+ rootElement.OwnerDocument.Save(fs);
+ String resultsFileMessage = String.Format(CultureInfo.CurrentCulture, TrxLoggerResources.TrxLoggerResultsFile, trxFileName);
+ Console.WriteLine(resultsFileMessage);
+ }
+ catch (System.UnauthorizedAccessException fileWriteException)
+ {
+ Console.WriteLine(fileWriteException.Message);
}
}
diff --git a/src/Microsoft.TestPlatform.Extensions.TrxLogger/Utility/FilterHelper.cs b/src/Microsoft.TestPlatform.Extensions.TrxLogger/Utility/FileHelper.cs
similarity index 100%
rename from src/Microsoft.TestPlatform.Extensions.TrxLogger/Utility/FilterHelper.cs
rename to src/Microsoft.TestPlatform.Extensions.TrxLogger/Utility/FileHelper.cs
diff --git a/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests.csproj b/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests.csproj
index b37e95ac9f..7d74b09fdc 100644
--- a/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests.csproj
+++ b/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests.csproj
@@ -39,6 +39,7 @@
+
diff --git a/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/TrxLoggerTests.cs b/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/TrxLoggerTests.cs
index 3879355d51..25762f3a0e 100644
--- a/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/TrxLoggerTests.cs
+++ b/test/Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests/TrxLoggerTests.cs
@@ -7,7 +7,9 @@ namespace Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
+ using System.IO;
using System.Linq;
+ using System.Xml;
using Microsoft.VisualStudio.TestPlatform.Extensions.TrxLogger;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -28,15 +30,15 @@ namespace Microsoft.TestPlatform.Extensions.TrxLogger.UnitTests
public class TrxLoggerTests
{
private Mock events;
- private TrxLogger trxLogger;
+ private TestableTrxLogger testableTrxLogger;
[TestInitialize]
public void Initialize()
{
this.events = new Mock();
- this.trxLogger = new TrxLogger();
- this.trxLogger.Initialize(this.events.Object, "dummy");
+ this.testableTrxLogger = new TestableTrxLogger();
+ this.testableTrxLogger.Initialize(this.events.Object, "dummy");
}
[TestMethod]
@@ -45,7 +47,7 @@ public void InitializeShouldThrowExceptionIfEventsIsNull()
Assert.ThrowsException(
() =>
{
- this.trxLogger.Initialize(null, "dummy");
+ this.testableTrxLogger.Initialize(null, "dummy");
});
}
@@ -53,7 +55,7 @@ public void InitializeShouldThrowExceptionIfEventsIsNull()
public void InitializeShouldNotThrowExceptionIfEventsIsNotNull()
{
var events = new Mock();
- this.trxLogger.Initialize(events.Object, "dummy");
+ this.testableTrxLogger.Initialize(events.Object, "dummy");
}
[TestMethod]
@@ -63,7 +65,7 @@ public void InitializeShouldThrowExceptionIfTestRunDirectoryIsEmptyOrNull()
() =>
{
var events = new Mock();
- this.trxLogger.Initialize(events.Object, null);
+ this.testableTrxLogger.Initialize(events.Object, null);
});
}
@@ -71,7 +73,7 @@ public void InitializeShouldThrowExceptionIfTestRunDirectoryIsEmptyOrNull()
public void InitializeShouldNotThrowExceptionIfTestRunDirectoryIsNeitherEmptyNorNull()
{
var events = new Mock();
- this.trxLogger.Initialize(events.Object, "dummy");
+ this.testableTrxLogger.Initialize(events.Object, "dummy");
}
[TestMethod]
@@ -79,7 +81,7 @@ public void TestMessageHandlerShouldThrowExceptionIfEventArgsIsNull()
{
Assert.ThrowsException(() =>
{
- this.trxLogger.TestMessageHandler(new object(), default(TestRunMessageEventArgs));
+ this.testableTrxLogger.TestMessageHandler(new object(), default(TestRunMessageEventArgs));
});
}
@@ -88,9 +90,9 @@ public void TestMessageHandlerShouldAddMessageWhenItIsInformation()
{
string message = "The information to test";
TestRunMessageEventArgs trme = new TestRunMessageEventArgs(TestMessageLevel.Informational, message);
- this.trxLogger.TestMessageHandler(new object(), trme);
+ this.testableTrxLogger.TestMessageHandler(new object(), trme);
- Assert.IsTrue(this.trxLogger.GetRunLevelInformationalMessage().Contains(message));
+ Assert.IsTrue(this.testableTrxLogger.GetRunLevelInformationalMessage().Contains(message));
}
[TestMethod]
@@ -98,10 +100,10 @@ public void TestMessageHandlerShouldAddMessageInListIfItIsWarning()
{
string message = "The information to test";
TestRunMessageEventArgs trme = new TestRunMessageEventArgs(TestMessageLevel.Warning, message);
- this.trxLogger.TestMessageHandler(new object(), trme);
- this.trxLogger.TestMessageHandler(new object(), trme);
+ this.testableTrxLogger.TestMessageHandler(new object(), trme);
+ this.testableTrxLogger.TestMessageHandler(new object(), trme);
- Assert.AreEqual(this.trxLogger.GetRunLevelErrorsAndWarnings().Count, 2);
+ Assert.AreEqual(this.testableTrxLogger.GetRunLevelErrorsAndWarnings().Count, 2);
}
[TestMethod]
@@ -109,9 +111,9 @@ public void TestMessageHandlerShouldAddMessageInListIfItIsError()
{
string message = "The information to test";
TestRunMessageEventArgs trme = new TestRunMessageEventArgs(TestMessageLevel.Error, message);
- this.trxLogger.TestMessageHandler(new object(), trme);
+ this.testableTrxLogger.TestMessageHandler(new object(), trme);
- Assert.AreEqual(this.trxLogger.GetRunLevelErrorsAndWarnings().Count, 1);
+ Assert.AreEqual(this.testableTrxLogger.GetRunLevelErrorsAndWarnings().Count, 1);
}
[TestMethod]
@@ -121,11 +123,11 @@ public void TestResultHandlerShouldCaptureStartTimeInSummaryWithTimeStampDuringI
ObjectModel.TestResult testResult = new ObjectModel.TestResult(testCase);
Mock e = new Mock(testResult);
- trxLogger.TestResultHandler(new object(), e.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), e.Object);
- Assert.AreEqual(this.trxLogger.TestRunStartTime, this.trxLogger.LoggerTestRun.Started);
+ Assert.AreEqual(this.testableTrxLogger.TestRunStartTime, this.testableTrxLogger.LoggerTestRun.Started);
}
-
+
[TestMethod]
public void TestResultHandlerKeepingTheTrackOfPassedAndFailedTests()
{
@@ -152,14 +154,14 @@ public void TestResultHandlerKeepingTheTrackOfPassedAndFailedTests()
Mock skip1 = new Mock(skipResult1);
- this.trxLogger.TestResultHandler(new object(), pass1.Object);
- this.trxLogger.TestResultHandler(new object(), pass2.Object);
- this.trxLogger.TestResultHandler(new object(), fail1.Object);
- this.trxLogger.TestResultHandler(new object(), skip1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), fail1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), skip1.Object);
- Assert.AreEqual(this.trxLogger.PassedTestCount, 2, "Passed Tests");
- Assert.AreEqual(this.trxLogger.FailedTestCount, 1, "Failed Tests");
+ Assert.AreEqual(this.testableTrxLogger.PassedTestCount, 2, "Passed Tests");
+ Assert.AreEqual(this.testableTrxLogger.FailedTestCount, 1, "Failed Tests");
}
[TestMethod]
@@ -188,13 +190,13 @@ public void TestResultHandlerKeepingTheTrackOfTotalTests()
Mock skip1 = new Mock(skipResult1);
- this.trxLogger.TestResultHandler(new object(), pass1.Object);
- this.trxLogger.TestResultHandler(new object(), pass2.Object);
- this.trxLogger.TestResultHandler(new object(), fail1.Object);
- this.trxLogger.TestResultHandler(new object(), skip1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), fail1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), skip1.Object);
- Assert.AreEqual(this.trxLogger.TotalTestCount, 4, "Passed Tests");
+ Assert.AreEqual(this.testableTrxLogger.TotalTestCount, 4, "Passed Tests");
}
[TestMethod]
@@ -207,11 +209,11 @@ public void TestResultHandlerLockingAMessageForSkipTest()
Mock skip1 = new Mock(skipResult1);
- this.trxLogger.TestResultHandler(new object(), skip1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), skip1.Object);
string expectedMessage = String.Format(CultureInfo.CurrentCulture, TrxLoggerResources.MessageForSkippedTests, "Skip1");
- Assert.AreEqual(String.Compare(this.trxLogger.GetRunLevelInformationalMessage(), expectedMessage, true), 0);
+ Assert.AreEqual(String.Compare(this.testableTrxLogger.GetRunLevelInformationalMessage(), expectedMessage, true), 0);
}
[TestMethod]
@@ -229,10 +231,10 @@ public void TestResultHandlerShouldCreateOneTestResultForEachTestCase()
Mock resultEventArg1 = new Mock(result1);
Mock resultEventArg2 = new Mock(result2);
- this.trxLogger.TestResultHandler(new object(), resultEventArg1.Object);
- this.trxLogger.TestResultHandler(new object(), resultEventArg2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg2.Object);
- Assert.AreEqual(this.trxLogger.TestResultCount, 2, "TestResultHandler is not creating test result entry for each test case");
+ Assert.AreEqual(this.testableTrxLogger.TestResultCount, 2, "TestResultHandler is not creating test result entry for each test case");
}
[TestMethod]
@@ -250,10 +252,10 @@ public void TestResultHandlerShouldCreateOneTestEntryForEachTestCase()
Mock resultEventArg1 = new Mock(result1);
Mock resultEventArg2 = new Mock(result2);
- this.trxLogger.TestResultHandler(new object(), resultEventArg1.Object);
- this.trxLogger.TestResultHandler(new object(), resultEventArg2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg2.Object);
- Assert.AreEqual(this.trxLogger.TestEntryCount, 2, "TestResultHandler is not creating test result entry for each test case");
+ Assert.AreEqual(this.testableTrxLogger.TestEntryCount, 2, "TestResultHandler is not creating test result entry for each test case");
}
[TestMethod]
@@ -270,10 +272,10 @@ public void TestResultHandlerShouldCreateOneUnitTestElementForEachTestCase()
Mock resultEventArg1 = new Mock(result1);
Mock resultEventArg2 = new Mock(result2);
- this.trxLogger.TestResultHandler(new object(), resultEventArg1.Object);
- this.trxLogger.TestResultHandler(new object(), resultEventArg2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), resultEventArg2.Object);
- Assert.AreEqual(this.trxLogger.UnitTestElementCount, 2, "TestResultHandler is not creating test result entry for each test case");
+ Assert.AreEqual(this.testableTrxLogger.UnitTestElementCount, 2, "TestResultHandler is not creating test result entry for each test case");
}
[TestMethod]
@@ -301,24 +303,17 @@ public void OutcomeOfRunWillBeFailIfAnyTestsFails()
Mock fail1 = new Mock(failResult1);
Mock skip1 = new Mock(skipResult1);
- this.trxLogger.TestResultHandler(new object(), pass1.Object);
- this.trxLogger.TestResultHandler(new object(), pass2.Object);
- this.trxLogger.TestResultHandler(new object(), fail1.Object);
- this.trxLogger.TestResultHandler(new object(), skip1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), fail1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), skip1.Object);
var testRunCompleteEventArgs = new TestRunCompleteEventArgs(null, false, false, null, new Collection(), new TimeSpan(1, 0, 0, 0));
- try
- {
- // Intentionally making it null so that it will not create actual trx file
- TrxLogger.TrxFileDirectory = null;
- this.trxLogger.TestRunCompleteHandler(new object(), testRunCompleteEventArgs);
- }
- catch (ArgumentNullException)
- {
- }
+ TestableTrxLogger.TrxFileDirectory = Directory.GetCurrentDirectory();
+ this.testableTrxLogger.TestRunCompleteHandler(new object(), testRunCompleteEventArgs);
- Assert.AreEqual(TrxLoggerObjectModel.TestOutcome.Failed, this.trxLogger.TestResultOutcome);
+ Assert.AreEqual(TrxLoggerObjectModel.TestOutcome.Failed, this.testableTrxLogger.TestResultOutcome);
}
[TestMethod]
@@ -341,23 +336,34 @@ public void OutcomeOfRunWillBeCompletedIfNoTestsFails()
Mock pass2 = new Mock(passResult2);
Mock skip1 = new Mock(skipResult1);
- this.trxLogger.TestResultHandler(new object(), pass1.Object);
- this.trxLogger.TestResultHandler(new object(), pass2.Object);
- this.trxLogger.TestResultHandler(new object(), skip1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass1.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), pass2.Object);
+ this.testableTrxLogger.TestResultHandler(new object(), skip1.Object);
var testRunCompleteEventArgs = new TestRunCompleteEventArgs(null, false, false, null, new Collection(), new TimeSpan(1, 0, 0, 0));
- try
- {
- // Intentionally making it null so that it will not create actual trx file
- TrxLogger.TrxFileDirectory = null;
- this.trxLogger.TestRunCompleteHandler(new object(), testRunCompleteEventArgs);
- }
- catch (ArgumentNullException)
- {
- }
+ TestableTrxLogger.TrxFileDirectory = Directory.GetCurrentDirectory();
+ this.testableTrxLogger.TestRunCompleteHandler(new object(), testRunCompleteEventArgs);
+
+
+ Assert.AreEqual(TrxLoggerObjectModel.TestOutcome.Completed, this.testableTrxLogger.TestResultOutcome);
+ }
+
+ [TestMethod]
+ public void TheDefaultTrxFileNameShouldNotHaveWhiteSpace()
+ {
+ ObjectModel.TestCase passTestCase = new ObjectModel.TestCase("Pass1", new Uri("some://uri"), "DummySourceFileName");
+ ObjectModel.TestResult passResult = new ObjectModel.TestResult(passTestCase);
+ Mock pass = new Mock(passResult);
+
+ this.testableTrxLogger.TestResultHandler(new object(), pass.Object);
+
+ var testRunCompleteEventArgs = new TestRunCompleteEventArgs(null, false, false, null, new Collection(), new TimeSpan(1, 0, 0, 0));
+
+ TestableTrxLogger.TrxFileDirectory = Directory.GetCurrentDirectory();
+ this.testableTrxLogger.TestRunCompleteHandler(new object(), testRunCompleteEventArgs);
- Assert.AreEqual(TrxLoggerObjectModel.TestOutcome.Completed, this.trxLogger.TestResultOutcome);
+ bool trxFileName = Path.GetFileName(this.testableTrxLogger.trxFile).Contains(' ');
}
///
@@ -396,7 +402,7 @@ public void GetQToolsTestElementFromTestCaseShouldAssignTestCategoryOfUnitTestEl
object[] expected = new[] { "MethodLevel", "ClassLevel", "AsmLevel" };
- CollectionAssert.AreEqual(expected, unitTestElement.TestCategories.ToArray().OrderByDescending(x =>x.ToString()).ToArray());
+ CollectionAssert.AreEqual(expected, unitTestElement.TestCategories.ToArray().OrderByDescending(x => x.ToString()).ToArray());
}
///
@@ -415,4 +421,13 @@ public void GetQToolsTestElementFromTestCaseShouldNotFailWhenThereIsNoTestCatego
CollectionAssert.AreEqual(expected, unitTestElement.TestCategories.ToArray());
}
}
+
+ internal class TestableTrxLogger : TrxLogger
+ {
+ public string trxFile;
+ internal override void PopulateTrxFile(string trxFileName, XmlElement rootElement)
+ {
+ this.trxFile = trxFileName;
+ }
+ }
}