Skip to content

Commit 4e79d43

Browse files
committed
add to cli xmldoc hidden command defaultvalue for options
1 parent 5c87d7f commit 4e79d43

13 files changed

+128
-28
lines changed

global.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "http://json.schemastore.org/global",
33
"sdk": {
4-
"version": "8.0.204",
4+
"version": "8.0.302",
55
"rollForward": "latestFeature"
66
}
77
}

src/Spectre.Console.Cli/Internal/Commands/XmlDocCommand.cs

+7
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,13 @@ private static IEnumerable<XmlNode> CreateParameterNodes(XmlDocument document, C
197197
node.AppendChild(descriptionNode);
198198
}
199199

200+
if (option.DefaultValue != null && option.DefaultValue.Value != null)
201+
{
202+
var defaultValueNode = document.CreateElement("DefaultValue");
203+
defaultValueNode.InnerText = option.DefaultValue.Value.ToString()!;
204+
node.AppendChild(defaultValueNode);
205+
}
206+
200207
yield return node;
201208
}
202209
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Model>
3+
<!--CAT-->
4+
<Command Name="cat" IsBranch="false" ClrType="Spectre.Console.Tests.Data.CatCommand" Settings="Spectre.Console.Tests.Data.CatSettings">
5+
<Parameters>
6+
<Argument Name="LEGS" Position="0" Required="false" Kind="scalar" ClrType="System.Int32">
7+
<Description>The number of legs.</Description>
8+
<Validators>
9+
<Validator ClrType="Spectre.Console.Tests.Data.EvenNumberValidatorAttribute" Message="Animals must have an even number of legs." />
10+
<Validator ClrType="Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute" Message="Number of legs must be greater than 0." />
11+
</Validators>
12+
</Argument>
13+
<Option Short="" Long="agility" Value="VALUE" Required="false" Kind="scalar" ClrType="System.Int32">
14+
<Description>The agility between 0 and 100.</Description>
15+
<DefaultValue>10</DefaultValue>
16+
</Option>
17+
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
18+
<Description>Indicates whether or not the animal is alive.</Description>
19+
<DefaultValue>False</DefaultValue>
20+
</Option>
21+
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
22+
</Parameters>
23+
</Command>
24+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_1.Output.verified.txt

