Skip to content

Commit

Permalink
Fix back-compat issue with old file report naming (#668)
Browse files Browse the repository at this point in the history
Fix back-compat issue with old file report naming
  • Loading branch information
MarcoRossignoli authored Dec 23, 2019
1 parent 81daeb8 commit 0f031e2
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 15 deletions.
4 changes: 2 additions & 2 deletions src/coverlet.msbuild.tasks/ReportWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public void WriteReport()
else if (Path.HasExtension(filename))
{
// filename with extension for instance c:\reportpath\file.ext
// c:\reportpath\file.ext.reportedextension
filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}.{_reporter.Extension}";
// we keep user specified name
filename = $"{Path.GetFileNameWithoutExtension(filename)}{separatorPoint}{_coverletMultiTargetFrameworksCurrentTFM}{Path.GetExtension(filename)}";
}
else
{
Expand Down
8 changes: 4 additions & 4 deletions test/coverlet.core.tests/Reporters/Reporters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ public class Reporters
// single tfm
[InlineData("", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.info")]
[InlineData(null, "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.cobertura.xml")]
[InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext.cobertura.xml")]
[InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2.cobertura.xml")]
[InlineData(null, "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.ext")]
[InlineData(null, "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.ext2")]
[InlineData(null, "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.cobertura.xml")]
[InlineData(null, "file", "cobertura", "file.cobertura.xml")]
// multiple tfm
[InlineData("netcoreapp2.2", "/folder/reportFolder/", "lcov", "/folder/reportFolder/coverage.netcoreapp2.2.info")]
[InlineData("netcoreapp2.2", "/folder/reportFolder/", "cobertura", "/folder/reportFolder/coverage.netcoreapp2.2.cobertura.xml")]
[InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext.cobertura.xml")]
[InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2.cobertura.xml")]
[InlineData("net472", "/folder/reportFolder/file.ext", "cobertura", "/folder/reportFolder/file.net472.ext")]
[InlineData("net472", "/folder/reportFolder/file.ext1.ext2", "cobertura", "/folder/reportFolder/file.ext1.net472.ext2")]
[InlineData("netcoreapp2.2", "/folder/reportFolder/file", "cobertura", "/folder/reportFolder/file.netcoreapp2.2.cobertura.xml")]
[InlineData("netcoreapp2.2", "file", "cobertura", "file.netcoreapp2.2.cobertura.xml")]
public void Msbuild_ReportWriter(string coverletMultiTargetFrameworksCurrentTFM, string coverletOutput, string reportFormat, string expectedFileName)
Expand Down
17 changes: 17 additions & 0 deletions test/coverlet.integration.tests/BaseTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,24 @@ class ClonedTemplateProject : IDisposable

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

public bool IsMultipleTargetFramework()
{
using var csprojStream = File.OpenRead(ProjectFileNamePath);
XDocument xml = XDocument.Load(csprojStream);
return xml.Element("Project").Element("PropertyGroup").Element("TargetFramework") == null;
}

public string[] GetTargetFrameworks()
{
using var csprojStream = File.OpenRead(ProjectFileNamePath);
XDocument xml = XDocument.Load(csprojStream);
XElement element = xml.Element("Project").Element("PropertyGroup").Element("TargetFramework") ?? xml.Element("Project").Element("PropertyGroup").Element("TargetFrameworks");
if (element is null)
{
throw new ArgumentNullException("No 'TargetFramework' neither 'TargetFrameworks' found in csproj file");
}
return element.Value.Split(";");
}

public string[] GetFiles(string filter)
{
Expand Down
60 changes: 51 additions & 9 deletions test/coverlet.integration.tests/Msbuild.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.IO;

using System.Linq;
using Xunit;

namespace Coverlet.Integration.Tests
Expand Down Expand Up @@ -54,8 +54,21 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameExtension()
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);
Assert.Contains("Test Run Successful.", standardOutput);
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext.json")));
AssertCoverage(clonedTemplateProject, "file.ext.json");
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext")));
AssertCoverage(clonedTemplateProject, "file.ext");
}

[Fact]
public void TestMsbuild_CoverletOutput_Folder_FileNameExtension_SpecifyFramework()
{
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
Assert.False(clonedTemplateProject.IsMultipleTargetFramework());
string framework = clonedTemplateProject.GetTargetFrameworks().Single();
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);
Assert.Contains("Test Run Successful.", standardOutput);
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext")));
AssertCoverage(clonedTemplateProject, "file.ext");
}

[Fact]
Expand All @@ -65,8 +78,8 @@ public void TestMsbuild_CoverletOutput_Folder_FileNameWithDoubleExtension()
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);
Assert.Contains("Test Run Successful.", standardOutput);
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext1.ext2.json")));
AssertCoverage(clonedTemplateProject, "file.ext1.ext2.json");
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, "file.ext1.ext2")));
AssertCoverage(clonedTemplateProject, "file.ext1.ext2");
}

[Fact]
Expand Down Expand Up @@ -123,6 +136,35 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit
AssertCoverage(clonedTemplateProject, "file.*.json");
}

[Fact]
public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension_SpecifyFramework()
{
using ClonedTemplateProject clonedTemplateProject = PrepareTemplateProject();
string[] targetFrameworks = new string[] { "netcoreapp2.2", "netcoreapp2.1" };
UpdateProjectTargetFramework(clonedTemplateProject, targetFrameworks);
Assert.True(clonedTemplateProject.IsMultipleTargetFramework());
string[] frameworks = clonedTemplateProject.GetTargetFrameworks();
Assert.Equal(2, frameworks.Length);
string framework = frameworks.FirstOrDefault();
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);
Assert.Contains("Test Run Successful.", standardOutput);
Assert.Contains("| coverletsamplelib.integration.template | 100% | 100% | 100% |", standardOutput);

foreach (string targetFramework in targetFrameworks)
{
if (framework == targetFramework)
{
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
}
else
{
Assert.False(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
}
}

AssertCoverage(clonedTemplateProject, "file.*.ext");
}

[Fact]
public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWithExtension()
{
Expand All @@ -135,10 +177,10 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit

foreach (string targetFramework in targetFrameworks)
{
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext.json")));
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.{targetFramework}.ext")));
}

AssertCoverage(clonedTemplateProject, "file.*.ext.json");
AssertCoverage(clonedTemplateProject, "file.*.ext");
}

[Fact]
Expand All @@ -153,10 +195,10 @@ public void Test_MultipleTargetFrameworkReport_CoverletOutput_Folder_FileNameWit

foreach (string targetFramework in targetFrameworks)
{
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2.json")));
Assert.True(File.Exists(Path.Combine(clonedTemplateProject.ProjectRootPath, $"file.ext1.{targetFramework}.ext2")));
}

AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2.json");
AssertCoverage(clonedTemplateProject, "file.ext1.*.ext2");
}
}
}

0 comments on commit 0f031e2

Please sign in to comment.