Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 119 additions & 49 deletions Expressium.LivingDoc.Cli/Program.cs
Original file line number Diff line number Diff line change
@@ -1,62 +1,132 @@
using System;
using System;
using System.Collections.Generic;
using System.CommandLine;

namespace Expressium.LivingDoc.Cli
{
public class Program
{
static void Main(string[] args)
static int Main(string[] args)
{
if (args.Length == 6 && args[0] == "--input")
var inputOption = CreateInputOption("Input ndjson file(s) or native JSON file");
var outputOption = CreateOutputOption("Output html file");
var titleOption = CreateTitleOption("Report title");
var nativeOption = new Option<bool>(
name: "--native",
description: "Use native JSON input mode"
);

var rootCommand = new RootCommand("Expressium LivingDoc CLI")
{
inputOption,
outputOption,
titleOption,
nativeOption
};

rootCommand.SetHandler((inputs, output, title, native) =>
{
// Generating a LivingDoc Test Report based on a Cucumber Messages JSON file...
Console.WriteLine("");
Console.WriteLine("Generating LivingDoc Test Report...");
Console.WriteLine("Input: " + args[1]);
Console.WriteLine("Output: " + args[3]);
Console.WriteLine("Title: " + args[5]);

var livingDocConverter = new LivingDocConverter();
livingDocConverter.Generate(args[1], args[3], args[5]);

Console.WriteLine("Generating LivingDoc Report Completed");
Console.WriteLine("");
}
else if (args.Length == 3 && args[0] == "--native")
if (native)
{
if (inputs == null || inputs.Count != 1)
{
Console.Error.WriteLine("Error: --native requires exactly one --input file.");
Environment.Exit(1);
}
if (!string.IsNullOrEmpty(title))
{
Console.Error.WriteLine("Error: --native cannot be combined with --title.");
Environment.Exit(1);
}
GenerateNativeReport(inputs[0], output);
}
else
{
if (inputs == null || inputs.Count < 1)
{
Console.Error.WriteLine("Error: At least one --input file is required.");
Environment.Exit(1);
}
if (title == null)
{
title = string.Empty;
}
GenerateStandardReport(inputs, output, title);
}
}, inputOption, outputOption, titleOption, nativeOption);

return rootCommand.InvokeAsync(args).Result;
}

private static void PrintReportStart(string input, string output, string title = null)
{
Console.WriteLine("");
Console.WriteLine("Generating LivingDoc Test Report...");
Console.WriteLine("Input: " + input);
Console.WriteLine("Output: " + output);
if (!string.IsNullOrEmpty(title))
Console.WriteLine("Title: " + title);
}

private static void PrintReportEnd()
{
Console.WriteLine("LivingDoc Report generation completed");
Console.WriteLine("");
}

private static Option<List<string>> CreateInputOption(string description)
{
var opt = new Option<List<string>>(
name: "--input",
description: description
)
{
// Generating a LivingDoc Test Report based on a Native JSON file...
Console.WriteLine("");
Console.WriteLine("Generating LivingDoc Test Report...");
Console.WriteLine("Input: " + args[1]);
Console.WriteLine("Output: " + args[3]);

var livingDocNativeConverter = new LivingDocNativeConverter();
livingDocNativeConverter.Generate(args[1], args[3]);

Console.WriteLine("Generating LivingDoc Report Completed");
Console.WriteLine("");
}
else if (args.Length == 7 && args[0] == "--merge")
Arity = ArgumentArity.OneOrMore,
IsRequired = true
};
return opt;
}

private static Option<string> CreateOutputOption(string description)
{
var opt = new Option<string>(
name: "--output",
description: description
)
{
// Generating a LivingDoc Test Report based on Two Cucumber Messages JSON files...
Console.WriteLine("");
Console.WriteLine("Generating LivingDoc Test Report...");
Console.WriteLine("InputMaster: " + args[1]);
Console.WriteLine("InputSlave: " + args[2]);
Console.WriteLine("Output: " + args[4]);
Console.WriteLine("Title: " + args[6]);

var livingDocConverter = new LivingDocConverter();
livingDocConverter.Generate(new List<string>() { args[1], args[2] }, args[4], args[6]);

Console.WriteLine("Generating LivingDoc Report Completed");
Console.WriteLine("");
}
else
Arity = ArgumentArity.ExactlyOne,
IsRequired = true
};
return opt;
}

private static Option<string> CreateTitleOption(string description)
{
var opt = new Option<string>(
name: "--title",
description: description
)
{
Console.WriteLine("Expressium.LivingDoc.Cli.exe --input [INPUTFILE] --output [OUTPUTFILE] --title [TITLE]");
Console.WriteLine("Expressium.LivingDoc.Cli.exe --input .\\ReqnRoll.ndjson --output .\\LivingDoc.html --title \"Expressium CoffeeShop Report\"");
}
Arity = ArgumentArity.ZeroOrOne,
IsRequired = false
};
return opt;
}

private static void GenerateStandardReport(List<string> inputs, string output, string title)
{
PrintReportStart(string.Join(", ", inputs), output, title);
var livingDocConverter = new LivingDocConverter();
livingDocConverter.Generate(inputs, output, title);
PrintReportEnd();
}

private static void GenerateNativeReport(string input, string output)
{
PrintReportStart(input, output);
var livingDocGenerator = new LivingDocNativeConverter();
livingDocGenerator.Generate(input, output);
PrintReportEnd();
}
}
}
}
1 change: 1 addition & 0 deletions Expressium.LivingDoc/Expressium.LivingDoc.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<ItemGroup>
<PackageReference Include="AngleSharp" Version="1.3.0" />
<PackageReference Include="Cucumber.Messages" Version="29.0.1" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4" />
</ItemGroup>

<ItemGroup>
Expand Down
3 changes: 1 addition & 2 deletions LivingDocCoffeeshop.bat
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ cd .\Expressium.LivingDoc.UnitTests\bin\Debug\net8.0

del .\Samples\Coffeeshop.html
Expressium.LivingDoc.Cli.exe --input .\Samples\coffeeshop.feature.ndjson --output .\Samples\Coffeeshop.html --title "Expressium.Coffeeshop.Web.API.Tests"
start .\Samples\Coffeeshop.html

start .\Samples\Coffeeshop.html
2 changes: 1 addition & 1 deletion LivingDocMerge.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ echo off
cd .\Expressium.LivingDoc.UnitTests\bin\Debug\net8.0

del .\Samples\Merge.html
Expressium.LivingDoc.Cli.exe --merge .\Samples\minimal.feature.ndjson .\Samples\examples-tables.feature.ndjson --output .\Samples\Merge.html --title "Merged Documentation"
Expressium.LivingDoc.Cli.exe --input .\Samples\minimal.feature.ndjson --input .\Samples\examples-tables.feature.ndjson --output .\Samples\Merge.html --title "Merged Documentation"
start .\Samples\Merge.html
2 changes: 1 addition & 1 deletion LivingDocNative.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ echo off
cd .\Expressium.LivingDoc.UnitTests\bin\Debug\net8.0

del .\Samples\Native.html
Expressium.LivingDoc.Cli.exe --native .\Samples\native.json --output .\Samples\Native.html
Expressium.LivingDoc.Cli.exe --native --input .\Samples\native.json --output .\Samples\Native.html
start .\Samples\Native.html