Skip to content

Commit d4e3113

Browse files
committed
+ Added support List<long>, IEnumerable<long>
1 parent c5e9b45 commit d4e3113

File tree

3 files changed

+220
-30
lines changed

3 files changed

+220
-30
lines changed

src/FlowCommandLine/FlowCommandLine.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageTags>command,line,commandline,command-line,parse,parser,parsing,shell</PackageTags>
1717
<PackageLicenseFile>LICENSE</PackageLicenseFile>
1818
<PackageReadmeFile>README.md</PackageReadmeFile>
19-
<Version>1.0.1.0</Version>
19+
<Version>1.0.2.0</Version>
2020
</PropertyGroup>
2121

2222
<ItemGroup>

src/FlowCommandLine/FlowPropertyMapper.cs

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,13 @@ public static bool SetPropertyValue<T> ( Type type, Dictionary<string, string> v
5454
break;
5555
case Type _ when type == typeof ( IEnumerable<long> ):
5656
if ( values.ContainsKey ( parameterKey ) ) {
57-
var longValues = values[parameterKey]
58-
.Split ( "," )
59-
.Select (
60-
a => {
61-
if ( long.TryParse ( values[parameterKey], out var int64value ) ) {
62-
return (long?) int64value;
63-
} else {
64-
return null;
65-
}
66-
}
67-
)
68-
.Where ( a => a != null )
69-
.ToList ();
70-
71-
property.SetValue ( model, longValues );
57+
property.SetValue ( model, MapLongCollections ( values, parameterKey ) );
58+
isChanged = true;
59+
}
60+
break;
61+
case Type _ when type == typeof ( List<long> ):
62+
if ( values.ContainsKey ( parameterKey ) ) {
63+
property.SetValue ( model, MapLongCollections ( values, parameterKey ) );
7264
isChanged = true;
7365
}
7466
break;
@@ -118,20 +110,38 @@ public static bool SetPropertyValue<T> ( Type type, Dictionary<string, string> v
118110

119111
private static List<int> MapIntegerCollections ( Dictionary<string, string> values, string parameterKey ) {
120112
return values[parameterKey]
121-
.Split ( "," )
122-
.Select (
123-
a => {
124-
if ( int.TryParse ( a, out var int32value ) ) {
125-
return (int?) int32value;
126-
} else {
127-
return null;
128-
}
129-
}
130-
)
131-
.Where ( a => a != null )
132-
.Select ( a => a.Value )
133-
.ToList ();
113+
.Split ( "," )
114+
.Select (
115+
a => {
116+
if ( int.TryParse ( a, out var int32value ) ) {
117+
return (int?) int32value;
118+
} else {
119+
return null;
120+
}
121+
}
122+
)
123+
.Where ( a => a != null )
124+
.Select ( a => a!.Value )
125+
.ToList ();
134126
}
127+
128+
private static List<long> MapLongCollections ( Dictionary<string, string> values, string parameterKey ) {
129+
return values[parameterKey]
130+
.Split ( "," )
131+
.Select (
132+
a => {
133+
if ( long.TryParse ( a, out var int32value ) ) {
134+
return (long?) int32value;
135+
} else {
136+
return null;
137+
}
138+
}
139+
)
140+
.Where ( a => a != null )
141+
.Select ( a => a!.Value )
142+
.ToList ();
143+
}
144+
135145
}
136146

137147
}

src/FlowCommandLineTests/CommandLineUnitTests.cs

