Skip to content

Commit 1b9df49

Browse files
committed
add DoubleDashEscape test
1 parent ab200b0 commit 1b9df49

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed
Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,37 @@
11
using ConsoleAppFramework;
22

33

4-
ConsoleApp.Run(args, (int x, int y, ConsoleAppContext context) =>
4+
args = "some-command hello --global-flag flag-value -- more args here".Split(" ");
5+
6+
var app = ConsoleApp.Create();
7+
8+
app.ConfigureGlobalOptions((ref ConsoleApp.GlobalOptionsBuilder builder) =>
59
{
10+
var flag = builder.AddGlobalOption<string>("--global-flag");
11+
return new GlobalOptions(flag);
612
});
13+
14+
app.UseFilter<SomeFilter>();
15+
app.Add<Commands>();
16+
app.Run(args);
17+
18+
internal record GlobalOptions(string Flag);
19+
20+
internal class Commands
21+
{
22+
[Command("some-command")]
23+
public void SomeCommand([Argument] string commandArg, ConsoleAppContext context)
24+
{
25+
Console.WriteLine($"ARG: {commandArg}");
26+
Console.WriteLine($"ESCAPED: {string.Join(", ", context.EscapedArguments.ToArray()!)}");
27+
}
28+
}
29+
30+
internal class SomeFilter(ConsoleAppFilter next) : ConsoleAppFilter(next)
31+
{
32+
public override async Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
33+
{
34+
Console.WriteLine($"FLAG: {((GlobalOptions)context.GlobalOptions!).Flag}");
35+
await Next.InvokeAsync(context, cancellationToken);
36+
}
37+
}

tests/ConsoleAppFramework.GeneratorTests/GlobalOptionTest.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,48 @@ public void NamedParameter()
150150
app.Run(args);
151151
""", "--x 10 --dry-run --y 20", "(1000, True) -> (10, 20)");
152152
}
153+
154+
[Fact]
155+
public void DoubleDashEscape()
156+
{
157+
verifier.Execute("""
158+
var app = ConsoleApp.Create();
159+
160+
app.ConfigureGlobalOptions((ref ConsoleApp.GlobalOptionsBuilder builder) =>
161+
{
162+
var flag = builder.AddGlobalOption<string>("--global-flag");
163+
return new GlobalOptions(flag);
164+
});
165+
166+
app.UseFilter<SomeFilter>();
167+
app.Add<Commands>();
168+
app.Run(args);
169+
170+
internal record GlobalOptions(string Flag);
171+
172+
internal class Commands
173+
{
174+
[Command("some-command")]
175+
public void SomeCommand([Argument] string commandArg, ConsoleAppContext context)
176+
{
177+
Console.WriteLine($"ARG: {commandArg}");
178+
Console.WriteLine($"ESCAPED: {string.Join(", ", context.EscapedArguments.ToArray()!)}");
179+
}
180+
}
181+
182+
internal class SomeFilter(ConsoleAppFilter next) : ConsoleAppFilter(next)
183+
{
184+
public override async Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
185+
{
186+
Console.WriteLine($"FLAG: {((GlobalOptions)context.GlobalOptions!).Flag}");
187+
await Next.InvokeAsync(context, cancellationToken);
188+
}
189+
}
190+
""", "some-command hello --global-flag flag-value -- more args here", """
191+
FLAG: flag-value
192+
ARG: hello
193+
ESCAPED: more, args, here
194+
195+
""");
196+
}
153197
}

0 commit comments

Comments
 (0)