Skip to content

Commit ab7c359

Browse files
committed
supported IEnumerable<double> and List<double>
1 parent d4e3113 commit ab7c359

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

src/FlowCommandLine/FlowPropertyMapper.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ public static bool SetPropertyValue<T> ( Type type, Dictionary<string, string> v
7070
isChanged = true;
7171
}
7272
break;
73+
case Type _ when type == typeof ( IEnumerable<double> ):
74+
if ( values.ContainsKey ( parameterKey ) ) {
75+
property.SetValue ( model, MapDoubleCollections ( values, parameterKey ) );
76+
isChanged = true;
77+
}
78+
break;
79+
case Type _ when type == typeof ( List<double> ):
80+
if ( values.ContainsKey ( parameterKey ) ) {
81+
property.SetValue ( model, MapDoubleCollections ( values, parameterKey ) );
82+
isChanged = true;
83+
}
84+
break;
7385
case Type _ when type == typeof ( float ):
7486
if ( values.ContainsKey ( parameterKey ) && float.TryParse ( values[parameterKey], CultureInfo.InvariantCulture, out var floatvalue ) ) {
7587
property.SetValue ( model, floatvalue );
@@ -142,6 +154,23 @@ private static List<long> MapLongCollections ( Dictionary<string, string> values
142154
.ToList ();
143155
}
144156

157+
private static List<double> MapDoubleCollections ( Dictionary<string, string> values, string parameterKey ) {
158+
return values[parameterKey]
159+
.Split ( "," )
160+
.Select (
161+
a => {
162+
if ( double.TryParse ( a, CultureInfo.InvariantCulture, out var doublevalue ) ) {
163+
return (double?) doublevalue;
164+
} else {
165+
return null;
166+
}
167+
}
168+
)
169+
.Where ( a => a != null )
170+
.Select ( a => a!.Value )
171+
.ToList ();
172+
}
173+
145174
}
146175

147176
}

src/FlowCommandLineTests/CommandLineUnitTests.cs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,96 @@ public void RunOptions_Success_ListLongParameter () {
529529
Assert.Equal ( new List<long> { 100, 100, 100, 100, 100, 100 }, result.Parameter3 );
530530
}
531531

532+
public record RunOptions_Success_DoubleParameter_Class {
533+
public double Parameter1 { get; set; }
534+
public double Parameter2 { get; set; }
535+
public double Parameter3 { get; set; }
536+
}
537+
538+
[Fact]
539+
public void RunOptions_Success_DoubleParameter () {
540+
//arrange
541+
var messages = new List<string> ();
542+
var fakeProvider = A.Fake<ICommandLineProvider> ();
543+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=0.10 --parameter2=000000000.35 --parameter3=3333.33333333" );
544+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
545+
var commandLine = new CommandLine ( fakeProvider );
546+
547+
//act
548+
var result = commandLine
549+
.Application ( "TestApplication", "1.0.0" )
550+
.AddOption ( fullName: "Parameter1" )
551+
.AddOption ( fullName: "Parameter2" )
552+
.AddOption ( fullName: "Parameter3" )
553+
.RunOptions<RunOptions_Success_DoubleParameter_Class> ();
554+
555+
//assert
556+
Assert.NotNull ( result );
557+
Assert.Equal ( 0.10, result.Parameter1 );
558+
Assert.Equal ( 000000000.35, result.Parameter2 );
559+
Assert.Equal ( 3333.33333333, result.Parameter3 );
560+
}
561+
562+
public record RunOptions_Success_IEnumerableDoubleParameter_Class {
563+
public IEnumerable<double> Parameter1 { get; set; } = Enumerable.Empty<double> ();
564+
public IEnumerable<double> Parameter2 { get; set; } = Enumerable.Empty<double> ();
565+
public IEnumerable<double> Parameter3 { get; set; } = Enumerable.Empty<double> ();
566+
}
567+
568+
[Fact]
569+
public void RunOptions_Success_IEnumerableDoubleParameter () {
570+
//arrange
571+
var messages = new List<string> ();
572+
var fakeProvider = A.Fake<ICommandLineProvider> ();
573+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=0.1,0.2,0.3,0.4 --parameter2=8124.343,2374.234,1.23412,23423.423,81.24343,23742.34,123.412,2342.3423 --parameter3=100.0,100.01,100.02,100.03,100.04,100.05" );
574+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
575+
var commandLine = new CommandLine ( fakeProvider );
576+
577+
//act
578+
var result = commandLine
579+
.Application ( "TestApplication", "1.0.0" )
580+
.AddOption ( fullName: "Parameter1" )
581+
.AddOption ( fullName: "Parameter2" )
582+
.AddOption ( fullName: "Parameter3" )
583+
.RunOptions<RunOptions_Success_IEnumerableDoubleParameter_Class> ();
584+
585+
//assert
586+
Assert.NotNull ( result );
587+
Assert.Equal ( new List<double> { 0.1, 0.2, 0.3, 0.4 }, result.Parameter1 );
588+
Assert.Equal ( new List<double> { 8124.343, 2374.234, 1.23412, 23423.423, 81.24343, 23742.34, 123.412, 2342.3423 }, result.Parameter2 );
589+
Assert.Equal ( new List<double> { 100.0, 100.01, 100.02, 100.03, 100.04, 100.05 }, result.Parameter3 );
590+
}
591+
592+
public record RunOptions_Success_ListDoubleParameter_Class {
593+
public List<double> Parameter1 { get; set; } = Enumerable.Empty<double> ().ToList ();
594+
public List<double> Parameter2 { get; set; } = Enumerable.Empty<double> ().ToList ();
595+
public List<double> Parameter3 { get; set; } = Enumerable.Empty<double> ().ToList ();
596+
}
597+
598+
[Fact]
599+
public void RunOptions_Success_ListDoubleParameter () {
600+
//arrange
601+
var messages = new List<string> ();
602+
var fakeProvider = A.Fake<ICommandLineProvider> ();
603+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=0.1,0.2,0.3,0.4 --parameter2=812434.3345345,23742.343243,12.3412345345,23423.423345345,8145646.24343,2374.234,12341.5465642,234234.56456423 --parameter3=100.0,100.1,100.2,100.3,100.4,100.5" );
604+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
605+
var commandLine = new CommandLine ( fakeProvider );
606+
607+
//act
608+
var result = commandLine
609+
.Application ( "TestApplication", "1.0.0" )
610+
.AddOption ( fullName: "Parameter1" )
611+
.AddOption ( fullName: "Parameter2" )
612+
.AddOption ( fullName: "Parameter3" )
613+
.RunOptions<RunOptions_Success_ListDoubleParameter_Class> ();
614+
615+
//assert
616+
Assert.NotNull ( result );
617+
Assert.Equal ( new List<double> { 0.1, 0.2, 0.3, 0.4 }, result.Parameter1 );
618+
Assert.Equal ( new List<double> { 812434.3345345, 23742.343243, 12.3412345345, 23423.423345345, 8145646.24343, 2374.234, 12341.5465642, 234234.56456423 }, result.Parameter2 );
619+
Assert.Equal ( new List<double> { 100.0, 100.1, 100.2, 100.3, 100.4, 100.5 }, result.Parameter3 );
620+
}
621+
532622
}
533623

534624
}

0 commit comments

Comments
 (0)