Lines changed: 181 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ public void RunOptions_Success_SingleParameter () {
313313
//act
314314
var result = commandLine
315315
.Application ( "TestApplication", "1.0.0" )
316-
.AddOption(fullName: "Parameter1")
316+
.AddOption ( fullName: "Parameter1" )
317317
.RunOptions<RunOptions_Success_SingleParameter_Class> ();
318318

319319
//assert
@@ -349,6 +349,186 @@ public void RunOptions_Success_FewParameters () {
349349
Assert.Equal ( 144, result?.Parameter3 ?? null );
350350
}
351351

352+
public record RunOptions_Success_IntParameter_Class {
353+
public int Parameter1 { get; set; }
354+
public int Parameter2 { get; set; }
355+
public int Parameter3 { get; set; }
356+
}
357+
358+
[Fact]
359+
public void RunOptions_Success_IntParameter () {
360+
//arrange
361+
var messages = new List<string> ();
362+
var fakeProvider = A.Fake<ICommandLineProvider> ();
363+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1 --parameter2=100000 --parameter3=1212121212" );
364+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
365+
var commandLine = new CommandLine ( fakeProvider );
366+
367+
//act
368+
var result = commandLine
369+
.Application ( "TestApplication", "1.0.0" )
370+
.AddOption ( fullName: "Parameter1" )
371+
.AddOption ( fullName: "Parameter2" )
372+
.AddOption ( fullName: "Parameter3" )
373+
.RunOptions<RunOptions_Success_IntParameter_Class> ();
374+
375+
//assert
376+
Assert.NotNull ( result );
377+
Assert.Equal ( 1, result.Parameter1 );
378+
Assert.Equal ( 100000, result.Parameter2 );
379+
Assert.Equal ( 1212121212, result.Parameter3 );
380+
}
381+
382+
public record RunOptions_Success_IEnumerableIntParameter_Class {
383+
public IEnumerable<int> Parameter1 { get; set; } = Enumerable.Empty<int> ();
384+
public IEnumerable<int> Parameter2 { get; set; } = Enumerable.Empty<int> ();
385+
public IEnumerable<int> Parameter3 { get; set; } = Enumerable.Empty<int> ();
386+
}
387+
388+
[Fact]
389+
public void RunOptions_Success_IEnumerableIntParameter () {
390+
//arrange
391+
var messages = new List<string> ();
392+
var fakeProvider = A.Fake<ICommandLineProvider> ();
393+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1,2,3,4 --parameter2=8124343,2374234,123412,23423423,8124343,2374234,123412,23423423 --parameter3=100,100,100,100,100,100" );
394+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
395+
var commandLine = new CommandLine ( fakeProvider );
396+
397+
//act
398+
var result = commandLine
399+
.Application ( "TestApplication", "1.0.0" )
400+
.AddOption ( fullName: "Parameter1" )
401+
.AddOption ( fullName: "Parameter2" )
402+
.AddOption ( fullName: "Parameter3" )
403+
.RunOptions<RunOptions_Success_IEnumerableIntParameter_Class> ();
404+
405+
//assert
406+
Assert.NotNull ( result );
407+
Assert.Equal ( new List<int> { 1, 2, 3, 4 }, result.Parameter1 );
408+
Assert.Equal ( new List<int> { 8124343, 2374234, 123412, 23423423, 8124343, 2374234, 123412, 23423423 }, result.Parameter2 );
409+
Assert.Equal ( new List<int> { 100, 100, 100, 100, 100, 100 }, result.Parameter3 );
410+
}
411+
412+
public record RunOptions_Success_ListIntParameter_Class {
413+
public List<int> Parameter1 { get; set; } = Enumerable.Empty<int> ().ToList();
414+
public List<int> Parameter2 { get; set; } = Enumerable.Empty<int> ().ToList ();
415+
public List<int> Parameter3 { get; set; } = Enumerable.Empty<int> ().ToList ();
416+
}
417+
418+
[Fact]
419+
public void RunOptions_Success_ListIntParameter () {
420+
//arrange
421+
var messages = new List<string> ();
422+
var fakeProvider = A.Fake<ICommandLineProvider> ();
423+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1,2,3,4 --parameter2=8124343,2374234,123412,23423423,8124343,2374234,123412,23423423 --parameter3=100,100,100,100,100,100" );
424+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
425+
var commandLine = new CommandLine ( fakeProvider );
426+
427+
//act
428+
var result = commandLine
429+
.Application ( "TestApplication", "1.0.0" )
430+
.AddOption ( fullName: "Parameter1" )
431+
.AddOption ( fullName: "Parameter2" )
432+
.AddOption ( fullName: "Parameter3" )
433+
.RunOptions<RunOptions_Success_ListIntParameter_Class> ();
434+
435+
//assert
436+
Assert.NotNull ( result );
437+
Assert.Equal ( new List<int> { 1, 2, 3, 4 }, result.Parameter1 );
438+
Assert.Equal ( new List<int> { 8124343, 2374234, 123412, 23423423, 8124343, 2374234, 123412, 23423423 }, result.Parameter2 );
439+
Assert.Equal ( new List<int> { 100, 100, 100, 100, 100, 100 }, result.Parameter3 );
440+
}
441+
442+
public record RunOptions_Success_LongParameter_Class {
443+
public long Parameter1 { get; set; }
444+
public long Parameter2 { get; set; }
445+
public long Parameter3 { get; set; }
446+
}
447+
448+
[Fact]
449+
public void RunOptions_Success_LongParameter () {
450+
//arrange
451+
var messages = new List<string> ();
452+
var fakeProvider = A.Fake<ICommandLineProvider> ();
453+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1 --parameter2=10000000000 --parameter3=121212345231212" );
454+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
455+
var commandLine = new CommandLine ( fakeProvider );
456+
457+
//act
458+
var result = commandLine
459+
.Application ( "TestApplication", "1.0.0" )
460+
.AddOption ( fullName: "Parameter1" )
461+
.AddOption ( fullName: "Parameter2" )
462+
.AddOption ( fullName: "Parameter3" )
463+
.RunOptions<RunOptions_Success_LongParameter_Class> ();
464+
465+
//assert
466+
Assert.NotNull ( result );
467+
Assert.Equal ( 1, result.Parameter1 );
468+
Assert.Equal ( 10000000000, result.Parameter2 );
469+
Assert.Equal ( 121212345231212, result.Parameter3 );
470+
}
471+
472+
public record RunOptions_Success_IEnumerableLongParameter_Class {
473+
public IEnumerable<long> Parameter1 { get; set; } = Enumerable.Empty<long> ();
474+
public IEnumerable<long> Parameter2 { get; set; } = Enumerable.Empty<long> ();
475+
public IEnumerable<long> Parameter3 { get; set; } = Enumerable.Empty<long> ();
476+
}
477+
478+
[Fact]
479+
public void RunOptions_Success_IEnumerableLongParameter () {
480+
//arrange
481+
var messages = new List<string> ();
482+
var fakeProvider = A.Fake<ICommandLineProvider> ();
483+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1,2,3,4 --parameter2=8124343,2374234,123412,23423423,8124343,2374234,123412,23423423 --parameter3=100,100,100,100,100,100" );
484+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
485+
var commandLine = new CommandLine ( fakeProvider );
486+
487+
//act
488+
var result = commandLine
489+
.Application ( "TestApplication", "1.0.0" )
490+
.AddOption ( fullName: "Parameter1" )
491+
.AddOption ( fullName: "Parameter2" )
492+
.AddOption ( fullName: "Parameter3" )
493+
.RunOptions<RunOptions_Success_IEnumerableLongParameter_Class> ();
494+
495+
//assert
496+
Assert.NotNull ( result );
497+
Assert.Equal ( new List<long> { 1, 2, 3, 4 }, result.Parameter1 );
498+
Assert.Equal ( new List<long> { 8124343, 2374234, 123412, 23423423, 8124343, 2374234, 123412, 23423423 }, result.Parameter2 );
499+
Assert.Equal ( new List<long> { 100, 100, 100, 100, 100, 100 }, result.Parameter3 );
500+
}
501+
502+
public record RunOptions_Success_ListLongParameter_Class {
503+
public List<long> Parameter1 { get; set; } = Enumerable.Empty<long> ().ToList ();
504+
public List<long> Parameter2 { get; set; } = Enumerable.Empty<long> ().ToList ();
505+
public List<long> Parameter3 { get; set; } = Enumerable.Empty<long> ().ToList ();
506+
}
507+
508+
[Fact]
509+
public void RunOptions_Success_ListLongParameter () {
510+
//arrange
511+
var messages = new List<string> ();
512+
var fakeProvider = A.Fake<ICommandLineProvider> ();
513+
A.CallTo ( () => fakeProvider.GetCommandLine () ).Returns ( "--parameter1=1,2,3,4 --parameter2=8124343345345,23742343243,123412345345,23423423345345,814564624343,2374234,123415465642,23423456456423 --parameter3=100,100,100,100,100,100" );
514+
A.CallTo ( () => fakeProvider.WriteLine ( A<string>._ ) ).Invokes ( ( string fake ) => { messages.Add ( fake ); } );
515+
var commandLine = new CommandLine ( fakeProvider );
516+
517+
//act
518+
var result = commandLine
519+
.Application ( "TestApplication", "1.0.0" )
520+
.AddOption ( fullName: "Parameter1" )
521+
.AddOption ( fullName: "Parameter2" )
522+
.AddOption ( fullName: "Parameter3" )
523+
.RunOptions<RunOptions_Success_ListLongParameter_Class> ();
524+
525+
//assert
526+
Assert.NotNull ( result );
527+
Assert.Equal ( new List<long> { 1, 2, 3, 4 }, result.Parameter1 );
528+
Assert.Equal ( new List<long> { 8124343345345, 23742343243, 123412345345, 23423423345345, 814564624343, 2374234, 123415465642, 23423456456423 }, result.Parameter2 );
529+
Assert.Equal ( new List<long> { 100, 100, 100, 100, 100, 100 }, result.Parameter3 );
530+
}
531+
352532
}
353533

354534
}

0 commit comments

Comments
 (0)