Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5d352ca

Browse files
committedJan 23, 2025·
use System.CommandLine V2.0.0-beta4 (latest)
1 parent e106d0d commit 5d352ca

File tree

20 files changed

+148
-114
lines changed

20 files changed

+148
-114
lines changed
 

‎.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,3 +227,4 @@ csharp_style_prefer_top_level_statements = true:silent
227227
csharp_style_prefer_primary_constructors = true:suggestion
228228
csharp_style_expression_bodied_lambdas = true:silent
229229
csharp_style_expression_bodied_local_functions = false:silent
230+
dotnet_diagnostic.IDE0007.severity = suggestion

‎Directory.Build.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
1616
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
1717
<LangVersion>12.0</LangVersion>
18-
<NoWarn>$(NoWarn);NU1507;NU5105;CS1591</NoWarn>
18+
<NoWarn>$(NoWarn);NU1507;NU5105;CS1591;NU1608;NU1900</NoWarn>
1919
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2020
<RestoreSources>
21+
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json
2122
https://api.nuget.org/v3/index.json;
2223
</RestoreSources>
2324
<!--<UsingMicrosoftArtifactsSdk>true</UsingMicrosoftArtifactsSdk>-->

‎Directory.Packages.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@
3939
<PackageVersion Include="ReportGenerator.Core" Version="5.3.11" />
4040
<!--For test issue 809 https://github.com/coverlet-coverage/coverlet/issues/809-->
4141
<PackageVersion Include="LinqKit.Microsoft.EntityFrameworkCore" Version="8.1.7" />
42-
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
42+
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.24528.1" />
4343
<!--To test issue 1104 https://github.com/coverlet-coverage/coverlet/issues/1104-->
4444
<PackageVersion Include="System.Collections.Immutable" Version="8.0.0" />
4545
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
46+
<PackageVersion Include="System.IO.Pipelines" Version="8.0.0" />
4647
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
4748
<PackageVersion Include="System.Reflection.Metadata" Version="8.0.1" />
4849
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.0" />

‎eng/azure-pipelines-nightly.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ steps:
1515
- task: NuGetAuthenticate@1
1616
displayName: Authenticate with NuGet feeds
1717

18+
- script: dotnet restore
19+
displayName: Restore packages
20+
1821
- script: dotnet pack -c Release /p:PublicRelease=false
1922
displayName: Create NuGet packages
2023

‎src/coverlet.collector/coverlet.collector.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
<Authors>tonerdo</Authors>
2828
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2929
<PackageProjectUrl>https://github.com/coverlet-coverage/coverlet</PackageProjectUrl>
30-
<PackageIconUrl>https://raw.githubusercontent.com/tonerdo/coverlet/master/_assets/coverlet-icon.svg?sanitize=true</PackageIconUrl>
3130
<PackageIcon>coverlet-icon.png</PackageIcon>
3231
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
3332
<Description>Coverlet is a cross platform code coverage library for .NET, with support for line, branch and method coverage.</Description>

‎src/coverlet.console/Program.cs

Lines changed: 74 additions & 64 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
// Copyright (c) Toni Solarin-Sodara
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

4+
using System.Runtime.CompilerServices;
5+
46
[assembly: System.Reflection.AssemblyKeyFileAttribute("coverlet.console.snk")]
7+
[assembly: InternalsVisibleTo("coverlet.integration.tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010001d24efbe9cbc2dc49b7a3d2ae34ca37cfb69b4f450acd768a22ce5cd021c8a38ae7dc68b2809a1ac606ad531b578f192a5690b2986990cbda4dd84ec65a3a4c1c36f6d7bb18f08592b93091535eaee2f0c8e48763ed7f190db2008e1f9e0facd5c0df5aaab74febd3430e09a428a72e5e6b88357f92d78e47512d46ebdc3cbb")]

