From a305b39559e0f4a44d8f30b6f6c01549878bf436 Mon Sep 17 00:00:00 2001 From: samadala Date: Tue, 15 May 2018 20:39:54 +0530 Subject: [PATCH 1/3] Fix running .NETCore unit tests --- scripts/test.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test.ps1 b/scripts/test.ps1 index dc3a064dce..ebf2427592 100644 --- a/scripts/test.ps1 +++ b/scripts/test.ps1 @@ -256,8 +256,8 @@ function Invoke-Test else { - Write-Verbose "$dotNetPath $vstestConsolePath $testContainerSet /parallel /logger:`"trx;LogFileName=$trxLogFileName`" $testFilter /settings:$Script:TPT_RunSettingsFile /testadapterpath:$Script:TPT_NSTraceDataCollectorPath $ConsoleLogger" - & $dotNetPath $vstestConsolePath $testContainerSet /parallel /logger:"trx;LogFileName=$trxLogFileName" $testFilter /settings:"$Script:TPT_RunSettingsFile" /testadapterpath:"$Script:TPT_NSTraceDataCollectorPath $ConsoleLogger" + Write-Verbose "$dotNetPath $vstestConsolePath $testContainerSet /parallel /logger:`"trx;LogFileName=$trxLogFileName`" $testFilter /settings:$Script:TPT_RunSettingsFile $ConsoleLogger /testadapterpath:$Script:TPT_NSTraceDataCollectorPath" + & $dotNetPath $vstestConsolePath $testContainerSet /parallel /logger:"trx;LogFileName=$trxLogFileName" $testFilter /settings:"$Script:TPT_RunSettingsFile" $ConsoleLogger /testadapterpath:"$Script:TPT_NSTraceDataCollectorPath" } Reset-TestEnvironment From 50bd267c84014272bf9445c14b6e4dd8b7c3c5f9 Mon Sep 17 00:00:00 2001 From: samadala Date: Wed, 16 May 2018 17:01:13 +0530 Subject: [PATCH 2/3] Add TraceDataCollectorDirectoryPath parameter to VSTestTask --- .../Microsoft.TestPlatform.targets | 2 + .../Tasks/VSTestTask.cs | 24 +++ ...rosoft.TestPlatform.Build.UnitTests.csproj | 2 + .../Program.cs | 2 +- .../VsTestTaskTests.cs | 202 ++++++++---------- 5 files changed, 117 insertions(+), 115 deletions(-) diff --git a/src/Microsoft.TestPlatform.Build/Microsoft.TestPlatform.targets b/src/Microsoft.TestPlatform.Build/Microsoft.TestPlatform.targets index de1630486f..caf2cde559 100644 --- a/src/Microsoft.TestPlatform.Build/Microsoft.TestPlatform.targets +++ b/src/Microsoft.TestPlatform.Build/Microsoft.TestPlatform.targets @@ -46,6 +46,7 @@ Copyright (c) .NET Foundation. All rights reserved. VSTestVerbosity="$(VSTestVerbosity)" VSTestCollect="$(VSTestCollect)" VSTestBlame="$(VSTestBlame)" + VSTestTraceDataCollectorDirectoryPath="$(TraceDataCollectorDirectoryPath)" /> @@ -85,6 +86,7 @@ Copyright (c) .NET Foundation. All rights reserved. + diff --git a/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs b/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs index 91225bb8d2..74971162cc 100644 --- a/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs +++ b/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs @@ -109,6 +109,12 @@ public string VSTestBlame set; } + public string VSTestTraceDataCollectorDirectoryPath + { + get; + set; + } + public override bool Execute() { var traceEnabledValue = Environment.GetEnvironmentVariable("VSTEST_BUILD_TRACE"); @@ -132,11 +138,14 @@ public void Cancel() internal IEnumerable CreateArgument() { var isConsoleLoggerEnabled = true; + var isCollectCodeCoverageEnabled = false; + var isRunSettingsEnabled = false; var allArgs = new List(); // TODO log arguments in task if (!string.IsNullOrEmpty(this.VSTestSetting)) { + isRunSettingsEnabled = true; allArgs.Add("--settings:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestSetting)); } @@ -233,10 +242,25 @@ internal IEnumerable CreateArgument() { foreach (var arg in this.VSTestCollect) { + if (arg.Equals("Code Coverage", StringComparison.OrdinalIgnoreCase)) + { + isCollectCodeCoverageEnabled = true; + } allArgs.Add("--collect:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } + if (isCollectCodeCoverageEnabled || isRunSettingsEnabled) + { + // Pass TraceDataCollector path to vstest.console as TestAdapterPath if --collect "Code Coverage" + // or --settings (User can enable code coverage from runsettings) option given. + // This is required due to currently trace datacollector not ships with dotnet sdk. + if (!string.IsNullOrEmpty(this.VSTestTraceDataCollectorDirectoryPath)) + { + allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestTraceDataCollectorDirectoryPath)); + } + } + if (!string.IsNullOrEmpty(this.VSTestBlame)) { allArgs.Add("--Blame"); diff --git a/test/Microsoft.TestPlatform.Build.UnitTests/Microsoft.TestPlatform.Build.UnitTests.csproj b/test/Microsoft.TestPlatform.Build.UnitTests/Microsoft.TestPlatform.Build.UnitTests.csproj index 8dc8abda97..3415f2af92 100644 --- a/test/Microsoft.TestPlatform.Build.UnitTests/Microsoft.TestPlatform.Build.UnitTests.csproj +++ b/test/Microsoft.TestPlatform.Build.UnitTests/Microsoft.TestPlatform.Build.UnitTests.csproj @@ -9,6 +9,8 @@ Exe netcoreapp1.0 Microsoft.TestPlatform.Build.UnitTests + true + true diff --git a/test/Microsoft.TestPlatform.Build.UnitTests/Program.cs b/test/Microsoft.TestPlatform.Build.UnitTests/Program.cs index 1ee281bfd3..6b68a1b2ad 100644 --- a/test/Microsoft.TestPlatform.Build.UnitTests/Program.cs +++ b/test/Microsoft.TestPlatform.Build.UnitTests/Program.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft. All rights reserved. namespace Microsoft.TestPlatform.Build.UnitTests -{ +{ public static class Program { public static void Main(string[] args) diff --git a/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs b/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs index 40e619742b..c2e58f104e 100644 --- a/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs +++ b/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs @@ -2,28 +2,35 @@ namespace Microsoft.TestPlatform.Build.UnitTests { + using System; using System.Linq; using Microsoft.TestPlatform.Build.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] - public class VsTestTaskTests + public class VSTestTaskTests { + private VSTestTask vsTestTask; + + public VSTestTaskTests() + { + this.vsTestTask = new VSTestTask(); + this.vsTestTask.TestFileFullPath = @"C:\path\to\test-assembly.dll"; + this.vsTestTask.VSTestFramework = ".NETCoreapp,Version2.0"; + } + [TestMethod] public void CreateArgumentShouldAddOneEntryForCLIRunSettings() { const string arg1 = "RunConfiguration.ResultsDirectory=Path having Space"; const string arg2 = "MSTest.DeploymentEnabled"; - var vstestTask = new VSTestTask { VSTestCLIRunSettings = new string[2] }; - vstestTask.VSTestCLIRunSettings[0] = arg1; - vstestTask.VSTestCLIRunSettings[1] = arg2; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - var result = vstestTask.CreateArgument().ToArray(); + this.vsTestTask.VSTestCLIRunSettings = new string[2]; + this.vsTestTask.VSTestCLIRunSettings[0] = arg1; + this.vsTestTask.VSTestCLIRunSettings[1] = arg2; + + var result = this.vsTestTask.CreateArgument().ToArray(); // First, second and third args would be --framework:abc, testfilepath and -- respectively. Assert.AreEqual($"\"{arg1}\"", result[3]); @@ -34,13 +41,9 @@ public void CreateArgumentShouldAddOneEntryForCLIRunSettings() public void CreateArgumentShouldPassResultsDirectoryCorrectly() { const string resultsDirectoryValue = @"C:\tmp\Results Directory"; - var vstestTask = new VSTestTask { VSTestResultsDirectory = resultsDirectoryValue }; + this.vsTestTask.VSTestResultsDirectory = resultsDirectoryValue; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - - var result = vstestTask.CreateArgument().ToArray(); + var result = this.vsTestTask.CreateArgument().ToArray(); Assert.AreEqual($"--resultsDirectory:\"{resultsDirectoryValue}\"", result[1]); } @@ -48,14 +51,10 @@ public void CreateArgumentShouldPassResultsDirectoryCorrectly() [TestMethod] public void CreateArgumentShouldNotSetConsoleLoggerVerbosityIfConsoleLoggerIsGivenInArgs() { - var vstestTask = new VSTestTask { VSTestVerbosity = "diag" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - vstestTask.VSTestLogger = new string[] { "Console;Verbosity=quiet" }; + this.vsTestTask.VSTestVerbosity = "diag"; + this.vsTestTask.VSTestLogger = new string[] { "Console;Verbosity=quiet" }; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=quiet"))); @@ -64,13 +63,9 @@ public void CreateArgumentShouldNotSetConsoleLoggerVerbosityIfConsoleLoggerIsGiv [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsn() { - var vstestTask = new VSTestTask { VSTestVerbosity = "n" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "n"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -78,13 +73,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsnormal() { - var vstestTask = new VSTestTask { VSTestVerbosity = "normal" }; + this.vsTestTask.VSTestVerbosity = "normal"; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -92,13 +83,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsd() { - var vstestTask = new VSTestTask { VSTestVerbosity = "d" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "d"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -106,13 +93,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsdetailed() { - var vstestTask = new VSTestTask { VSTestVerbosity = "detailed" }; + this.vsTestTask.VSTestVerbosity = "detailed"; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -120,13 +103,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsdiag() { - var vstestTask = new VSTestTask { VSTestVerbosity = "diag" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "diag"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -134,13 +113,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsdiagnostic() { - var vstestTask = new VSTestTask { VSTestVerbosity = "diagnostic" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "diagnostic"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=normal"))); } @@ -148,13 +123,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToNormalIfConsoleLogger [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToQuietIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsq() { - var vstestTask = new VSTestTask { VSTestVerbosity = "q" }; + this.vsTestTask.VSTestVerbosity = "q"; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=quiet"))); } @@ -162,13 +133,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToQuietIfConsoleLoggerI [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToQuietIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsquiet() { - var vstestTask = new VSTestTask { VSTestVerbosity = "quiet" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "quiet"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=quiet"))); } @@ -176,13 +143,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToQuietIfConsoleLoggerI [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToMinimalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsm() { - var vstestTask = new VSTestTask { VSTestVerbosity = "m" }; + this.vsTestTask.VSTestVerbosity = "m"; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=minimal"))); } @@ -190,13 +153,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToMinimalIfConsoleLogge [TestMethod] public void CreateArgumentShouldSetConsoleLoggerVerbosityToMinimalIfConsoleLoggerIsNotGivenInArgsAndVerbosityIsminimal() { - var vstestTask = new VSTestTask { VSTestVerbosity = "minimal" }; - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestVerbosity = "minimal"; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:Console;Verbosity=minimal"))); } @@ -204,15 +163,9 @@ public void CreateArgumentShouldSetConsoleLoggerVerbosityToMinimalIfConsoleLogge [TestMethod] public void CreateArgumentShouldPreserveWhiteSpaceInLogger() { - var vstestTask = new VSTestTask(); - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; - vstestTask.VSTestLogger = new string[] { "trx;LogFileName=foo bar.trx" }; - + this.vsTestTask.VSTestLogger = new string[] { "trx;LogFileName=foo bar.trx" }; - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:\"trx;LogFileName=foo bar.trx\""))); } @@ -220,16 +173,12 @@ public void CreateArgumentShouldPreserveWhiteSpaceInLogger() [TestMethod] public void CreateArgumentShouldAddOneCollectArgumentForEachCollect() { - var vstestTask = new VSTestTask { VSTestCollect = new string[2] }; + this.vsTestTask.VSTestCollect = new string[2]; - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestCollect[0] = "name1"; + this.vsTestTask.VSTestCollect[1] = "name 2"; - vstestTask.VSTestCollect[0] = "name1"; - vstestTask.VSTestCollect[1] = "name 2"; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--collect:name1"))); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--collect:\"name 2\""))); @@ -238,15 +187,9 @@ public void CreateArgumentShouldAddOneCollectArgumentForEachCollect() [TestMethod] public void CreateArgumentShouldAddMultipleTestAdapterPaths() { - var vstestTask = new VSTestTask(); - - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + this.vsTestTask.VSTestTestAdapterPath = new string[] { "path1", "path2" }; - vstestTask.VSTestTestAdapterPath = new string[] { "path1", "path2" }; - - var allArguments = vstestTask.CreateArgument().ToArray(); + var allArguments = this.vsTestTask.CreateArgument().ToArray(); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--testAdapterPath:path1"))); Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--testAdapterPath:path2"))); @@ -255,19 +198,50 @@ public void CreateArgumentShouldAddMultipleTestAdapterPaths() [TestMethod] public void CreateArgumentShouldAddMultipleLoggers() { - var vstestTask = new VSTestTask(); + this.vsTestTask.VSTestLogger = new string[] { "trx;LogFileName=foo bar.trx", "console" }; + var allArguments = this.vsTestTask.CreateArgument().ToArray(); - // Add values for required properties. - vstestTask.TestFileFullPath = "abc"; - vstestTask.VSTestFramework = "abc"; + Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:\"trx;LogFileName=foo bar.trx\""))); + Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:console"))); + } - vstestTask.VSTestLogger = new string[] { "trx;LogFileName=foo bar.trx", "console" }; + [TestMethod] + public void CreateArgumentShouldAddTraceCollectorDirectoryPathAsTestAdapterForCodeCoverageCollect() + { + const string traceDataCollectorDirectoryPath = @"c:\path\to\tracedata collector"; + this.vsTestTask.VSTestTraceDataCollectorDirectoryPath = traceDataCollectorDirectoryPath; + this.vsTestTask.VSTestCollect = new string[] { "code coverage" }; + var allArguments = this.vsTestTask.CreateArgument().ToArray(); - var allArguments = vstestTask.CreateArgument().ToArray(); + const string expectedArg = "--testAdapterPath:\"c:\\path\\to\\tracedata collector\""; + CollectionAssert.Contains(allArguments, expectedArg, $"Expected argument: '''{expectedArg}''' not present in [{string.Join(", ", allArguments)}]"); + } - Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:\"trx;LogFileName=foo bar.trx\""))); - Assert.IsNotNull(allArguments.FirstOrDefault(arg => arg.Contains("--logger:console"))); + [TestMethod] + public void CreateArgumentShouldNotAddTraceCollectorDirectoryPathAsTestAdapterForNonCodeCoverageCollect() + { + const string traceDataCollectorDirectoryPath = @"c:\path\to\tracedata collector"; + this.vsTestTask.VSTestTraceDataCollectorDirectoryPath = traceDataCollectorDirectoryPath; + this.vsTestTask.VSTestCollect = new string[] { "not code coverage" }; + + var allArguments = this.vsTestTask.CreateArgument().ToArray(); + + const string notExpectedArg = "--testAdapterPath:\"c:\\path\\to\\tracedata collector\""; + CollectionAssert.DoesNotContain(allArguments, notExpectedArg, $"Not expected argument: '''{notExpectedArg}''' present in [{string.Join(", ", allArguments)}]"); + } + + [TestMethod] + public void CreateArgumentShouldAddTraceCollectorDirectoryPathAsTestAdapterIfSettingsGiven() + { + const string traceDataCollectorDirectoryPath = @"c:\path\to\tracedatacollector\"; + this.vsTestTask.VSTestTraceDataCollectorDirectoryPath = traceDataCollectorDirectoryPath; + this.vsTestTask.VSTestSetting = @"c:\path\to\sample.runsettings"; + + var allArguments = this.vsTestTask.CreateArgument().ToArray(); + + const string expectedArg = "--testAdapterPath:c:\\path\\to\\tracedatacollector\\"; + CollectionAssert.Contains(allArguments, expectedArg, $"Expected argument: '''{expectedArg}''' not present in [{string.Join(", ", allArguments)}]"); } } } From 3ee4c7628a3a45c7ba4f9fcc1e8e47d626fe1663 Mon Sep 17 00:00:00 2001 From: samadala Date: Wed, 16 May 2018 19:07:17 +0530 Subject: [PATCH 3/3] Add empty test and comment --- .../Tasks/VSTestTask.cs | 7 +++++- .../VsTestTaskTests.cs | 22 +++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs b/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs index 74971162cc..ca7031c0bf 100644 --- a/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs +++ b/src/Microsoft.TestPlatform.Build/Tasks/VSTestTask.cs @@ -252,9 +252,14 @@ internal IEnumerable CreateArgument() if (isCollectCodeCoverageEnabled || isRunSettingsEnabled) { + // Pass TraceDataCollector path to vstest.console as TestAdapterPath if --collect "Code Coverage" // or --settings (User can enable code coverage from runsettings) option given. - // This is required due to currently trace datacollector not ships with dotnet sdk. + // Not parsing the runsettings for two reason: + // 1. To keep no knowledge of runsettings structure in VSTestTask. + // 2. Impact of adding adapter path always is minimal. (worst case: loads additional data collector assembly in datacollector process.) + // This is required due to currently trace datacollector not ships with dotnet sdk, can be remove once we have + // go code coverage x-plat. if (!string.IsNullOrEmpty(this.VSTestTraceDataCollectorDirectoryPath)) { allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestTraceDataCollectorDirectoryPath)); diff --git a/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs b/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs index c2e58f104e..a96194a666 100644 --- a/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs +++ b/test/Microsoft.TestPlatform.Build.UnitTests/VsTestTaskTests.cs @@ -11,13 +11,15 @@ namespace Microsoft.TestPlatform.Build.UnitTests [TestClass] public class VSTestTaskTests { - private VSTestTask vsTestTask; + private readonly VSTestTask vsTestTask; public VSTestTaskTests() { - this.vsTestTask = new VSTestTask(); - this.vsTestTask.TestFileFullPath = @"C:\path\to\test-assembly.dll"; - this.vsTestTask.VSTestFramework = ".NETCoreapp,Version2.0"; + this.vsTestTask = new VSTestTask + { + TestFileFullPath = @"C:\path\to\test-assembly.dll", + VSTestFramework = ".NETCoreapp,Version2.0" + }; } [TestMethod] @@ -243,5 +245,17 @@ public void CreateArgumentShouldAddTraceCollectorDirectoryPathAsTestAdapterIfSet const string expectedArg = "--testAdapterPath:c:\\path\\to\\tracedatacollector\\"; CollectionAssert.Contains(allArguments, expectedArg, $"Expected argument: '''{expectedArg}''' not present in [{string.Join(", ", allArguments)}]"); } + + [TestMethod] + public void CreateArgumentShouldNotAddTestAdapterPathIfVSTestTraceDataCollectorDirectoryPathIsEmpty() + { + this.vsTestTask.VSTestTraceDataCollectorDirectoryPath = string.Empty; + this.vsTestTask.VSTestSetting = @"c:\path\to\sample.runsettings"; + this.vsTestTask.VSTestCollect = new string[] { "code coverage" }; + + var allArguments = this.vsTestTask.CreateArgument().ToArray(); + + Assert.IsNull(allArguments.FirstOrDefault(arg => arg.Contains("--testAdapterPath:"))); + } } }