+8-3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</Argument>
1313
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1414
<Description>Indicates whether or not the animal is alive.</Description>
15+
<DefaultValue>False</DefaultValue>
1516
</Option>
1617
</Parameters>
1718
<!--MAMMAL-->
@@ -24,7 +25,9 @@
2425
<Description>The dog command.</Description>
2526
<Parameters>
2627
<Argument Name="AGE" Position="0" Required="true" Kind="scalar" ClrType="System.Int32" />
27-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
28+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
29+
<DefaultValue>False</DefaultValue>
30+
</Option>
2831
</Parameters>
2932
</Command>
3033
<!--HORSE-->
@@ -33,9 +36,11 @@
3336
<Parameters>
3437
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
3538
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
36-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
39+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
40+
<DefaultValue>food.txt</DefaultValue>
41+
</Option>
3742
</Parameters>
3843
</Command>
3944
</Command>
4045
</Command>
41-
</Model>
46+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_10.Output.verified.txt

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<Model>
33
<!--DOG-->
44
<Command Name="dog" IsBranch="false" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
@@ -14,13 +14,16 @@
1414
<Argument Name="AGE" Position="1" Required="true" Kind="scalar" ClrType="System.Int32" />
1515
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1616
<Description>Indicates whether or not the animal is alive.</Description>
17+
<DefaultValue>False</DefaultValue>
18+
</Option>
19+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
20+
<DefaultValue>False</DefaultValue>
1721
</Option>
18-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
1922
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2023
</Parameters>
2124
<Examples>
2225
<Example commandLine="dog -g" />
2326
<Example commandLine="dog --good-boy" />
2427
</Examples>
2528
</Command>
26-
</Model>
29+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_2.Output.verified.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
<Argument Name="AGE" Position="1" Required="true" Kind="scalar" ClrType="System.Int32" />
1515
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1616
<Description>Indicates whether or not the animal is alive.</Description>
17+
<DefaultValue>False</DefaultValue>
18+
</Option>
19+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
20+
<DefaultValue>False</DefaultValue>
1721
</Option>
18-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
1922
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2023
</Parameters>
2124
</Command>
22-
</Model>
25+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_3.Output.verified.txt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<Model>
33
<!--ANIMAL-->
44
<Command Name="animal" IsBranch="true" Settings="Spectre.Console.Tests.Data.AnimalSettings">
@@ -12,14 +12,17 @@
1212
</Argument>
1313
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1414
<Description>Indicates whether or not the animal is alive.</Description>
15+
<DefaultValue>False</DefaultValue>
1516
</Option>
1617
</Parameters>
1718
<!--DOG-->
1819
<Command Name="dog" IsBranch="false" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
1920
<Description>The dog command.</Description>
2021
<Parameters>
2122
<Argument Name="AGE" Position="0" Required="true" Kind="scalar" ClrType="System.Int32" />
22-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
23+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
24+
<DefaultValue>False</DefaultValue>
25+
</Option>
2326
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2427
</Parameters>
2528
</Command>
@@ -29,9 +32,11 @@
2932
<Parameters>
3033
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
3134
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
32-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
35+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
36+
<DefaultValue>food.txt</DefaultValue>
37+
</Option>
3338
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
3439
</Parameters>
3540
</Command>
3641
</Command>
37-
</Model>
42+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_4.Output.verified.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,19 @@
1212
</Argument>
1313
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1414
<Description>Indicates whether or not the animal is alive.</Description>
15+
<DefaultValue>False</DefaultValue>
1516
</Option>
1617
</Parameters>
1718
<!--DOG-->
1819
<Command Name="dog" IsBranch="false" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
1920
<Description>The dog command.</Description>
2021
<Parameters>
2122
<Argument Name="AGE" Position="0" Required="true" Kind="scalar" ClrType="System.Int32" />
22-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
23+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
24+
<DefaultValue>False</DefaultValue>
25+
</Option>
2326
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2427
</Parameters>
2528
</Command>
2629
</Command>
27-
</Model>
30+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_6.Output.verified.txt

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<Model>
33
<!--DEFAULT COMMAND-->
44
<Command Name="__default_command" IsBranch="false" IsDefault="true" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
@@ -14,8 +14,11 @@
1414
<Argument Name="AGE" Position="1" Required="true" Kind="scalar" ClrType="System.Int32" />
1515
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1616
<Description>Indicates whether or not the animal is alive.</Description>
17+
<DefaultValue>False</DefaultValue>
18+
</Option>
19+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
20+
<DefaultValue>False</DefaultValue>
1721
</Option>
18-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
1922
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2023
</Parameters>
2124
</Command>
@@ -32,11 +35,14 @@
3235
</Argument>
3336
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
3437
<Description>Indicates whether or not the animal is alive.</Description>
38+
<DefaultValue>False</DefaultValue>
3539
</Option>
3640
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
3741
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
38-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
42+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
43+
<DefaultValue>food.txt</DefaultValue>
44+
</Option>
3945
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
4046
</Parameters>
4147
</Command>
42-
</Model>
48+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_7.Output.verified.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</Argument>
1313
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1414
<Description>Indicates whether or not the animal is alive.</Description>
15+
<DefaultValue>False</DefaultValue>
1516
</Option>
1617
</Parameters>
1718
<!--MAMMAL-->
@@ -25,9 +26,11 @@
2526
<Parameters>
2627
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
2728
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
28-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
29+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
30+
<DefaultValue>food.txt</DefaultValue>
31+
</Option>
2932
</Parameters>
3033
</Command>
3134
</Command>
3235
</Command>
33-
</Model>
36+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_8.Output.verified.txt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<Model>
33
<!--ANIMAL-->
44
<Command Name="animal" IsBranch="true" Settings="Spectre.Console.Tests.Data.AnimalSettings">
@@ -12,14 +12,17 @@
1212
</Argument>
1313
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1414
<Description>Indicates whether or not the animal is alive.</Description>
15+
<DefaultValue>False</DefaultValue>
1516
</Option>
1617
</Parameters>
1718
<!--DOG-->
1819
<Command Name="dog" IsBranch="false" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
1920
<Description>The dog command.</Description>
2021
<Parameters>
2122
<Argument Name="AGE" Position="0" Required="true" Kind="scalar" ClrType="System.Int32" />
22-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
23+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
24+
<DefaultValue>False</DefaultValue>
25+
</Option>
2326
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2427
</Parameters>
2528
</Command>
@@ -29,9 +32,11 @@
2932
<Parameters>
3033
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
3134
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
32-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
35+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
36+
<DefaultValue>food.txt</DefaultValue>
37+
</Option>
3338
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
3439
</Parameters>
3540
</Command>
3641
</Command>
37-
</Model>
42+
</Model>