‎src/coverlet.console/coverlet.console.csproj

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
@@ -16,15 +16,21 @@
1616
<PackageTags>coverage;testing;unit-test;lcov;opencover;quality</PackageTags>
1717
<PackageReadmeFile>GlobalTool.md</PackageReadmeFile>
1818
<PackageReleaseNotes>https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/Changelog.md</PackageReleaseNotes>
19-
<PackageIconUrl>https://raw.githubusercontent.com/tonerdo/coverlet/master/_assets/coverlet-icon.svg?sanitize=true</PackageIconUrl>
2019
<PackageIcon>coverlet-icon.png</PackageIcon>
2120
<PackageProjectUrl>https://github.com/coverlet-coverage/coverlet</PackageProjectUrl>
2221
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2322
<RepositoryType>git</RepositoryType>
23+
<RestoreSources>
24+
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-libraries/nuget/v3/index.json
25+
https://api.nuget.org/v3/index.json;
26+
</RestoreSources>
2427
</PropertyGroup>
25-
28+
2629
<ItemGroup>
2730
<PackageReference Include="System.CommandLine" />
31+
<PackageReference Include="System.Security.Cryptography.Pkcs" />
32+
<PackageReference Include="System.Text.RegularExpressions" VersionOverride="4.3.1" />
33+
<PackageReference Include="System.Net.Http" VersionOverride="4.3.4" />
2834
</ItemGroup>
2935

3036
<ItemGroup>

‎src/coverlet.core/coverlet.core.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>Library</OutputType>
55
<TargetFrameworks>netstandard2.0</TargetFrameworks>
66
<IsPackable>false</IsPackable>
7+
<NoWarn>$(NoWarn);IDE0057</NoWarn>
78
</PropertyGroup>
89

910
<ItemGroup>

‎src/coverlet.msbuild.tasks/coverlet.msbuild.tasks.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
<Authors>tonerdo</Authors>
2929
<PackageLicenseExpression>MIT</PackageLicenseExpression>
3030
<PackageProjectUrl>https://github.com/coverlet-coverage/coverlet</PackageProjectUrl>
31-
<PackageIconUrl>https://raw.githubusercontent.com/tonerdo/coverlet/master/_assets/coverlet-icon.svg?sanitize=true</PackageIconUrl>
3231
<PackageIcon>coverlet-icon.png</PackageIcon>
3332
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
3433
<DevelopmentDependency>true</DevelopmentDependency>

‎test/coverlet.core.tests/coverlet.core.tests.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3131
</PackageReference>
3232
<PackageReference Include="System.Collections.Immutable" />
33-
<PackageReference Include="System.Buffers" />
34-
<PackageReference Include="System.Memory" />
3533
<PackageReference Include="System.Text.Encoding.CodePages" />
3634
</ItemGroup>
3735

‎test/coverlet.integration.determisticbuild/coverlet.integration.determisticbuild.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<!-- Import coverlet version-->
33
<Import Project="$(MSBuildThisFileDirectory)\DeterministicTest.props" />
44

‎test/coverlet.integration.template/coverlet.integration.template.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFrameworks>net8.0</TargetFrameworks>

‎test/coverlet.integration.tests/BaseTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private protected ClonedTemplateProject CloneTemplateProject(bool cleanupOnDispo
7979
return new ClonedTemplateProject(finalRoot.FullName, cleanupOnDispose);
8080
}
8181

82-
private protected bool RunCommand(string command, string arguments, out string standardOutput, out string standardError, string workingDirectory = "")
82+
private protected int RunCommand(string command, string arguments, out string standardOutput, out string standardError, string workingDirectory = "")
8383
{
8484
Debug.WriteLine($"BaseTest.RunCommand: {command} {arguments}\nWorkingDirectory: {workingDirectory}");
8585
// https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.standardoutput?view=net-7.0&redirectedfrom=MSDN#System_Diagnostics_Process_StandardOutput
@@ -101,10 +101,10 @@ private protected bool RunCommand(string command, string arguments, out string s
101101
throw new XunitException($"Command 'dotnet {arguments}' didn't end after 5 minute");
102102
}
103103
standardError = eOut;
104-
return commandProcess.ExitCode == 0;
104+
return commandProcess.ExitCode;
105105
}
106106

107-
private protected bool DotnetCli(string arguments, out string standardOutput, out string standardError, string workingDirectory = "")
107+
private protected int DotnetCli(string arguments, out string standardOutput, out string standardError, string workingDirectory = "")
108108
{
109109
return RunCommand("dotnet", arguments, out standardOutput, out standardError, workingDirectory);
110110
}

