Skip to content

Commit 5476c2a

Browse files
authored
Merge pull request #7 from extent-framework/allow-merge
Allow merge via --merge flag
2 parents 7651eec + fffaa13 commit 5476c2a

File tree

1 file changed

+46
-24
lines changed
  • ExtentReportsDotNetCLI/ExtentReportsDotNetCLI

1 file changed

+46
-24
lines changed

ExtentReportsDotNetCLI/ExtentReportsDotNetCLI/Program.cs

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
using AventStack.ExtentReports.CLI.Model;
33
using AventStack.ExtentReports.CLI.Parser;
44
using AventStack.ExtentReports.Reporter;
5+
56
using McMaster.Extensions.CommandLineUtils;
7+
68
using System.Collections.Generic;
79
using System.IO;
810
using System.Linq;
@@ -11,12 +13,13 @@ namespace AventStack.ExtentReports.CLI
1113
{
1214
internal class Program
1315
{
14-
1516
private const string DefaultBaseDirectory = "Reports";
1617
private Logger _logger;
18+
private ExtentReports _extent = new ExtentReports();
19+
private int _filesProcessed = 0;
1720

1821
[Option(ShortName = "p")]
19-
private TestFramework Parser { get; set; } = Model.TestFramework.NUnit;
22+
private TestFramework Parser { get; set; } = TestFramework.NUnit;
2023

2124
[Option(ShortName = "i")]
2225
private string TestRunnerResultsFile { get; set; }
@@ -33,6 +36,10 @@ internal class Program
3336
[Option(ShortName = "l")]
3437
private LoggingLevel LoggingLevel { get; set; } = LoggingLevel.Normal;
3538

39+
[Option("--merge")]
40+
private bool Merge { get; set; } = false;
41+
42+
3643
private static void Main(string[] args)
3744
{
3845
CommandLineApplication.Execute<Program>(args);
@@ -41,54 +48,69 @@ private static void Main(string[] args)
4148
private void OnExecute()
4249
{
4350
_logger = new Logger(LoggingLevel);
44-
4551
_logger.WriteLine(LoggingLevel.Verbose, "extentreports-cli initializing ...");
4652

4753
string output = string.IsNullOrWhiteSpace(Output) ? $".\\{DefaultBaseDirectory}" : Output;
4854

49-
bool foundResultFiles = false;
50-
5155
if (!string.IsNullOrEmpty(TestRunnerResultsDirectory) && File.GetAttributes(TestRunnerResultsDirectory) == FileAttributes.Directory && Parser.Equals(TestFramework.NUnit))
5256
{
53-
5457
string filePattern = "*." + KnownFileExtensions.GetExtension(Parser);
5558
_logger.WriteLine(LoggingLevel.Normal, $"Getting test runner result files in folder '{TestRunnerResultsDirectory}' matching pattern '{filePattern}' ...");
5659

5760
List<string> files = Directory.GetFiles(TestRunnerResultsDirectory, filePattern, SearchOption.AllDirectories).ToList();
5861

59-
foreach (string file in files)
62+
if (Merge)
63+
{
64+
files.ForEach(x => ProcessSingle(x, output, true));
65+
}
66+
else
6067
{
61-
_logger.WriteLine(LoggingLevel.Normal, $"Parsing test runner result file '{file}' ...");
62-
var extent = new ExtentReports();
63-
var dir = Path.Combine(output, Path.GetFileNameWithoutExtension(file));
64-
InitializeReporter(extent, dir);
65-
new NUnitParser(extent).ParseTestRunnerOutput(file);
66-
extent.Flush();
67-
_logger.WriteLine(LoggingLevel.Normal, $"Report for '{file}' is complete.");
68-
foundResultFiles = true;
68+
files.ForEach(x =>
69+
{
70+
var dir = Path.Combine(output, Path.GetFileNameWithoutExtension(x));
71+
ProcessSingle(x, dir, false);
72+
});
6973
}
7074
}
7175

7276
if (!string.IsNullOrWhiteSpace(TestRunnerResultsFile))
7377
{
74-
_logger.WriteLine(LoggingLevel.Normal, $"Parsing test runner result file '{TestRunnerResultsFile}' ...");
75-
var extent = new ExtentReports();
76-
InitializeReporter(extent, output);
77-
new NUnitParser(extent).ParseTestRunnerOutput(TestRunnerResultsFile);
78-
extent.Flush();
79-
_logger.WriteLine(LoggingLevel.Normal, $"Report for '{TestRunnerResultsFile}' is complete.");
80-
foundResultFiles = true;
78+
ProcessSingle(TestRunnerResultsFile, output, true);
8179
}
8280

83-
if (!foundResultFiles)
81+
if (_filesProcessed == 0)
82+
{
8483
_logger.WriteLine(LoggingLevel.Normal, "Nothing to do!");
84+
}
8585

8686
_logger.WriteLine(LoggingLevel.Verbose, "extentreports-cli finished.");
8787
}
8888

89-
private void InitializeReporter(ExtentReports extent, string path)
89+
private void ProcessSingle(string testResultsFilePath, string output, bool merge = false)
9090
{
91+
_logger.WriteLine(LoggingLevel.Normal, $"Parsing test runner result file '{TestRunnerResultsFile}' ...");
92+
93+
// if a single report is required for each test results file (ie, no merges):
94+
// must instantiate every time to clear pre-existing data
95+
if (!merge)
96+
{
97+
_extent = new ExtentReports();
98+
}
99+
100+
if ((merge && !_extent.StartedReporterList.Any()) || !merge)
101+
{
102+
InitializeReporter(_extent, output);
103+
}
104+
105+
new NUnitParser(_extent).ParseTestRunnerOutput(testResultsFilePath);
106+
_extent.Flush();
107+
_filesProcessed++;
108+
109+
_logger.WriteLine(LoggingLevel.Normal, $"Report for '{testResultsFilePath}' is complete.");
110+
}
91111

112+
private void InitializeReporter(ExtentReports extent, string path)
113+
{
92114
if (Reporters.Contains("html"))
93115
{
94116
var output = path.EndsWith("\\") || path.EndsWith("/") ? path : path + "\\";

0 commit comments

Comments
 (0)