Skip to content

Commit 02c28a0

Browse files
committed
+ Added support Range<double>, Range<float>
1 parent de6f3a8 commit 02c28a0

File tree

3 files changed

+169
-4
lines changed

3 files changed

+169
-4
lines changed

src/FlowCommandLine/FlowCommandLine.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
<IsTrimmable>true</IsTrimmable>
2121
<PublishTrimmed>true</PublishTrimmed>
2222
<PackageReleaseNotes>
23-
Fixed padding for command parameters
23+
Added support Range|int type for parsing
24+
Added support Range|double type for parsing
25+
Added support Range|float type for parsing
2426
</PackageReleaseNotes>
2527
</PropertyGroup>
2628

src/FlowCommandLine/FlowPropertyMapper.cs

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,18 @@ public static bool SetPropertyValue<T> ( Type type, Dictionary<string, string> v
150150
isChanged = true;
151151
}
152152
break;
153+
case Type _ when type == typeof ( CommandLineRange<double> ):
154+
if ( values.ContainsKey ( parameterKey ) ) {
155+
property.SetValue ( model, MapRangeDoubleCollections ( values[parameterKey] ) );
156+
isChanged = true;
157+
}
158+
break;
159+
case Type _ when type == typeof ( CommandLineRange<float> ):
160+
if ( values.ContainsKey ( parameterKey ) ) {
161+
property.SetValue ( model, MapRangeFloatCollections ( values[parameterKey] ) );
162+
isChanged = true;
163+
}
164+
break;
153165
default:
154166
Console.WriteLine ( $"Property {property.Name} with type {property.PropertyType.FullName} inside class {type.Name} not supported!" );
155167
break;
@@ -297,15 +309,69 @@ private static CommandLineRange<int> MapRangeIntCollections ( string value ) {
297309
a => {
298310
if ( int.TryParse ( a, out var int32value ) ) return int32value;
299311

300-
return 0;
312+
return (int?) null;
301313
}
302314
)
303315
.ToList ();
316+
parts = parts.Where ( a => a.HasValue ).ToList ();
304317
if ( parts.Count () < 2 ) return new CommandLineRange<int> ();
305318

319+
var firstPart = parts.First ()!.Value;
320+
var secondPart = parts.ElementAt ( 1 )!.Value;
321+
306322
return new CommandLineRange<int> {
307-
Start = parts.First (),
308-
End = parts.ElementAt ( 1 ),
323+
Start = firstPart,
324+
End = secondPart,
325+
};
326+
}
327+
328+
private static CommandLineRange<double> MapRangeDoubleCollections ( string value ) {
329+
if ( !value.Contains ( '-' ) ) return new CommandLineRange<double> ();
330+
331+
var parts = value
332+
.Split ( '-' )
333+
.Select (
334+
a => {
335+
if ( double.TryParse ( a, CultureInfo.InvariantCulture, out var doublevalue ) ) return doublevalue;
336+
337+
return (double?) null;
338+
}
339+
)
340+
.ToList ();
341+
parts = parts.Where ( a => a.HasValue ).ToList ();
342+
if ( parts.Count () < 2 ) return new CommandLineRange<double> ();
343+
344+
var firstPart = parts.First ()!.Value;
345+
var secondPart = parts.ElementAt ( 1 )!.Value;
346+
347+
return new CommandLineRange<double> {
348+
Start = firstPart,
349+
End = secondPart,
350+
};
351+
}
352+
353+
private static CommandLineRange<float> MapRangeFloatCollections ( string value ) {
354+
if ( !value.Contains ( '-' ) ) return new CommandLineRange<float> ();
355+
356+
var parts = value
357+
.Split ( '-' )
358+
.Select (
359+
a => {
360+
if ( float.TryParse ( a, CultureInfo.InvariantCulture, out var floatValue ) ) return floatValue;
361+
362+
return (float?) null;
363+
}
364+
)
365+
.ToList ();
366+
parts = parts.Where ( a => a.HasValue ).ToList ();
367+
if ( parts.Count () < 2 ) return new CommandLineRange<float> ();
368+
369+
var firstPart = parts.First ()!.Value;
370+
var secondPart = parts.ElementAt ( 1 )!.Value;
371+
372+
return new CommandLineRange<float> {
373+
Start = firstPart,
374+
End = secondPart,
309375
};
310376
}
311377

