8
8
using System . Collections . Generic ;
9
9
using System . IO ;
10
10
using System . Linq ;
11
+ using System . Reflection ;
11
12
using System . Threading . Tasks ;
12
13
using System . Xml . Linq ;
13
14
@@ -229,6 +230,29 @@ public void Should_Overwrite_Int_Properties()
229
230
Assert . AreEqual ( 123 , appOptions . ThresholdForCyclomaticComplexity ) ;
230
231
}
231
232
233
+ [ Test ]
234
+ public void Should_Overwrite_Enum_Properties ( )
235
+ {
236
+ var mockAppOptions = new Mock < IAppOptions > ( ) ;
237
+ mockAppOptions . SetupAllProperties ( ) ;
238
+ var appOptions = mockAppOptions . Object ;
239
+
240
+ var enumElement = XElement . Parse ( $@ "
241
+ <Root>
242
+ <RunMsCodeCoverage>IfInRunSettings</RunMsCodeCoverage>
243
+ </Root>
244
+ " ) ;
245
+
246
+ var settingsMerger = new SettingsMerger ( null ) ;
247
+ var mergedSettings = settingsMerger . Merge (
248
+ appOptions ,
249
+ new List < XElement > { } ,
250
+ enumElement ) ;
251
+
252
+ Assert . AreSame ( appOptions , mergedSettings ) ;
253
+ Assert . AreEqual ( RunMsCodeCoverage . IfInRunSettings , appOptions . RunMsCodeCoverage ) ;
254
+ }
255
+
232
256
[ Test ]
233
257
public void Should_Overwrite_String_Properties ( )
234
258
{
@@ -440,18 +464,20 @@ public void Should_Convert_Xml_Value_Correctly(string propertyElement,string pro
440
464
var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
441
465
var settingsElement = XElement . Parse ( $ "<Root>{ propertyElement } </Root>") ;
442
466
var property = typeof ( IAppOptions ) . GetPublicProperties ( ) . First ( p => p . Name == propertyName ) ;
443
- if ( expectedException )
444
- {
445
- Assert . Throws < Exception > ( ( ) =>
446
- {
447
- settingsMerger . GetValueFromXml ( settingsElement , property ) ;
448
- } ) ;
449
- }
450
- else
451
- {
452
- var value = settingsMerger . GetValueFromXml ( settingsElement , property ) ;
453
- Assert . AreEqual ( expectedConversion , value ) ;
454
- }
467
+
468
+ var value = settingsMerger . GetValueFromXml ( settingsElement , property ) ;
469
+ Assert . AreEqual ( expectedConversion , value ) ;
470
+
471
+ }
472
+
473
+ [ Test ]
474
+ public void Should_Throw_For_Unsupported_Conversion ( )
475
+ {
476
+ var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
477
+ var settingsElement = XElement . Parse ( $ "<Root><PropertyType/></Root>") ;
478
+ var unsupported = typeof ( PropertyInfo ) . GetProperty ( nameof ( PropertyInfo . PropertyType ) ) ;
479
+ var expectedMessage = $ "Cannot handle 'PropertyType' yet";
480
+ Assert . Throws < Exception > ( ( ) => settingsMerger . GetValueFromXml ( settingsElement , unsupported ) , expectedMessage ) ;
455
481
}
456
482
457
483
static object [ ] XmlConversionCases ( )
@@ -464,7 +490,7 @@ string CreateElement(string elementName, string value)
464
490
var thresholdForCrapScore = nameof ( IAppOptions . ThresholdForCrapScore ) ; // int
465
491
var coverletConsoleCustomPath = nameof ( IAppOptions . CoverletConsoleCustomPath ) ; // string
466
492
var exclude = nameof ( IAppOptions . Exclude ) ; // string[]
467
- var noConversion = nameof ( IAppOptions . RunMsCodeCoverage ) ; // no conversion
493
+ var enumConversion = nameof ( IAppOptions . RunMsCodeCoverage ) ; // enum conversion
468
494
var boolArray = @"
469
495
true
470
496
false
@@ -500,7 +526,7 @@ string CreateElement(string elementName, string value)
500
526
new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null , false } ,
501
527
502
528
//exception for no type conversion
503
- new object [ ] { CreateElement ( noConversion , "No" ) , noConversion , null , true }
529
+ new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No , false }
504
530
505
531
} ;
506
532
0 commit comments