Skip to content

Commit c541d67

Browse files
committed
properly identify prefixed args during binding
1 parent 0d91d35 commit c541d67

3 files changed

Lines changed: 25 additions & 14 deletions

File tree

assets/docs.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ catch (CliArgumentException exception)
260260
}
261261
```
262262

263-
## Adnvanced usage
263+
## Advanced usage
264264

265265
### Assign unbound properties
266266

src/lib/Vertical/Cli/Binding/BindingValuesLookup.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,11 @@ private static void TakeOptions(
123123
continue;
124124
}
125125

126-
if (node?.Value is { PrefixType: OptionPrefixType.None } operandArgument)
127-
{
128-
entries.Add((parameter.BindingName, operandArgument));
129-
node = argumentList.Remove(node, node.Next);
130-
continue;
131-
}
132-
133-
throw Exceptions.OptionValueNotProvided(route, parameter, argument);
126+
if (node?.Value is not { PrefixType: OptionPrefixType.None } operandArgument)
127+
throw Exceptions.OptionValueNotProvided(route, parameter, argument);
128+
129+
entries.Add((parameter.BindingName, operandArgument));
130+
node = argumentList.Remove(node, node.Next);
134131
}
135132
}
136133

test/UnitTests/Vertical/Cli/Binding/OperandTests.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ public override KeyValuePair<string, string> Convert(string str)
1919
}
2020
}
2121

22-
public record Options(KeyValuePair<string, string>[] Properties, string? LogLevel);
22+
public record Options(KeyValuePair<string, string>[] Properties, string? LogLevel, bool Test);
2323

2424
[Fact]
25-
public void Bind_Argument_Text_Returns_Expected()
25+
public void Bind_Option_Argument_Text_Returns_Expected()
2626
{
2727
var app = new CliApplicationBuilder("test")
2828
.AddConverters([new KeyValuePairConverter()])
2929
.MapModel<Options>(map => map.Option(x => x.Properties, ["--watermark"], Arity.ZeroOrMany))
30-
.Route<Options>("test", opt => 0)
30+
.Route<Options>("test", _ => 0)
3131
.Build();
3232

3333
var context = CliEngine.GetBindingContext(app, ["--watermark", "id=value"]);
@@ -38,12 +38,12 @@ public void Bind_Argument_Text_Returns_Expected()
3838
}
3939

4040
[Fact]
41-
public void Bind_Operand_Value_Returns_Expected()
41+
public void Bind_Option_Operand_Value_Returns_Expected()
4242
{
4343
var app = new CliApplicationBuilder("test")
4444
.AddConverters([new StringConverter()])
4545
.MapModel<Options>(map => map.Option(x => x.LogLevel, ["--level"]))
46-
.Route<Options>("test", opt => 0)
46+
.Route<Options>("test", _ => 0)
4747
.Build();
4848

4949
CliEngine
@@ -61,4 +61,18 @@ public void Bind_Operand_Value_Returns_Expected()
6161
.GetValue<string?>(nameof(Options.LogLevel))
6262
.ShouldBe("debug");
6363
}
64+
65+
[Fact]
66+
public void Bind_Switch_Returns_Expected()
67+
{
68+
var app = new CliApplicationBuilder("test")
69+
.AddConverters([new ParsableConverter<bool>()])
70+
.MapModel<Options>(map => map.Switch(x => x.Test, ["--test"]))
71+
.Route<Options>("test", _ => 0)
72+
.Build();
73+
74+
CliEngine.GetBindingContext(app, ["--test"])
75+
.GetValue<bool>(nameof(Options.Test))
76+
.ShouldBeTrue();
77+
}
6478
}

0 commit comments

Comments
 (0)