Skip to content

Commit 227a7b0

Browse files
authored
Merge pull request #78 from patros/multiple-report-formats
Add support for multiple output formats separated by a comma
2 parents f61bc50 + dddcf26 commit 227a7b0

File tree

3 files changed

+51
-16
lines changed

3 files changed

+51
-16
lines changed
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
using System.Linq;
2+
using System.Collections.Generic;
23

34
namespace Coverlet.Core.Reporters
45
{
56
public class ReporterFactory
67
{
7-
private string _format;
8+
private IEnumerable<string> _formats;
89
private IReporter[] _reporters;
910

10-
public ReporterFactory(string format)
11+
public ReporterFactory(string formats)
1112
{
12-
_format = format;
13+
_formats = formats.Split(',');
1314
_reporters = new IReporter[] {
1415
new JsonReporter(), new LcovReporter(),
1516
new OpenCoverReporter(), new CoberturaReporter()
1617
};
1718
}
1819

19-
public IReporter CreateReporter()
20-
=> _reporters.FirstOrDefault(r => r.Format == _format);
20+
public IEnumerable<IReporter> CreateReporters()
21+
{
22+
return _reporters.Where(r => _formats.Contains(r.Format));
23+
}
2124
}
2225
}

src/coverlet.msbuild.tasks/CoverageResultTask.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.IO;
34
using ConsoleTables;
45

@@ -49,13 +50,16 @@ public override bool Execute()
4950
if (!Directory.Exists(directory))
5051
Directory.CreateDirectory(directory);
5152

52-
IReporter reporter = new ReporterFactory(_format).CreateReporter();
53-
if (reporter == null)
53+
var reporters = new List<IReporter>(new ReporterFactory(_format).CreateReporters());
54+
if (reporters.Count != _format.Split(',').Length)
5455
throw new Exception($"Specified output format '{_format}' is not supported");
5556

56-
_filename = _filename + "." + reporter.Extension;
57-
Console.WriteLine($" Generating report '{_filename}'");
58-
File.WriteAllText(_filename, reporter.Report(result));
57+
foreach(var reporter in reporters)
58+
{
59+
var reportFilename = _filename + "." + reporter.Extension;
60+
Console.WriteLine($" Generating report '{reportFilename}'");
61+
File.WriteAllText(reportFilename, reporter.Report(result));
62+
}
5963

6064
double total = 0;
6165
CoverageSummary summary = new CoverageSummary();

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

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,41 @@ namespace Coverlet.Core.Reporters.Tests
66
public class ReporterFactoryTests
77
{
88
[Fact]
9-
public void TestCreateReporter()
9+
public void TestCreateReportersWithSingleFormat()
1010
{
11-
Assert.Equal(typeof(JsonReporter), new ReporterFactory("json").CreateReporter().GetType());
12-
Assert.Equal(typeof(LcovReporter), new ReporterFactory("lcov").CreateReporter().GetType());
13-
Assert.Equal(typeof(OpenCoverReporter), new ReporterFactory("opencover").CreateReporter().GetType());
14-
Assert.Equal(typeof(CoberturaReporter), new ReporterFactory("cobertura").CreateReporter().GetType());
15-
Assert.Null(new ReporterFactory("").CreateReporter());
11+
Assert.Collection(
12+
new ReporterFactory("json").CreateReporters(),
13+
reporter => Assert.IsType<JsonReporter>(reporter));
14+
Assert.Collection(
15+
new ReporterFactory("lcov").CreateReporters(),
16+
reporter => Assert.IsType<LcovReporter>(reporter));
17+
Assert.Collection(
18+
new ReporterFactory("opencover").CreateReporters(),
19+
reporter => Assert.IsType<OpenCoverReporter>(reporter));
20+
Assert.Collection(
21+
new ReporterFactory("cobertura").CreateReporters(),
22+
reporter => Assert.IsType<CoberturaReporter>(reporter));
23+
Assert.Empty(new ReporterFactory("").CreateReporters());
24+
}
25+
26+
[Fact]
27+
public void TestCreateReportersWithMultipleFormats()
28+
{
29+
Assert.Collection(
30+
new ReporterFactory("json,lcov").CreateReporters(),
31+
reporter => Assert.IsType<JsonReporter>(reporter),
32+
reporter => Assert.IsType<LcovReporter>(reporter));
33+
Assert.Collection(
34+
new ReporterFactory("json,lcov,opencover").CreateReporters(),
35+
reporter => Assert.IsType<JsonReporter>(reporter),
36+
reporter => Assert.IsType<LcovReporter>(reporter),
37+
reporter => Assert.IsType<OpenCoverReporter>(reporter));
38+
Assert.Collection(
39+
new ReporterFactory("json,lcov,opencover,cobertura").CreateReporters(),
40+
reporter => Assert.IsType<JsonReporter>(reporter),
41+
reporter => Assert.IsType<LcovReporter>(reporter),
42+
reporter => Assert.IsType<OpenCoverReporter>(reporter),
43+
reporter => Assert.IsType<CoberturaReporter>(reporter));
1644
}
1745
}
1846
}

0 commit comments

Comments
 (0)