‎test/coverlet.integration.tests/Collectors.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private protected virtual void AssertCollectorsInjection(ClonedTemplateProject c
8181
public void TestVsTest_Test()
8282
{
8383
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
84-
Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!), standardOutput);
84+
Assert.Equal(0, DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!));
8585
// We don't have any result to check because tests and code to instrument are in same assembly so we need to pass
8686
// IncludeTestAssembly=true we do it in other test
8787
Assert.Contains("Passed!", standardOutput);
@@ -93,7 +93,7 @@ public void TestVsTest_Test_Settings()
9393
{
9494
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
9595
string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!);
96-
Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError), standardOutput);
96+
Assert.Equal(0, DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" --collect:\"XPlat Code Coverage\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out string standardOutput, out string standardError));
9797
Assert.Contains("Passed!", standardOutput);
9898
AssertCoverage(clonedTemplateProject);
9999
AssertCollectorsInjection(clonedTemplateProject);
@@ -104,10 +104,10 @@ public void TestVsTest_VsTest()
104104
{
105105
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
106106
string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!);
107-
Assert.True(DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError), standardOutput);
107+
Assert.Equal(0, DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError));
108108
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish"));
109109
Assert.NotNull(publishedTestFile);
110-
Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput);
110+
Assert.Equal(0, DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError));
111111
// We don't have any result to check because tests and code to instrument are in same assembly so we need to pass
112112
// IncludeTestAssembly=true we do it in other test
113113
Assert.Contains("Passed!", standardOutput);
@@ -119,10 +119,10 @@ public void TestVsTest_VsTest_Settings()
119119
{
120120
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
121121
string runSettingsPath = AddCollectorRunsettingsFile(clonedTemplateProject.ProjectRootPath!);
122-
Assert.True(DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\"", out string standardOutput, out string standardError), standardOutput);
122+
Assert.Equal(0, DotnetCli($"publish -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\"", out string standardOutput, out string standardError));
123123
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => f.Contains("publish"));
124124
Assert.NotNull(publishedTestFile);
125-
Assert.True(DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --ResultsDirectory:\"{clonedTemplateProject.ProjectRootPath}\" /settings:\"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError), standardOutput);
125+
Assert.Equal(0, DotnetCli($"vstest \"{publishedTestFile}\" --collect:\"XPlat Code Coverage\" --ResultsDirectory:\"{clonedTemplateProject.ProjectRootPath}\" /settings:\"{runSettingsPath}\" --diag:{Path.Combine(clonedTemplateProject.ProjectRootPath, "log.txt")}", out standardOutput, out standardError));
126126
Assert.Contains("Passed!", standardOutput);
127127
AssertCoverage(clonedTemplateProject);
128128
AssertCollectorsInjection(clonedTemplateProject);

‎test/coverlet.integration.tests/DeterministicBuild.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public void Msbuild()
110110
string testResultFile = Path.Join(testResultPath, "coverage.json");
111111
string cmdArgument = $"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:CoverletOutput=\"{testResultFile}\" /p:DeterministicReport=true /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true";
112112
_output.WriteLine($"Command: dotnet {cmdArgument}");
113-
bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
113+
int result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
114114
if (!string.IsNullOrEmpty(standardError))
115115
{
116116
_output.WriteLine(standardError);
@@ -119,7 +119,7 @@ public void Msbuild()
119119
{
120120
_output.WriteLine(standardOutput);
121121
}
122-
Assert.True(result);
122+
Assert.Equal(0, result);
123123
Assert.Contains("Passed!", standardOutput);
124124
Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput);
125125
Assert.True(File.Exists(testResultFile));
@@ -154,7 +154,7 @@ public void Msbuild_SourceLink()
154154
string testResultFile = Path.Join(testResultPath, "coverage.json");
155155
string cmdArgument = $"test -c {_buildConfiguration} --no-build /p:CollectCoverage=true /p:CoverletOutput=\"{testResultFile}\" /p:CoverletOutputFormat=\"cobertura%2cjson\" /p:UseSourceLink=true /p:Include=\"[coverletsample.integration.determisticbuild]*DeepThought\" /p:IncludeTestAssembly=true";
156156
_output.WriteLine($"Command: dotnet {cmdArgument}");
157-
bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
157+
int result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
158158
if (!string.IsNullOrEmpty(standardError))
159159
{
160160
_output.WriteLine(standardError);
@@ -163,7 +163,7 @@ public void Msbuild_SourceLink()
163163
{
164164
_output.WriteLine(standardOutput);
165165
}
166-
Assert.True(result);
166+
Assert.Equal(0, result);
167167
Assert.Contains("Passed!", standardOutput);
168168
Assert.Contains("| coverletsample.integration.determisticbuild | 100% | 100% | 100% |", standardOutput);
169169
Assert.True(File.Exists(testResultFile));
@@ -203,7 +203,7 @@ public void Collectors()
203203
string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", deterministicReport: true);
204204
string cmdArgument = $"test -c {_buildConfiguration} --no-build --collect:\"XPlat Code Coverage\" --results-directory:\"{testResultPath}\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(testLogFilesPath, "log.txt")}";
205205
_output.WriteLine($"Command: dotnet {cmdArgument}");
206-
bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
206+
int result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
207207
if (!string.IsNullOrEmpty(standardError))
208208
{
209209
_output.WriteLine(standardError);
@@ -212,7 +212,7 @@ public void Collectors()
212212
{
213213
_output.WriteLine(standardOutput);
214214
}
215-
Assert.True(result);
215+
Assert.Equal(0, result);
216216
Assert.Contains("Passed!", standardOutput);
217217
AssertCoverage(standardOutput);
218218

@@ -258,7 +258,7 @@ public void Collectors_SourceLink()
258258
string runSettingsPath = AddCollectorRunsettingsFile(_testProjectPath, "[coverletsample.integration.determisticbuild]*DeepThought", sourceLink: true);
259259
string cmdArgument = $"test -c {_buildConfiguration} --no-build --collect:\"XPlat Code Coverage\" --results-directory:\"{testResultPath}\" --settings \"{runSettingsPath}\" --diag:{Path.Combine(testLogFilesPath, "log.txt")}";
260260
_output.WriteLine($"Command: dotnet {cmdArgument}");
261-
bool result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
261+
int result = DotnetCli(cmdArgument, out standardOutput, out standardError, _testProjectPath);
262262
if (!string.IsNullOrEmpty(standardError))
263263
{
264264
_output.WriteLine(standardError);
@@ -267,7 +267,7 @@ public void Collectors_SourceLink()
267267
{
268268
_output.WriteLine(standardOutput);
269269
}
270-
Assert.True(result);
270+
Assert.Equal(0, result);
271271
Assert.Contains("Passed!", standardOutput);
272272
AssertCoverage(standardOutput, checkDeterministicReport: false);
273273

@@ -300,7 +300,7 @@ private static void DeleteTestIntermediateFiles(string testResultsPath)
300300
{
301301
if (Directory.Exists(testResultsPath))
302302
{
303-
DirectoryInfo hdDirectory = new DirectoryInfo(testResultsPath);
303+
DirectoryInfo hdDirectory = new (testResultsPath);
304304

305305
// search for directory "In" which has second copy e.g. '_fv-az365-374_2023-10-10_14_26_42\In\fv-az365-374\coverage.json'
306306
DirectoryInfo[] intermediateFolder = hdDirectory.GetDirectories("In", SearchOption.AllDirectories);
@@ -316,7 +316,7 @@ private static void DeleteLogFiles(string directory)
316316
{
317317
if (Directory.Exists(directory))
318318
{
319-
DirectoryInfo hdDirectory = new DirectoryInfo(directory);
319+
DirectoryInfo hdDirectory = new (directory);
320320
FileInfo[] filesInDir = hdDirectory.GetFiles("log.*.txt");
321321

322322
foreach (FileInfo foundFile in filesInDir)
@@ -344,7 +344,7 @@ private static void DeleteCoverageFiles(string directory)
344344
{
345345
if (Directory.Exists(directory))
346346
{
347-
DirectoryInfo hdDirectory = new DirectoryInfo(directory);
347+
DirectoryInfo hdDirectory = new (directory);
348348
FileInfo[] filesInDir = hdDirectory.GetFiles("coverage.cobertura.xml");
349349

350350
foreach (FileInfo foundFile in filesInDir)

‎test/coverlet.integration.tests/DotnetTool.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ public DotnetGlobalTools(ITestOutputHelper output)
2121
}
2222
private string InstallTool(string projectPath)
2323
{
24-
_ = DotnetCli($"tool install coverlet.console --version {GetPackageVersion("*console*.nupkg")} --tool-path \"{Path.Combine(projectPath, "coverletTool")}\"", out string standardOutput, out _, projectPath);
24+
_ = DotnetCli($"tool install coverlet.console --version {GetPackageVersion("*console*.nupkg")} --tool-path \"{Path.Combine(projectPath, "coverletTool")}\"", out string standardOutput, out string standardError, projectPath);
25+
if (!string.IsNullOrEmpty(standardError))
26+
{
27+
_output.WriteLine(standardError);
28+
}
29+
Assert.Contains("", standardError);
2530
Assert.Contains("was successfully installed.", standardOutput);
2631
return Path.Combine(projectPath, "coverletTool", "coverlet");
2732
}
@@ -35,13 +40,14 @@ public void DotnetTool()
3540
string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json";
3641
DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError);
3742
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref"));
38-
RunCommand(coverletToolCommandPath, $"\"{publishedTestFile}\" --target \"dotnet\" --targetargs \"test {Path.Combine(clonedTemplateProject.ProjectRootPath, ClonedTemplateProject.ProjectFileName)} --no-build\" --include-test-assembly --output \"{outputPath}\"", out standardOutput, out standardError);
43+
int result = RunCommand(coverletToolCommandPath, $"\"{publishedTestFile}\" --target \"dotnet\" --targetargs \"test {Path.Combine(clonedTemplateProject.ProjectRootPath, ClonedTemplateProject.ProjectFileName)} --no-build\" --include-test-assembly --output \"{outputPath}\"", out standardOutput, out standardError);
3944
if (!string.IsNullOrEmpty(standardError))
4045
{
4146
_output.WriteLine(standardError);
4247
}
4348
Assert.Contains("Passed!", standardOutput);
4449
AssertCoverage(clonedTemplateProject, standardOutput: standardOutput);
50+
Assert.Equal((int)CommandExitCodes.Success, result);
4551
}
4652

4753
[Fact]
@@ -53,14 +59,15 @@ public void StandAlone()
5359
string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json";
5460
DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError);
5561
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref"));
56-
RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --output \"{outputPath}\"", out standardOutput, out standardError);
62+
int result = RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --output \"{outputPath}\"", out standardOutput, out standardError);
5763
if (!string.IsNullOrEmpty(standardError))
5864
{
5965
_output.WriteLine(standardError);
6066
}
6167
Assert.Contains("Hello World!", standardOutput);
6268
Assert.True(File.Exists(outputPath));
6369
AssertCoverage(clonedTemplateProject, standardOutput: standardOutput);
70+
Assert.Equal((int)CommandExitCodes.Success, result);
6471
}
6572

6673
[Fact]
@@ -72,7 +79,7 @@ public void StandAloneThreshold()
7279
string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json";
7380
DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError);
7481
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref"));
75-
Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --output \"{outputPath}\"", out standardOutput, out standardError));
82+
int result = RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --output \"{outputPath}\"", out standardOutput, out standardError);
7683
if (!string.IsNullOrEmpty(standardError))
7784
{
7885
_output.WriteLine(standardError);
@@ -85,6 +92,7 @@ public void StandAloneThreshold()
8592
Assert.Contains("Hello World!", standardOutput);
8693
Assert.True(File.Exists(outputPath));
8794
AssertCoverage(clonedTemplateProject, standardOutput: standardOutput);
95+
Assert.Equal((int)CommandExitCodes.CoverageBelowThreshold, result);
8896
Assert.Contains("The minimum line coverage is below the specified 80", standardOutput);
8997
Assert.Contains("The minimum method coverage is below the specified 80", standardOutput);
9098
}
@@ -98,7 +106,7 @@ public void StandAloneThresholdLine()
98106
string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json";
99107
DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError);
100108
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref"));
101-
Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --output \"{outputPath}\"", out standardOutput, out standardError));
109+
int result = RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --output \"{outputPath}\"", out standardOutput, out standardError);
102110
if (!string.IsNullOrEmpty(standardError))
103111
{
104112
_output.WriteLine(standardError);
@@ -111,6 +119,7 @@ public void StandAloneThresholdLine()
111119
Assert.Contains("Hello World!", standardOutput);
112120
Assert.True(File.Exists(outputPath));
113121
AssertCoverage(clonedTemplateProject, standardOutput: standardOutput);
122+
Assert.Equal((int)CommandExitCodes.CoverageBelowThreshold, result);
114123
Assert.Contains("The minimum line coverage is below the specified 80", standardOutput);
115124
Assert.DoesNotContain("The minimum method coverage is below the specified 80", standardOutput);
116125
}
@@ -124,7 +133,7 @@ public void StandAloneThresholdLineAndMethod()
124133
string outputPath = $"{clonedTemplateProject.ProjectRootPath}{Path.DirectorySeparatorChar}coverage.json";
125134
DotnetCli($"build -f {_buildTargetFramework} {clonedTemplateProject.ProjectRootPath}", out string standardOutput, out string standardError);
126135
string publishedTestFile = clonedTemplateProject.GetFiles("*" + ClonedTemplateProject.AssemblyName + ".dll").Single(f => !f.Contains("obj") && !f.Contains("ref"));
127-
Assert.False(RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --threshold-type method --output \"{outputPath}\"", out standardOutput, out standardError));
136+
int result = RunCommand(coverletToolCommandPath, $"\"{Path.GetDirectoryName(publishedTestFile)}\" --target \"dotnet\" --targetargs \"{publishedTestFile}\" --threshold 80 --threshold-type line --threshold-type method --output \"{outputPath}\"", out standardOutput, out standardError);
128137
if (!string.IsNullOrEmpty(standardError))
129138
{
130139
_output.WriteLine(standardError);
@@ -137,6 +146,7 @@ public void StandAloneThresholdLineAndMethod()
137146
Assert.Contains("Hello World!", standardOutput);
138147
Assert.True(File.Exists(outputPath));
139148
AssertCoverage(clonedTemplateProject, standardOutput: standardOutput);
149+
Assert.Equal((int)CommandExitCodes.CoverageBelowThreshold, result);
140150
Assert.Contains("The minimum line coverage is below the specified 80", standardOutput);
141151
Assert.Contains("The minimum method coverage is below the specified 80", standardOutput);
142152
}