test/Spectre.Console.Cli.Tests/Expectations/Xml/Test_9.Output.verified.txt

+8-3
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,17 @@
1414
</Argument>
1515
<Option Short="a" Long="alive,not-dead" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
1616
<Description>Indicates whether or not the animal is alive.</Description>
17+
<DefaultValue>False</DefaultValue>
1718
</Option>
1819
</Parameters>
1920
<!--DOG-->
2021
<Command Name="dog" IsBranch="false" ClrType="Spectre.Console.Tests.Data.DogCommand" Settings="Spectre.Console.Tests.Data.DogSettings">
2122
<Description>The dog command.</Description>
2223
<Parameters>
2324
<Argument Name="AGE" Position="0" Required="true" Kind="scalar" ClrType="System.Int32" />
24-
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean" />
25+
<Option Short="g" Long="good-boy" Value="NULL" Required="false" Kind="flag" ClrType="System.Boolean">
26+
<DefaultValue>False</DefaultValue>
27+
</Option>
2528
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
2629
</Parameters>
2730
</Command>
@@ -31,9 +34,11 @@
3134
<Parameters>
3235
<Option Short="d" Long="day" Value="MON|TUE" Required="false" Kind="scalar" ClrType="System.DayOfWeek" />
3336
<Option Short="" Long="directory" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.DirectoryInfo" />
34-
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo" />
37+
<Option Short="" Long="file" Value="NULL" Required="false" Kind="scalar" ClrType="System.IO.FileInfo">
38+
<DefaultValue>food.txt</DefaultValue>
39+
</Option>
3540
<Option Short="n,p" Long="name,pet-name" Value="VALUE" Required="false" Kind="scalar" ClrType="System.String" />
3641
</Parameters>
3742
</Command>
3843
</Command>
39-
</Model>
44+
</Model>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
namespace Spectre.Console.Tests.Unit.Cli;
2+
3+
public sealed partial class CommandAppTests
4+
{
5+
[ExpectationPath("Cli")]
6+
public class Cli
7+
{
8+
[Fact]
9+
[Expectation("Root", "DefaultValue")]
10+
public Task Should_Print_DefaultValue()
11+
{
12+
// Given
13+
var app = new CommandAppTester();
14+
app.Configure(config =>
15+
{
16+
config.PropagateExceptions();
17+
config.AddCommand<CatCommand>("cat");
18+
});
19+
20+
// When
21+
var result = app.Run(new[]
22+
{
23+
"cli", "xmldoc",
24+
});
25+
26+
// Then
27+
result.ExitCode.ShouldBe(0);
28+
return Verifier.Verify(result.Output);
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)