From ef4d8cbcfb6b2c87dc45080cb177dbae2195f058 Mon Sep 17 00:00:00 2001 From: Alice Date: Mon, 24 Jul 2023 16:21:43 +0100 Subject: [PATCH 1/2] Add HelpArgument --- .../Argument/ArgumentParserFactory.cs | 3 +- src/CompilerCli/Cli/CliArguments.cs | 1 + src/CompilerCli/Cli/HelpArgument.cs | 54 +++++++++++++++++++ src/CompilerCli/CompilerCli.cs | 5 ++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/CompilerCli/Cli/HelpArgument.cs diff --git a/src/CompilerCli/Argument/ArgumentParserFactory.cs b/src/CompilerCli/Argument/ArgumentParserFactory.cs index 0297f597..e69ca3a2 100644 --- a/src/CompilerCli/Argument/ArgumentParserFactory.cs +++ b/src/CompilerCli/Argument/ArgumentParserFactory.cs @@ -24,7 +24,8 @@ public static ArgumentParser Make() new SortedSet { new DefaultCliArgument(), - new NoWaitCliArgument() + new NoWaitCliArgument(), + new HelpArgument() } ); } diff --git a/src/CompilerCli/Cli/CliArguments.cs b/src/CompilerCli/Cli/CliArguments.cs index 204a37db..d9306df5 100644 --- a/src/CompilerCli/Cli/CliArguments.cs +++ b/src/CompilerCli/Cli/CliArguments.cs @@ -3,5 +3,6 @@ public class CliArguments { public bool PauseOnFinish { get; set; } = true; + public bool HelpExit { get; set; } = false; } } \ No newline at end of file diff --git a/src/CompilerCli/Cli/HelpArgument.cs b/src/CompilerCli/Cli/HelpArgument.cs new file mode 100644 index 00000000..34334240 --- /dev/null +++ b/src/CompilerCli/Cli/HelpArgument.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; + +namespace CompilerCli.Cli +{ + public class HelpArgument : AbstractCliArgument + { + public override void Parse(List values, CliArguments cliArguments) { + if (values.Count != 0) { + throw new ArgumentException("Help flag cannot take any arguments"); + } + + cliArguments.HelpExit = true; + } + + public override string GetSpecifier() { + return "--help"; + } + + public static string GetHelpMessage() { + return @" +usage: CompilerCli.exe [options] --config-file [config-file] + Compile the VATSIM-UK Sector File with the specified config file. + For more information visit: https://github.com/VATSIM-UK/sector-file-compiler + + options: + --config-file Required. Takes a single argument. Path to a + compiler configuration JSON file. If this argument + is specified multiple times, then the compiler will + attempt to merge the configs together. + --check-config If set, only runs the configuration checking step + to ensure that the compiler config is correct. + --lint If set, only runs the configuration check and + linting steps. + --validate If set, only runs the configuration check, linting + and post-validation steps. Does not output files. + --skip-validation If set, the compiler will skip the post-parse + validation phase of compilation. If running in full + compilation mode, will still produce output. + --pretty If set, ""large"" elements such as SECTOR will have + an extra newline inserted between them, in order to + provide improved readability. + --strip-comments If set, any comments in the input will be removed. + If an empty line is leftover, it will be discarded. + --build-version Takes a single argument. Specifies the version of + the build to replace the {VERSION} token in the + input. + --no-wait Prompts the compiler not to wait for a keypress + when compilation has finished. + --help Display this help page. +"; + } + } +} diff --git a/src/CompilerCli/CompilerCli.cs b/src/CompilerCli/CompilerCli.cs index c7416c48..b2c8f4f3 100644 --- a/src/CompilerCli/CompilerCli.cs +++ b/src/CompilerCli/CompilerCli.cs @@ -35,6 +35,11 @@ static int Main(string[] args) return 1; } + if (cliArguments.HelpExit) { + output.Write(HelpArgument.GetHelpMessage()); + return 0; + } + int returnCode = SectorFileCompilerFactory.Create( compilerArguments, new List() { new ConsoleOutput(output) } From 3630265a21e6b4fb977be31a144aaa6abd74b65c Mon Sep 17 00:00:00 2001 From: Alice Date: Mon, 24 Jul 2023 16:38:29 +0100 Subject: [PATCH 2/2] HelpArgumentTest --- tests/CompilerCliTest/Cli/HelpArgumentTest.cs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/CompilerCliTest/Cli/HelpArgumentTest.cs diff --git a/tests/CompilerCliTest/Cli/HelpArgumentTest.cs b/tests/CompilerCliTest/Cli/HelpArgumentTest.cs new file mode 100644 index 00000000..1a78f3f2 --- /dev/null +++ b/tests/CompilerCliTest/Cli/HelpArgumentTest.cs @@ -0,0 +1,41 @@ +using CompilerCli.Cli; +using System; +using System.Collections.Generic; +using Xunit; + +namespace CompilerCliTest.Cli +{ + public class HelpArgumentTest + { + private CliArguments arguments; + private HelpArgument commandLineArgument; + + public HelpArgumentTest() { + arguments = new CliArguments(); + commandLineArgument = new HelpArgument(); + } + + [Fact] + public void TestItSetsHelpExitFlag() { + commandLineArgument.Parse(new List(), arguments); + Assert.True(arguments.PauseOnFinish); + } + + [Fact] + public void TestItThrowsExceptionOnTooManyValues() { + Assert.Throws( + () => commandLineArgument.Parse(new List(new[] { "a", "b" }), arguments) + ); + } + + [Fact] + public void TestItReturnsASpecifier() { + Assert.Equal("--help", commandLineArgument.GetSpecifier()); + } + + [Fact] + public void TestItReturnsAHelpMessage() { + Assert.IsType(HelpArgument.GetHelpMessage()); + } + } +}