Skip to content

Commit 0f031e2

Browse files
Fix back-compat issue with old file report naming (#668)
Fix back-compat issue with old file report naming
1 parent 81daeb8 commit 0f031e2

File tree

4 files changed

+74
-15
lines changed

4 files changed

+74
-15
lines changed

src/coverlet.msbuild.tasks/ReportWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ public void WriteReport()
3535
else if (Path.HasExtension(filename))
3636
{
3737
// filename with extension for instance c:\reportpath\file.ext
38-
// c:\reportpath\file.ext.reportedextension
39-
filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}.{_reporter.Extension}";
38+
// we keep user specified name
39+
filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}";
4040
}
4141
else
4242
{

test/coverlet.core.tests/Reporters/Reporters.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ public class Reporters
1616
// single tfm
1717
[InlineData("", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.info")]
1818
[InlineData(null, "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.cobertura.xml")]
19-
[InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext.cobertura.xml")]
20-
[InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2.cobertura.xml")]
19+
[InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext")]
20+
[InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2")]
2121
[InlineData(null, "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.cobertura.xml")]
2222
[InlineData(null, "file", "cobertura", "file.cobertura.xml")]
2323
// multiple tfm
2424
[InlineData("netcoreapp2.2", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.netcoreapp2.2.info")]
2525
[InlineData("netcoreapp2.2", "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.netcoreapp2.2.cobertura.xml")]
26-
[InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext.cobertura.xml")]
27-
[InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2.cobertura.xml")]
26+
[InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext")]
27+
[InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2")]
2828
[InlineData("netcoreapp2.2", "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.netcoreapp2.2.cobertura.xml")]
2929
[InlineData("netcoreapp2.2", "file", "cobertura", "file.netcoreapp2.2.cobertura.xml")]
3030
public void Msbuild_ReportWriter(string coverletMultiTargetFrameworksCurrentTFM, string coverletOutput, string reportFormat, string expectedFileName)

test/coverlet.integration.tests/BaseTest.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,24 @@ class ClonedTemplateProject : IDisposable
288288

289289
public ClonedTemplateProject(string projectRootPath, bool cleanupOnDispose) => (ProjectRootPath, _cleanupOnDispose) = (projectRootPath, cleanupOnDispose);
290290

291+
public bool IsMultipleTargetFramework()
292+
{
293+
using var csprojStream = File.OpenRead(ProjectFileNamePath);
294+
XDocument xml = XDocument.Load(csprojStream);
295+
return xml.Element("Project").Element("PropertyGroup").Element("TargetFramework") == null;
296+
}
291297

298+
public string[] GetTargetFrameworks()
299+
{
300+
using var csprojStream = File.OpenRead(ProjectFileNamePath);
301+
XDocument xml = XDocument.Load(csprojStream);
302+
XElement element = xml.Element("Project").Element("PropertyGroup").Element("TargetFramework") ?? xml.Element("Project").Element("PropertyGroup").Element("TargetFrameworks");
303+
if (element is null)
304+
{
305+
throw new ArgumentNullException("No 'TargetFramework' neither 'TargetFrameworks' found in csproj file");
306+
}
307+
return element.Value.Split(";");
308+
}
292309

293310
public string[] GetFiles(string filter)
294311
{

test/coverlet.integration.tests/Msbuild.cs

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using System.IO;
2-
2+
using System.Linq;
33
using Xunit;
44

55
namespace Coverlet.Integration.Tests
@@ -54,8 +54,21 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameExtension()
5454
Assert.True(DotnetCli($"test \"{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);
5555
Assert.Contains("Test Run Successful.", standardOutput);
5656
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
57-
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext.json")));
58-
AssertCoverage(clonedTemplateProject, "file.ext.json");
57+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext")));
58+
AssertCoverage(clonedTemplateProject, "file.ext");
59+
}
60+
61+
[Fact]
62+
public void TestMsbuild_CoverletOutput_Folder_FileNameExtension_SpecifyFramework()
63+
{
64+
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
65+
Assert.False(clonedTemplateProject.IsMultipleTargetFramework());
66+
string framework = clonedTemplateProject.GetTargetFrameworks().Single();
67+
Assert.True(DotnetCli($"test -f {framework} \"{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);
68+
Assert.Contains("Test Run Successful.", standardOutput);
69+
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
70+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext")));
71+
AssertCoverage(clonedTemplateProject, "file.ext");
5972
}
6073

6174
[Fact]
@@ -65,8 +78,8 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameWithDoubleExtension()
6578
Assert.True(DotnetCli($"test \"{clonedTemplateProject.ProjectRootPath}\" /p:CollectCoverage=true /p:Include=\"[{ClonedTemplateProject.AssemblyName}]*DeepThought\" /p:IncludeTestAssembly=true /p:CoverletOutput=\"{clonedTemplateProject.ProjectRootPath}\"\\file.ext1.ext2", out string standardOutput, out string standardError), standardOutput);
6679
Assert.Contains("Test Run Successful.", standardOutput);
6780
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
68-
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext1.ext2.json")));
69-
AssertCoverage(clonedTemplateProject, "file.ext1.ext2.json");
81+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext1.ext2")));
82+
AssertCoverage(clonedTemplateProject, "file.ext1.ext2");
7083
}
7184

7285
[Fact]
@@ -123,6 +136,35 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit
123136
AssertCoverage(clonedTemplateProject, "file.*.json");
124137
}
125138

139+
[Fact]
140+
public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension_SpecifyFramework()
141+
{
142+
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
143+
string[] targetFrameworks = new string[] { "netcoreapp2.2", "netcoreapp2.1" };
144+
UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks);
145+
Assert.True(clonedTemplateProject.IsMultipleTargetFramework());
146+
string[] frameworks = clonedTemplateProject.GetTargetFrameworks();
147+
Assert.Equal(2, frameworks.Length);
148+
string framework = frameworks.FirstOrDefault();
149+
Assert.True(DotnetCli($"test -f {framework} \"{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, clonedTemplateProject.ProjectRootPath!), standardOutput);
150+
Assert.Contains("Test Run Successful.", standardOutput);
151+
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
152+
153+
foreach (string targetFramework in targetFrameworks)
154+
{
155+
if (framework == targetFramework)
156+
{
157+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
158+
}
159+
else
160+
{
161+
Assert.False(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
162+
}
163+
}
164+
165+
AssertCoverage(clonedTemplateProject, "file.*.ext");
166+
}
167+
126168
[Fact]
127169
public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension()
128170
{
@@ -135,10 +177,10 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit
135177

136178
foreach (string targetFramework in targetFrameworks)
137179
{
138-
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext.json")));
180+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
139181
}
140182

141-
AssertCoverage(clonedTemplateProject, "file.*.ext.json");
183+
AssertCoverage(clonedTemplateProject, "file.*.ext");
142184
}
143185

144186
[Fact]
@@ -153,10 +195,10 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit
153195

154196
foreach (string targetFramework in targetFrameworks)
155197
{
156-
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2.json")));
198+
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2")));
157199
}
158200

159-
AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2.json");
201+
AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2");
160202
}
161203
}
162204
}

0 commit comments

Comments
 (0)