‎test/coverlet.integration.tests/Msbuild.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ private ClonedTemplateProject PrepareTemplateProject()
3535
public void TestMsbuild()
3636
{
3737
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
38-
bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError);
38+
int result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError);
3939
if (!string.IsNullOrEmpty(standardError))
4040
{
4141
_output.WriteLine(standardError);
@@ -44,7 +44,7 @@ public void TestMsbuild()
4444
{
4545
_output.WriteLine(standardOutput);
4646
}
47-
Assert.True(result);
47+
Assert.Equal(0, result);
4848
Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
4949
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal);
5050
string coverageFileName = $"coverage.{_buildTargetFramework}.json";
@@ -56,7 +56,7 @@ public void TestMsbuild()
5656
public void TestMsbuild_NoCoverletOutput()
5757
{
5858
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
59-
bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError);
59+
int result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true", out string standardOutput, out string standardError);
6060
if (!string.IsNullOrEmpty(standardError))
6161
{
6262
_output.WriteLine(standardError);
@@ -65,7 +65,7 @@ public void TestMsbuild_NoCoverletOutput()
6565
{
6666
_output.WriteLine(standardOutput);
6767
}
68-
Assert.True(result);
68+
Assert.Equal(0, result);
6969
Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
7070
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal);
7171
string coverageFileName = $"coverage.{_buildTargetFramework}.json";
@@ -77,7 +77,7 @@ public void TestMsbuild_NoCoverletOutput()
7777
public void TestMsbuild_CoverletOutput_Folder_FileNameWithoutExtension()
7878
{
7979
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
80-
bool result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError);
80+
int result = DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file", out string standardOutput, out string standardError);
8181
if (!string.IsNullOrEmpty(standardError))
8282
{
8383
_output.WriteLine(standardError);
@@ -86,7 +86,8 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameWithoutExtension()
8686
{
8787
_output.WriteLine(standardOutput);
8888
}
89-
Assert.True(result); Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
89+
Assert.Equal(0, result);
90+
Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
9091
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal);
9192
string coverageFileName = $"file.{_buildTargetFramework}.json";
9293
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, coverageFileName)));
@@ -97,7 +98,7 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameWithoutExtension()
9798
public void TestMsbuild_CoverletOutput_Folder_FileNameExtension()
9899
{
99100
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
100-
Assert.True(DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError), standardOutput);
101+
Assert.Equal(0, DotnetCli($"test -c {_buildConfiguration} -f {_buildTargetFramework} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext", out string standardOutput, out string standardError));
101102
Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
102103
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal);
103104
string coverageFileName = $"file.{_buildTargetFramework}.ext";
@@ -180,7 +181,7 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder()
180181
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
181182
string[] targetFrameworks = new string[] { "net6.0", "net8.0" };
182183
UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks);
183-
bool result = DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!);
184+
int result = DotnetCli($"test -c {_buildConfiguration} \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\", out string standardOutput, out string standardError, clonedTemplateProject.ProjectRootPath!);
184185
if (!string.IsNullOrEmpty(standardError))
185186
{
186187
_output.WriteLine(standardError);
@@ -189,7 +190,7 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder()
189190
{
190191
_output.WriteLine(standardOutput);
191192
}
192-
Assert.True(result);
193+
Assert.Equal(0, result);
193194
Assert.Contains("Passed!", standardOutput, StringComparison.Ordinal);
194195
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput, StringComparison.Ordinal);
195196

‎test/coverlet.integration.tests/WpfResolverTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void TestInstrument_NetCoreSharedFrameworkResolver()
2424
string buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant();
2525
string wpfProjectPath = TestUtils.GetTestProjectPath("coverlet.tests.projectsample.wpf8");
2626
string testBinaryPath = Path.Combine(TestUtils.GetTestBinaryPath("coverlet.tests.projectsample.wpf8"), buildConfiguration);
27-
Assert.True(DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error));
27+
Assert.Equal(0, DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error));
2828
string assemblyLocation = Directory.GetFiles(testBinaryPath, "coverlet.tests.projectsample.wpf8.dll", SearchOption.AllDirectories).First();
2929

3030
var mockLogger = new Mock<ILogger>();
@@ -52,7 +52,7 @@ public void TestInstrument_NetCoreSharedFrameworkResolver_SelfContained()
5252
string buildConfiguration = TestUtils.GetAssemblyBuildConfiguration().ToString().ToLowerInvariant();
5353
string wpfProjectPath = TestUtils.GetTestProjectPath("coverlet.tests.projectsample.wpf8.selfcontained");
5454
string testBinaryPath = Path.Combine(TestUtils.GetTestBinaryPath("coverlet.tests.projectsample.wpf8.selfcontained"), $"{buildConfiguration}_win-x64");
55-
Assert.True(DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error));
55+
Assert.Equal(0, DotnetCli($"build \"{wpfProjectPath}\"", out string output, out string error));
5656
string assemblyLocation = Directory.GetFiles(testBinaryPath, "coverlet.tests.projectsample.wpf8.selfcontained.dll", SearchOption.AllDirectories).First();
5757

5858
var mockLogger = new Mock<ILogger>();

‎test/coverlet.integration.tests/coverlet.integration.tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>net8.0</TargetFrameworks>
44
<IsPackable>false</IsPackable>
@@ -26,6 +26,7 @@
2626

2727
<ItemGroup>
2828
<ProjectReference Include="$(RepoRoot)src\coverlet.core\coverlet.core.csproj" />
29+
<ProjectReference Include="$(RepoRoot)src\coverlet.console\coverlet.console.csproj" />
2930
<ProjectReference Include="$(RepoRoot)test\coverlet.tests.utils\coverlet.tests.utils.csproj" />
3031
<ProjectReference Include="$(RepoRoot)test\coverlet.integration.template\coverlet.integration.template.csproj" />
3132
<ProjectReference Include="$(RepoRoot)test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj" />

0 commit comments

Comments
 (0)
Please sign in to comment.