src/FlowCommandLineTests/CommandLineUnitTests.cs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,9 @@ public void RunOptions_Success_RangeIntParameter_NotParsed () {
991991
var result = commandLine
992992
.Application ( "TestApplication", "1.0.0" )
993993
.AddOption ( fullName: "Parameter1" )
994+
.AddOption ( fullName: "Parameter2" )
995+
.AddOption ( fullName: "Parameter3" )
996+
.AddOption ( fullName: "Parameter4" )
994997
.RunOptions<RunOptions_Success_RangeIntParameter_NotParsed_Class> ();
995998

996999
//assert
@@ -1005,6 +1008,100 @@ public void RunOptions_Success_RangeIntParameter_NotParsed () {
10051008
Assert.Equal ( 0, result.Parameter4.End );
10061009
}
10071010

1011+
public record RunOptions_Success_RangeDoubleParameter_NotParsed_Class {
1012+
1013+
public CommandLineRange<double> Parameter1 { get; set; } = new CommandLineRange<double> ();
1014+
1015+
public CommandLineRange<double> Parameter2 { get; set; } = new CommandLineRange<double> ();
1016+
1017+
public CommandLineRange<double> Parameter3 { get; set; } = new CommandLineRange<double> ();
1018+
1019+
public CommandLineRange<double> Parameter4 { get; set; } = new CommandLineRange<double> ();
1020+
1021+
public CommandLineRange<double> Parameter5 { get; set; } = new CommandLineRange<double> ();
1022+
1023+
}
1024+
1025+
[Fact]
1026+
public void RunOptions_Success_RangeDoubleParameter () {
1027+
//arrange
1028+
var messages = new List<string> ();
1029+
var fakeProvider = A.Fake<ICommandLineProvider> ();
1030+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=235.30 --parameter2=- --parameter3=-100.30 --parameter4=178.56- --parameter5=178.56-895.450" );
1031+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
1032+
var commandLine = new CommandLine ( fakeProvider );
1033+
1034+
//act
1035+
var result = commandLine
1036+
.Application ( "TestApplication", "1.0.0" )
1037+
.AddOption ( fullName: "Parameter1" )
1038+
.AddOption ( fullName: "Parameter2" )
1039+
.AddOption ( fullName: "Parameter3" )
1040+
.AddOption ( fullName: "Parameter4" )
1041+
.AddOption ( fullName: "Parameter5" )
1042+
.RunOptions<RunOptions_Success_RangeDoubleParameter_NotParsed_Class> ();
1043+
1044+
//assert
1045+
Assert.NotNull ( result );
1046+
Assert.Equal ( 0, result.Parameter1.Start );
1047+
Assert.Equal ( 0, result.Parameter1.End );
1048+
Assert.Equal ( 0, result.Parameter2.Start );
1049+
Assert.Equal ( 0, result.Parameter2.End );
1050+
Assert.Equal ( 0, result.Parameter3.Start );
1051+
Assert.Equal ( 0, result.Parameter3.End );
1052+
Assert.Equal ( 0, result.Parameter4.Start );
1053+
Assert.Equal ( 0, result.Parameter4.End );
1054+
Assert.Equal ( 178.56, result.Parameter5.Start );
1055+
Assert.Equal ( 895.450, result.Parameter5.End );
1056+
}
1057+
1058+
public record RunOptions_Success_RangeFloatParameter_Class {
1059+
1060+
public CommandLineRange<float> Parameter1 { get; set; } = new CommandLineRange<float> ();
1061+
1062+
public CommandLineRange<float> Parameter2 { get; set; } = new CommandLineRange<float> ();
1063+
1064+
public CommandLineRange<float> Parameter3 { get; set; } = new CommandLineRange<float> ();
1065+
1066+
public CommandLineRange<float> Parameter4 { get; set; } = new CommandLineRange<float> ();
1067+
1068+
public CommandLineRange<float> Parameter5 { get; set; } = new CommandLineRange<float> ();
1069+
1070+
}
1071+
1072+
[Fact]
1073+
public void RunOptions_Success_RangeFloatParameter () {
1074+
//arrange
1075+
var messages = new List<string> ();
1076+
var fakeProvider = A.Fake<ICommandLineProvider> ();
1077+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=235.30 --parameter2=- --parameter3=-100.30 --parameter4=178.56- --parameter5=178.56-895.450" );
1078+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
1079+
var commandLine = new CommandLine ( fakeProvider );
1080+
1081+
//act
1082+
var result = commandLine
1083+
.Application ( "TestApplication", "1.0.0" )
1084+
.AddOption ( fullName: "Parameter1" )
1085+
.AddOption ( fullName: "Parameter2" )
1086+
.AddOption ( fullName: "Parameter3" )
1087+
.AddOption ( fullName: "Parameter4" )
1088+
.AddOption ( fullName: "Parameter5" )
1089+
.RunOptions<RunOptions_Success_RangeFloatParameter_Class> ();
1090+
1091+
//assert
1092+
Assert.NotNull ( result );
1093+
Assert.Equal ( 0, result.Parameter1.Start );
1094+
Assert.Equal ( 0, result.Parameter1.End );
1095+
Assert.Equal ( 0, result.Parameter2.Start );
1096+
Assert.Equal ( 0, result.Parameter2.End );
1097+
Assert.Equal ( 0, result.Parameter3.Start );
1098+
Assert.Equal ( 0, result.Parameter3.End );
1099+
Assert.Equal ( 0, result.Parameter4.Start );
1100+
Assert.Equal ( 0, result.Parameter4.End );
1101+
Assert.Equal ( 178.56f, result.Parameter5.Start );
1102+
Assert.Equal ( 895.450f, result.Parameter5.End );
1103+
}
1104+
10081105
public class DatabaseAdjustments {
10091106

10101107
public IEnumerable<string> Files { get; set; } = Enumerable.Empty<string> ();

0 commit comments

Comments
 (0)