diff --git a/TestPlatform.sln b/TestPlatform.sln index 1fc804afa4..b747c1e544 100644 --- a/TestPlatform.sln +++ b/TestPlatform.sln @@ -157,7 +157,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TestPlatform.Exte EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TestPlatform.Extensions.HtmlLogger.UnitTests", "test\Microsoft.TestPlatform.Extensions.HtmlLogger.UnitTests\Microsoft.TestPlatform.Extensions.HtmlLogger.UnitTests.csproj", "{41248B96-6E15-4E5E-A78F-859897676814}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector", "test\coverlet.collector\coverlet.collector.csproj", "{074F5BD6-DC05-460B-B78F-044D125FD787}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "coverlet.collector", "test\TestAssets\coverlet.collector\coverlet.collector.csproj", "{F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectFileRunSettingsTestProject", "test\TestAssets\ProjectFileRunSettingsTestProject\ProjectFileRunSettingsTestProject.csproj", "{8E87F6E4-E884-4404-B2E5-CBFB28038AE5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoverletCoverageTestProject", "test\TestAssets\CoverletCoverageTestProject\CoverletCoverageTestProject.csproj", "{700CE03D-926C-4166-900E-143A353F3E58}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -769,6 +773,42 @@ Global {41248B96-6E15-4E5E-A78F-859897676814}.Release|x64.Build.0 = Release|Any CPU {41248B96-6E15-4E5E-A78F-859897676814}.Release|x86.ActiveCfg = Release|Any CPU {41248B96-6E15-4E5E-A78F-859897676814}.Release|x86.Build.0 = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|x64.ActiveCfg = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|x64.Build.0 = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Debug|x86.Build.0 = Debug|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|Any CPU.Build.0 = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|x64.ActiveCfg = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|x64.Build.0 = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|x86.ActiveCfg = Release|Any CPU + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3}.Release|x86.Build.0 = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|x64.ActiveCfg = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|x64.Build.0 = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|x86.ActiveCfg = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Debug|x86.Build.0 = Debug|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|Any CPU.Build.0 = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|x64.ActiveCfg = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|x64.Build.0 = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|x86.ActiveCfg = Release|Any CPU + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5}.Release|x86.Build.0 = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|x64.ActiveCfg = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|x64.Build.0 = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|x86.ActiveCfg = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Debug|x86.Build.0 = Debug|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|Any CPU.Build.0 = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|x64.ActiveCfg = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|x64.Build.0 = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|x86.ActiveCfg = Release|Any CPU + {700CE03D-926C-4166-900E-143A353F3E58}.Release|x86.Build.0 = Release|Any CPU {074F5BD6-DC05-460B-B78F-044D125FD787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {074F5BD6-DC05-460B-B78F-044D125FD787}.Debug|Any CPU.Build.0 = Debug|Any CPU {074F5BD6-DC05-460B-B78F-044D125FD787}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -847,6 +887,9 @@ Global {E7D4921C-F12D-4E1C-85AC-8B7F91C59B0E} = {B27FAFDF-2DBA-4AB0-BA85-FD5F21D359D6} {236A71E3-01DA-4679-9DFF-16A8E079ACFF} = {5E7F18A8-F843-4C8A-AB02-4C7D9205C6CF} {41248B96-6E15-4E5E-A78F-859897676814} = {020E15EA-731F-4667-95AF-226671E0C3AE} + {F1D8630D-97D5-4CD7-BC18-A5E1779FA6E3} = {8DA7CBD9-F17E-41B6-90C4-CFF55848A25A} + {8E87F6E4-E884-4404-B2E5-CBFB28038AE5} = {8DA7CBD9-F17E-41B6-90C4-CFF55848A25A} + {700CE03D-926C-4166-900E-143A353F3E58} = {8DA7CBD9-F17E-41B6-90C4-CFF55848A25A} {074F5BD6-DC05-460B-B78F-044D125FD787} = {B27FAFDF-2DBA-4AB0-BA85-FD5F21D359D6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/scripts/build.ps1 b/scripts/build.ps1 index 0047a6373d..e49b72d7eb 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -281,6 +281,10 @@ function Publish-PatchedDotnet { Write-Log "Publish-PatchedDotnet: Copy VSTest task artifacts to local dotnet installation to allow `dotnet test` to run with it" $buildArtifactsPath = "$env:TP_ROOT_DIR\src\Microsoft.TestPlatform.Build\bin\$TPB_Configuration\$TPB_TargetFrameworkNS2_0\*" Copy-Item $buildArtifactsPath $dotnetTestArtifactsSdkPath -Force + + Write-Log "Publish-PatchedDotnet: Copy vstest.console.dll artifact to local dotnet installation to allow `dotnet test` to run with it" + $buildArtifactsPath = "$env:TP_ROOT_DIR\src\vstest.console\bin\$TPB_Configuration\$TPB_TargetFrameworkCore20\vstest.console.dll" + Copy-Item $buildArtifactsPath $dotnetTestArtifactsSdkPath -Force } function Publish-Package diff --git a/test/Microsoft.TestPlatform.SmokeTests/DataCollectorTests.Coverlet.cs b/test/Microsoft.TestPlatform.SmokeTests/DataCollectorTests.Coverlet.cs new file mode 100644 index 0000000000..14418a3f90 --- /dev/null +++ b/test/Microsoft.TestPlatform.SmokeTests/DataCollectorTests.Coverlet.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace Microsoft.TestPlatform.SmokeTests +{ + using Microsoft.TestPlatform.TestUtilities; + using Microsoft.VisualStudio.TestTools.UnitTesting; + using System; + using System.IO; + using System.Linq; + using System.Reflection; + + [TestClass] + public class DataCollectorTestsCoverlets : IntegrationTestBase + { + [TestMethod] + public void RunCoverletCoverage() + { + string projectFileName = this.GetProjectAssetFullPath("CoverletCoverageTestProject.csproj", "CoverletCoverageTestProject.csproj"); + string logId = Guid.NewGuid().ToString("N"); + this.InvokeDotnetTest($"--collect:\"XPlat Code Coverage\" {projectFileName} --diag:coverletcoverage.{logId}.log"); + var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + + // Verify vstest.console.dll CollectArgumentProcessor fix codeBase for coverlet package + var log = Directory.GetFiles(currentDir, $"coverletcoverage.{logId}.log").Single(); + Assert.IsTrue(File.ReadAllText(log).Contains("CoverletDataCollector in-process codeBase path")); + + // Verify out-of-proc coverlet collector load + var dataCollectorLog = Directory.GetFiles(currentDir, $"coverletcoverage.{logId}.datacollector*log").Single(); + Assert.IsTrue(File.ReadAllText(dataCollectorLog).Contains("[coverlet]Initializing CoverletCoverageDataCollector")); + + // Verify in-proc coverlet collector load + var hostLog = Directory.GetFiles(currentDir, $"coverletcoverage.{logId}.host*log").Single(); + Assert.IsTrue(File.ReadAllText(hostLog).Contains("[coverlet]Initialize CoverletInProcDataCollector")); + + // Verify default coverage file is generated + this.StdOutputContains("coverage.cobertura.xml"); + } + } +} diff --git a/test/Microsoft.TestPlatform.TestUtilities/IntegrationTestBase.cs b/test/Microsoft.TestPlatform.TestUtilities/IntegrationTestBase.cs index 724dea78ed..cf0e71da1b 100644 --- a/test/Microsoft.TestPlatform.TestUtilities/IntegrationTestBase.cs +++ b/test/Microsoft.TestPlatform.TestUtilities/IntegrationTestBase.cs @@ -526,8 +526,7 @@ private void ExecutePatchedDotnet(string command, string args, out string stdOut var environmentVariables = new Dictionary { ["DOTNET_MULTILEVEL_LOOKUP"] = "0" }; - - var patchedDotnetPath = Path.Combine(this.testEnvironment.TestArtifactsDirectory, @"dotnet\dotnet.exe"); ; + var patchedDotnetPath = Path.Combine(this.testEnvironment.TestArtifactsDirectory, @"dotnet\dotnet.exe"); this.ExecuteApplication(patchedDotnetPath, string.Join(" ", command, args), out stdOut, out stdError, out exitCode, environmentVariables); } diff --git a/test/TestAssets/CoverletCoverageTestProject/CoverletCoverageTestProject.csproj b/test/TestAssets/CoverletCoverageTestProject/CoverletCoverageTestProject.csproj new file mode 100644 index 0000000000..0a53a6d54e --- /dev/null +++ b/test/TestAssets/CoverletCoverageTestProject/CoverletCoverageTestProject.csproj @@ -0,0 +1,19 @@ + + + + + + + + netcoreapp2.1 + false + + + + + + + + + + diff --git a/test/TestAssets/CoverletCoverageTestProject/UnitTest1.cs b/test/TestAssets/CoverletCoverageTestProject/UnitTest1.cs new file mode 100644 index 0000000000..07b48704bd --- /dev/null +++ b/test/TestAssets/CoverletCoverageTestProject/UnitTest1.cs @@ -0,0 +1,14 @@ +using System; +using Xunit; + +namespace CoverletCoverageTestProject +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +}