88using System . Collections . Generic ;
99using System . IO ;
1010using System . Linq ;
11+ using System . Reflection ;
1112using System . Threading . Tasks ;
1213using System . Xml . Linq ;
1314
@@ -229,6 +230,29 @@ public void Should_Overwrite_Int_Properties()
229230 Assert . AreEqual ( 123 , appOptions . ThresholdForCyclomaticComplexity ) ;
230231 }
231232
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+
232256 [ Test ]
233257 public void Should_Overwrite_String_Properties ( )
234258 {
@@ -440,18 +464,20 @@ public void Should_Convert_Xml_Value_Correctly(string propertyElement,string pro
440464 var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
441465 var settingsElement = XElement . Parse ( $ "<Root>{ propertyElement } </Root>") ;
442466 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 ) ;
455481 }
456482
457483 static object [ ] XmlConversionCases ( )
@@ -464,7 +490,7 @@ string CreateElement(string elementName, string value)
464490 var thresholdForCrapScore = nameof ( IAppOptions . ThresholdForCrapScore ) ; // int
465491 var coverletConsoleCustomPath = nameof ( IAppOptions . CoverletConsoleCustomPath ) ; // string
466492 var exclude = nameof ( IAppOptions . Exclude ) ; // string[]
467- var noConversion = nameof ( IAppOptions . RunMsCodeCoverage ) ; // no conversion
493+ var enumConversion = nameof ( IAppOptions . RunMsCodeCoverage ) ; // enum conversion
468494 var boolArray = @"
469495 true
470496 false
@@ -500,7 +526,7 @@ string CreateElement(string elementName, string value)
500526 new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null , false } ,
501527
502528 //exception for no type conversion
503- new object [ ] { CreateElement ( noConversion , "No" ) , noConversion , null , true }
529+ new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No , false }
504530
505531 } ;
506532
0 commit comments