From dddcf265004dc26ce4bce0fe5e27999095457065 Mon Sep 17 00:00:00 2001 From: Patrick Dwyer Date: Thu, 3 May 2018 19:54:25 +1000 Subject: [PATCH] Add support for multiple output formats separated by a comma --- .../Reporters/ReporterFactory.cs | 13 +++--- .../CoverageResultTask.cs | 14 ++++--- .../Reporters/ReporterFactoryTests.cs | 40 ++++++++++++++++--- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/coverlet.core/Reporters/ReporterFactory.cs b/src/coverlet.core/Reporters/ReporterFactory.cs index c61156b08..2518c0e4a 100644 --- a/src/coverlet.core/Reporters/ReporterFactory.cs +++ b/src/coverlet.core/Reporters/ReporterFactory.cs @@ -1,22 +1,25 @@ using System.Linq; +using System.Collections.Generic; namespace Coverlet.Core.Reporters { public class ReporterFactory { - private string _format; + private IEnumerable _formats; private IReporter[] _reporters; - public ReporterFactory(string format) + public ReporterFactory(string formats) { - _format = format; + _formats = formats.Split(','); _reporters = new IReporter[] { new JsonReporter(), new LcovReporter(), new OpenCoverReporter(), new CoberturaReporter() }; } - public IReporter CreateReporter() - => _reporters.FirstOrDefault(r => r.Format == _format); + public IEnumerable CreateReporters() + { + return _reporters.Where(r => _formats.Contains(r.Format)); + } } } \ No newline at end of file diff --git a/src/coverlet.msbuild.tasks/CoverageResultTask.cs b/src/coverlet.msbuild.tasks/CoverageResultTask.cs index e201d7433..46482d93f 100644 --- a/src/coverlet.msbuild.tasks/CoverageResultTask.cs +++ b/src/coverlet.msbuild.tasks/CoverageResultTask.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using ConsoleTables; @@ -49,13 +50,16 @@ public override bool Execute() if (!Directory.Exists(directory)) Directory.CreateDirectory(directory); - IReporter reporter = new ReporterFactory(_format).CreateReporter(); - if (reporter == null) + var reporters = new List(new ReporterFactory(_format).CreateReporters()); + if (reporters.Count != _format.Split(',').Length) throw new Exception($"Specified output format '{_format}' is not supported"); - _filename = _filename + "." + reporter.Extension; - Console.WriteLine($" Generating report '{_filename}'"); - File.WriteAllText(_filename, reporter.Report(result)); + foreach(var reporter in reporters) + { + var reportFilename = _filename + "." + reporter.Extension; + Console.WriteLine($" Generating report '{reportFilename}'"); + File.WriteAllText(reportFilename, reporter.Report(result)); + } double total = 0; CoverageSummary summary = new CoverageSummary(); diff --git a/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs b/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs index 4f5f463f4..14cac96ab 100644 --- a/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs +++ b/test/coverlet.core.tests/Reporters/ReporterFactoryTests.cs @@ -6,13 +6,41 @@ namespace Coverlet.Core.Reporters.Tests public class ReporterFactoryTests { [Fact] - public void TestCreateReporter() + public void TestCreateReportersWithSingleFormat() { - Assert.Equal(typeof(JsonReporter), new ReporterFactory("json").CreateReporter().GetType()); - Assert.Equal(typeof(LcovReporter), new ReporterFactory("lcov").CreateReporter().GetType()); - Assert.Equal(typeof(OpenCoverReporter), new ReporterFactory("opencover").CreateReporter().GetType()); - Assert.Equal(typeof(CoberturaReporter), new ReporterFactory("cobertura").CreateReporter().GetType()); - Assert.Null(new ReporterFactory("").CreateReporter()); + Assert.Collection( + new ReporterFactory("json").CreateReporters(), + reporter => Assert.IsType(reporter)); + Assert.Collection( + new ReporterFactory("lcov").CreateReporters(), + reporter => Assert.IsType(reporter)); + Assert.Collection( + new ReporterFactory("opencover").CreateReporters(), + reporter => Assert.IsType(reporter)); + Assert.Collection( + new ReporterFactory("cobertura").CreateReporters(), + reporter => Assert.IsType(reporter)); + Assert.Empty(new ReporterFactory("").CreateReporters()); + } + + [Fact] + public void TestCreateReportersWithMultipleFormats() + { + Assert.Collection( + new ReporterFactory("json,lcov").CreateReporters(), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter)); + Assert.Collection( + new ReporterFactory("json,lcov,opencover").CreateReporters(), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter)); + Assert.Collection( + new ReporterFactory("json,lcov,opencover,cobertura").CreateReporters(), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter), + reporter => Assert.IsType(reporter)); } } } \ No newline at end of file