Skip to content

Commit ed262a6

Browse files
authored
Update to v0.3 (#61)
* Add DefaultResolver (#58) * Add default resolver that is capable of resolving types with string constructor. Fixes #57 * Add TryParse method detection * Add Parse method finder as well. * Add last test for Parse method * Add Async API (#59) * Add async api * Add an async api for validations * Add first async api test * Add more async tests * Add more async test cases * Use Async version when parsing commands as well. * Add validation tests * Improve test coverage * Fixes some styling issues spotted by codefactor.io (#62) * Only display usages when no default values have been specified. (#63) Fixes #60 * Fix code styling * Update project to v0.3
1 parent c93bc2e commit ed262a6

37 files changed

+1531
-86
lines changed

CommandLineParser.Tests/Command/MultipleCommandTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ public void NonRequiredCommandShouldNotSetResultInErrorStateWhenRequiredOptionsA
1414
{
1515
var parser = new CommandLineParser();
1616

17-
parser.AddCommand<MultipleCOmmandTestsOptions>()
17+
parser.AddCommand<MultipleCommandTestsOptions>()
1818
.Name("cmd1")
1919
.Required(false)
2020
.Description("cmd1");
2121

22-
parser.AddCommand<MultipleCOmmandTestsOptions>()
22+
parser.AddCommand<MultipleCommandTestsOptions>()
2323
.Name("cmd2")
2424
.Required(false)
2525
.Description("cmd2");
@@ -29,7 +29,7 @@ public void NonRequiredCommandShouldNotSetResultInErrorStateWhenRequiredOptionsA
2929
result.AssertNoErrors();
3030
}
3131

32-
private class MultipleCOmmandTestsOptions
32+
private class MultipleCommandTestsOptions
3333
{
3434
[Required, Name("x", "bla"), Description("some description")]
3535
public int Option { get; set; }

CommandLineParser.Tests/Command/SubCommandTests.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System;
77
using System.Linq;
88
using System.Threading;
9+
using System.Threading.Tasks;
910
using Xunit;
1011

1112
namespace MatthiWare.CommandLine.Tests.Command
@@ -42,6 +43,36 @@ public void TestSubCommandWorksCorrectlyInModel(bool autoExecute, string bla, in
4243
Assert.All(result.CommandResults.Select(r => r.Executed), Assert.True);
4344
}
4445

46+
[Theory]
47+
[InlineData(true, "something", 15, -1)]
48+
[InlineData(false, "something", 15, -1)]
49+
[InlineData(true, "", 15, -1)]
50+
public async Task TestSubCommandWorksCorrectlyInModelAsync(bool autoExecute, string bla, int i, int n)
51+
{
52+
var lock1 = new ManualResetEventSlim();
53+
var lock2 = new ManualResetEventSlim();
54+
55+
var containerResolver = new CustomInstantiator(lock1, lock2, autoExecute, bla, i, n);
56+
57+
var parser = new CommandLineParser<MainModel>(containerResolver);
58+
59+
var result = await parser.ParseAsync(new[] { "main", "-b", bla, "sub", "-i", i.ToString(), "-n", n.ToString() });
60+
61+
result.AssertNoErrors();
62+
63+
if (!autoExecute)
64+
{
65+
Assert.All(result.CommandResults.Select(r => r.Executed), Assert.False);
66+
67+
result.ExecuteCommands();
68+
}
69+
70+
Assert.True(lock1.Wait(1000), "MainCommand didn't execute in time.");
71+
Assert.True(lock2.Wait(1000), "SubCommand didn't execute in time.");
72+
73+
Assert.All(result.CommandResults.Select(r => r.Executed), Assert.True);
74+
}
75+
4576
private class CustomInstantiator : DefaultContainerResolver
4677
{
4778
private readonly ManualResetEventSlim lock1;
@@ -108,6 +139,18 @@ public override void OnExecute(MainModel options, SubModel commandOptions)
108139

109140
locker.Set();
110141
}
142+
143+
public override Task OnExecuteAsync(MainModel options, SubModel commandOptions, CancellationToken cancellationToken)
144+
{
145+
base.OnExecuteAsync(options, commandOptions, cancellationToken);
146+
147+
Assert.Equal(bla, options.Bla);
148+
Assert.Equal(i, commandOptions.Item);
149+
150+
locker.Set();
151+
152+
return Task.CompletedTask;
153+
}
111154
}
112155

113156
public class SubCommand : Command<MainModel, SubSubModel>
@@ -144,6 +187,18 @@ public override void OnExecute(MainModel options, SubSubModel commandOptions)
144187

145188
locker.Set();
146189
}
190+
191+
public override Task OnExecuteAsync(MainModel options, SubSubModel commandOptions, CancellationToken cancellationToken)
192+
{
193+
base.OnExecuteAsync(options, commandOptions, cancellationToken);
194+
195+
Assert.Equal(bla, options.Bla);
196+
Assert.Equal(n, commandOptions.Nothing);
197+
198+
locker.Set();
199+
200+
return Task.CompletedTask;
201+
}
147202
}
148203

149204
public class MainModel

CommandLineParser.Tests/CommandLineParser.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="coverlet.msbuild" Version="2.6.3">
14+
<PackageReference Include="coverlet.msbuild" Version="2.8.0">
1515
<PrivateAssets>all</PrivateAssets>
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1717
</PackageReference>
1818
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
19-
<PackageReference Include="Moq" Version="4.12.0" />
19+
<PackageReference Include="Moq" Version="4.13.1" />
2020
<PackageReference Include="xunit" Version="2.4.1" />
2121
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
2222
<PrivateAssets>all</PrivateAssets>
@@ -26,7 +26,7 @@
2626

2727
<ItemGroup>
2828
<DotNetCliToolReference Include="StrykerMutator.DotNetCoreCli" Version="*" />
29-
<PackageReference Include="StrykerMutator.DotNetCoreCli" Version="*" />
29+
<PackageReference Include="StrykerMutator.DotNetCoreCli" Version="0.9.0" />
3030
</ItemGroup>
3131

3232
<ItemGroup>

0 commit comments

Comments
 (0)