Skip to content

Commit 0edfc0a

Browse files
committed
fix formatter for cases where no short code has been setup
1 parent fa09b03 commit 0edfc0a

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

FluentCommandLineParser.Tests/CommandLineOptionFormatterTests.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,18 @@ public void Ensure_Format_Returns_Expected_String()
119119
// Short1 Description1
120120
// Short2:Long2 Description2
121121

122-
var mockOption1 = CreateMockOption("Short1", null, "Description1");
123-
var mockOption2 = CreateMockOption("Short2", "Long2", "Description2");
122+
var mockOptionA = CreateMockOption("a", "aaa", "a-description");
123+
var mockOptionB = CreateMockOption("b", null, "b-description1");
124+
var mockOptionC = CreateMockOption(null, "ccc", "c-description");
124125

125126
var expectedSb = new StringBuilder();
126127
expectedSb.AppendLine();
127-
expectedSb.AppendFormat(CultureInfo.CurrentUICulture, CommandLineOptionFormatter.TextFormat, mockOption1.ShortName, mockOption1.Description);
128-
expectedSb.AppendFormat(CultureInfo.CurrentUICulture, CommandLineOptionFormatter.TextFormat, mockOption2.ShortName + ":" + mockOption2.LongName, mockOption2.Description);
128+
expectedSb.AppendFormat(CultureInfo.CurrentUICulture, CommandLineOptionFormatter.TextFormat, mockOptionA.ShortName + ":" + mockOptionA.LongName, mockOptionA.Description);
129+
expectedSb.AppendFormat(CultureInfo.CurrentUICulture, CommandLineOptionFormatter.TextFormat, mockOptionB.ShortName, mockOptionB.Description);
130+
expectedSb.AppendFormat(CultureInfo.CurrentUICulture, CommandLineOptionFormatter.TextFormat, mockOptionC.LongName, mockOptionC.Description);
129131

130132
var expected = expectedSb.ToString();
131-
var actual = formatter.Format(new[] { mockOption1, mockOption2 });
133+
var actual = formatter.Format(new[] { mockOptionB, mockOptionA, mockOptionC });
132134

133135
Assert.AreEqual(expected, actual, "Formatter returned unexpected string");
134136
}

FluentCommandLineParser/Internals/CommandLineOptionFormatter.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ public string Format(IEnumerable<ICommandLineOption> options)
107107
sb.AppendLine();
108108
}
109109

110-
foreach (var cmdOption in list.OrderBy(x => x.ShortName))
110+
var ordered = (from option in list
111+
orderby option.ShortName.IsNullOrWhiteSpace() == false descending , option.ShortName
112+
select option).ToList();
113+
114+
foreach (var cmdOption in ordered)
111115
sb.AppendFormat(CultureInfo.CurrentUICulture, TextFormat, FormatValue(cmdOption), cmdOption.Description);
112116

113117
return sb.ToString();
@@ -118,9 +122,18 @@ public string Format(IEnumerable<ICommandLineOption> options)
118122
/// </summary>
119123
static string FormatValue(ICommandLineOption cmdOption)
120124
{
121-
return cmdOption.LongName.IsNullOrWhiteSpace()
122-
? cmdOption.ShortName
123-
: cmdOption.ShortName + ":" + cmdOption.LongName;
125+
if (cmdOption.ShortName.IsNullOrWhiteSpace())
126+
{
127+
return cmdOption.LongName;
128+
}
129+
130+
if (cmdOption.LongName.IsNullOrWhiteSpace())
131+
{
132+
return cmdOption.ShortName;
133+
}
134+
135+
return cmdOption.ShortName + ":" + cmdOption.LongName;
124136
}
137+
// string = [-|/]f[:|=| ]|[-|/|--]filename[:|=| ] value
125138
}
126139
}

0 commit comments

Comments
 (0)