Skip to content

Commit 15c82b2

Browse files
committed
override help/list command
1 parent 50b7a21 commit 15c82b2

File tree

4 files changed

+53
-15
lines changed

4 files changed

+53
-15
lines changed

src/MicroBatchFramework/BatchEngineHostBuilderExtensions.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,13 @@ public static Task RunBatchEngineAsync(this IHostBuilder hostBuilder, string[] a
9292
public static IHostBuilder UseBatchEngine<T>(this IHostBuilder hostBuilder, string[] args, IBatchInterceptor interceptor = null, bool useSimpleConosoleLogger = true)
9393
where T : BatchBase
9494
{
95+
var method = typeof(T).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
96+
var defaultMethod = method.FirstOrDefault(x => x.GetCustomAttribute<CommandAttribute>() == null);
97+
var hasList = method.Any(x => x.GetCustomAttribute<CommandAttribute>()?.EqualsAny(ListCommand) ?? false);
98+
var hasHelp = method.Any(x => x.GetCustomAttribute<CommandAttribute>()?.EqualsAny(HelpCommand) ?? false);
99+
95100
if (args.Length == 0)
96101
{
97-
var method = typeof(T).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
98-
var defaultMethod = method.FirstOrDefault(x => x.GetCustomAttribute<CommandAttribute>() == null);
99102
if (defaultMethod == null || (defaultMethod.GetParameters().Length != 0 && !defaultMethod.GetParameters().All(x => x.HasDefaultValue)))
100103
{
101104
Console.WriteLine(BuildHelpParameter(method));
@@ -108,7 +111,7 @@ public static IHostBuilder UseBatchEngine<T>(this IHostBuilder hostBuilder, stri
108111
}
109112
}
110113

111-
if (args.Length == 1 && args[0].Equals(ListCommand, StringComparison.OrdinalIgnoreCase))
114+
if (!hasList && args.Length == 1 && args[0].Equals(ListCommand, StringComparison.OrdinalIgnoreCase))
112115
{
113116
ShowMethodList();
114117
hostBuilder.ConfigureServices(services =>
@@ -118,9 +121,9 @@ public static IHostBuilder UseBatchEngine<T>(this IHostBuilder hostBuilder, stri
118121
});
119122
return hostBuilder;
120123
}
121-
if (args.Length == 1 && args[0].Equals(HelpCommand, StringComparison.OrdinalIgnoreCase))
124+
125+
if (!hasHelp && args.Length == 1 && args[0].Equals(HelpCommand, StringComparison.OrdinalIgnoreCase))
122126
{
123-
var method = typeof(T).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
124127
Console.WriteLine(BuildHelpParameter(method));
125128
hostBuilder.ConfigureServices(services =>
126129
{

src/MicroBatchFramework/CommandAttribute.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,6 @@ public CommandAttribute(string[] commandNames)
2424

2525
public CommandAttribute(string[] commandNames, string description)
2626
{
27-
foreach (var item in commandNames)
28-
{
29-
if (item.Equals("list", StringComparison.OrdinalIgnoreCase)
30-
|| item.Equals("help", StringComparison.OrdinalIgnoreCase))
31-
{
32-
throw new ArgumentException("`list` or `help` is system reserved commandName, can not use.");
33-
}
34-
}
35-
3627
this.CommandNames = commandNames;
3728
this.Description = description;
3829
}

tests/MicroBatchFramework.Tests/SingleContainedTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public async Task SimpleTwoArgsTest()
7777
{
7878
var args = new string[0];
7979
await new HostBuilder().RunBatchEngineAsync<SimpleTwoArgs>(args);
80-
log.ToStringInfo().Should().StartWith("argument list:"); // ok to show help
80+
log.ToStringInfo().Should().Contain("argument list:"); // ok to show help
8181
}
8282
}
8383
}

tests/MicroBatchFramework.Tests/SubCommandTest.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,50 @@ public async Task AliasCommandTest()
143143
}
144144
}
145145

146+
public class OverrideDefaultCommand : BatchBase
147+
{
148+
[Command("list")]
149+
public void List()
150+
{
151+
Context.Logger.LogInformation($"lst");
152+
}
153+
154+
[Command(new[] { "help", "h" })]
155+
public void Help()
156+
{
157+
Context.Logger.LogInformation($"hlp");
158+
}
159+
}
160+
161+
[Fact]
162+
public async Task OverrideDefaultCommandTest()
163+
{
164+
{
165+
var args = "list".Split(' ');
166+
var log = new LogStack();
167+
await new HostBuilder()
168+
.ConfigureTestLogging(testOutput, log, true)
169+
.RunBatchEngineAsync<OverrideDefaultCommand>(args);
170+
log.InfoLogShouldBe(0, "lst");
171+
}
172+
{
173+
var args = "help".Split(' ');
174+
var log = new LogStack();
175+
await new HostBuilder()
176+
.ConfigureTestLogging(testOutput, log, true)
177+
.RunBatchEngineAsync<OverrideDefaultCommand>(args);
178+
log.InfoLogShouldBe(0, "hlp");
179+
}
180+
{
181+
var args = "h".Split(' ');
182+
var log = new LogStack();
183+
await new HostBuilder()
184+
.ConfigureTestLogging(testOutput, log, true)
185+
.RunBatchEngineAsync<OverrideDefaultCommand>(args);
186+
log.InfoLogShouldBe(0, "hlp");
187+
}
188+
}
189+
146190
public class NotFoundPath : BatchBase
147191
{
148192
[Command("run")]

0 commit comments

Comments
 (0)