Skip to content

Commit

Permalink
feat: add help command
Browse files Browse the repository at this point in the history
Fixes #206 - Add `--help` command
  • Loading branch information
AndyTWF authored Aug 28, 2023
2 parents 65dc8d9 + 3630265 commit 6882ea6
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/CompilerCli/Argument/ArgumentParserFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public static ArgumentParser Make()
new SortedSet<AbstractCliArgument>
{
new DefaultCliArgument(),
new NoWaitCliArgument()
new NoWaitCliArgument(),
new HelpArgument()
}
);
}
Expand Down
1 change: 1 addition & 0 deletions src/CompilerCli/Cli/CliArguments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
public class CliArguments
{
public bool PauseOnFinish { get; set; } = true;
public bool HelpExit { get; set; } = false;
}
}
54 changes: 54 additions & 0 deletions src/CompilerCli/Cli/HelpArgument.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;

namespace CompilerCli.Cli
{
public class HelpArgument : AbstractCliArgument
{
public override void Parse(List<string> 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.
";
}
}
}
5 changes: 5 additions & 0 deletions src/CompilerCli/CompilerCli.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<IEventObserver>() { new ConsoleOutput(output) }
Expand Down
41 changes: 41 additions & 0 deletions tests/CompilerCliTest/Cli/HelpArgumentTest.cs
Original file line number Diff line number Diff line change
@@ -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<string>(), arguments);
Assert.True(arguments.PauseOnFinish);
}

[Fact]
public void TestItThrowsExceptionOnTooManyValues() {
Assert.Throws<ArgumentException>(
() => commandLineArgument.Parse(new List<string>(new[] { "a", "b" }), arguments)
);
}

[Fact]
public void TestItReturnsASpecifier() {
Assert.Equal("--help", commandLineArgument.GetSpecifier());
}

[Fact]
public void TestItReturnsAHelpMessage() {
Assert.IsType<string>(HelpArgument.GetHelpMessage());
}
}
}

0 comments on commit 6882ea6

Please sign in to comment.