55using FineCodeCoverageTests . Test_helpers ;
66using Moq ;
77using NUnit . Framework ;
8+ using StructureMap . AutoMocking ;
89using System ;
910using System . Collections . Generic ;
1011using System . IO ;
@@ -142,13 +143,21 @@ public async Task Should_Return_Using_VsBuild_When_No_Labelled_PropertyGroup(boo
142143
143144 public class SettingsMerger_Tests
144145 {
146+ private AutoMoqer mocker ;
147+ private SettingsMerger settingsMerger ;
148+
149+ [ SetUp ]
150+ public void SetUp ( )
151+ {
152+ mocker = new AutoMoqer ( ) ;
153+ settingsMerger = mocker . Create < SettingsMerger > ( ) ;
154+ }
145155 [ Test ]
146156 public void Should_Use_Global_Settings_If_No_Project_Level_Or_FCC_Settings_Files ( )
147157 {
148158 var mockAppOptions = new Mock < IAppOptions > ( MockBehavior . Strict ) ;
149159 var appOptions = mockAppOptions . Object ;
150160
151- var settingsMerger = new SettingsMerger ( null ) ;
152161 var mergedSettings = settingsMerger . Merge ( appOptions , new List < XElement > ( ) , null ) ;
153162
154163 Assert . AreSame ( appOptions , mergedSettings ) ;
@@ -161,7 +170,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Settings_File()
161170 mockAppOptions . SetupSet ( o => o . IncludeReferencedProjects = true ) ;
162171 var appOptions = mockAppOptions . Object ;
163172
164- var settingsMerger = new SettingsMerger ( null ) ;
165173 var settingsFileElement = CreateIncludeReferencedProjectsElement ( true ) ;
166174 var mergedSettings = settingsMerger . Merge ( appOptions , new List < XElement > { settingsFileElement } , null ) ;
167175
@@ -176,7 +184,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Settings_File_In
176184 mockAppOptions . SetupAllProperties ( ) ;
177185 var appOptions = mockAppOptions . Object ;
178186
179- var settingsMerger = new SettingsMerger ( null ) ;
180187 var settingsFileElementTop = CreateIncludeReferencedProjectsElement ( ! last ) ;
181188 var settingsFileElementLast = CreateIncludeReferencedProjectsElement ( last ) ;
182189 var mergedSettings = settingsMerger . Merge (
@@ -196,7 +203,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Project(bool las
196203 mockAppOptions . SetupAllProperties ( ) ;
197204 var appOptions = mockAppOptions . Object ;
198205
199- var settingsMerger = new SettingsMerger ( null ) ;
200206 var settingsFileElement = CreateIncludeReferencedProjectsElement ( ! last ) ;
201207 var projectElement = CreateIncludeReferencedProjectsElement ( last ) ;
202208 var mergedSettings = settingsMerger . Merge (
@@ -221,7 +227,6 @@ public void Should_Overwrite_Int_Properties()
221227</Root>
222228" ) ;
223229
224- var settingsMerger = new SettingsMerger ( null ) ;
225230 var mergedSettings = settingsMerger . Merge (
226231 appOptions ,
227232 new List < XElement > { } ,
@@ -244,7 +249,6 @@ public void Should_Overwrite_Enum_Properties()
244249</Root>
245250" ) ;
246251
247- var settingsMerger = new SettingsMerger ( null ) ;
248252 var mergedSettings = settingsMerger . Merge (
249253 appOptions ,
250254 new List < XElement > { } ,
@@ -267,7 +271,6 @@ public void Should_Overwrite_String_Properties()
267271</Root>
268272" ) ;
269273
270- var settingsMerger = new SettingsMerger ( null ) ;
271274 var mergedSettings = settingsMerger . Merge (
272275 appOptions ,
273276 new List < XElement > { } ,
@@ -293,7 +296,6 @@ public void Should_Overwrite_String_Array_By_Default()
293296</Root>
294297" ) ;
295298
296- var settingsMerger = new SettingsMerger ( null ) ;
297299 var mergedSettings = settingsMerger . Merge (
298300 appOptions ,
299301 new List < XElement > { } ,
@@ -319,7 +321,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_False()
319321</Root>
320322" ) ;
321323
322- var settingsMerger = new SettingsMerger ( null ) ;
323324 var mergedSettings = settingsMerger . Merge (
324325 appOptions ,
325326 new List < XElement > { } ,
@@ -345,7 +346,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_True_Property_Merge_false
345346</Root>
346347" ) ;
347348
348- var settingsMerger = new SettingsMerger ( null ) ;
349349 var mergedSettings = settingsMerger . Merge (
350350 appOptions ,
351351 new List < XElement > { } ,
@@ -371,7 +371,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_Not_Bool()
371371</Root>
372372" ) ;
373373
374- var settingsMerger = new SettingsMerger ( null ) ;
375374 var mergedSettings = settingsMerger . Merge (
376375 appOptions ,
377376 new List < XElement > { } ,
@@ -397,7 +396,6 @@ public void Should_Merge_String_Array_If_DefaultMerge()
397396</Root>
398397" ) ;
399398
400- var settingsMerger = new SettingsMerger ( null ) ;
401399 var mergedSettings = settingsMerger . Merge (
402400 appOptions ,
403401 new List < XElement > { } ,
@@ -423,7 +421,6 @@ public void Should_Merge_If_Property_Element_Merge()
423421</Root>
424422" ) ;
425423
426- var settingsMerger = new SettingsMerger ( null ) ;
427424 var mergedSettings = settingsMerger . Merge (
428425 appOptions ,
429426 new List < XElement > { } ,
@@ -433,6 +430,54 @@ public void Should_Merge_If_Property_Element_Merge()
433430 Assert . AreEqual ( new string [ ] { "global" , "1" , "2" } , appOptions . Exclude ) ;
434431 }
435432
433+ [ Test ]
434+ public void Should_Log_Failed_To_Get_Setting_From_Project_Settings_Exception_And_Not_Throw ( )
435+ {
436+ var mockAppOptions = new Mock < IAppOptions > ( ) ;
437+ mockAppOptions . SetupAllProperties ( ) ;
438+ var appOptions = mockAppOptions . Object ;
439+ var element = XElement . Parse ( $@ "
440+ <Root>
441+ <OpenCoverRegister>
442+ DefaultX
443+ </OpenCoverRegister>
444+ </Root>
445+ " ) ;
446+
447+ var mergedSettings = settingsMerger . Merge (
448+ appOptions ,
449+ new List < XElement > { } ,
450+ element ) ;
451+
452+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
453+ mockLogger . Verify ( logger => logger . Log ( "Failed to get 'OpenCoverRegister' setting from project settings" , It . IsAny < Exception > ( ) ) ) ;
454+ Assert . AreEqual ( mergedSettings . OpenCoverRegister , OpenCoverRegister . Default ) ;
455+ }
456+
457+ [ Test ]
458+ public void Should_Log_Failed_To_Get_Setting_From_Settings_File_Exception_And_Not_Throw ( )
459+ {
460+ var mockAppOptions = new Mock < IAppOptions > ( ) ;
461+ mockAppOptions . SetupAllProperties ( ) ;
462+ var appOptions = mockAppOptions . Object ;
463+ var element = XElement . Parse ( $@ "
464+ <Root>
465+ <OpenCoverRegister>
466+ DefaultX
467+ </OpenCoverRegister>
468+ </Root>
469+ " ) ;
470+
471+ var mergedSettings = settingsMerger . Merge (
472+ appOptions ,
473+ new List < XElement > { element } ,
474+ null ) ;
475+
476+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
477+ mockLogger . Verify ( logger => logger . Log ( "Failed to get 'OpenCoverRegister' setting from settings file" , It . IsAny < Exception > ( ) ) ) ;
478+ Assert . AreEqual ( mergedSettings . OpenCoverRegister , OpenCoverRegister . Default ) ;
479+ }
480+
436481 [ Test ]
437482 public void Should_Not_Throw_If_Merge_Current_Null_String_Array_Type ( )
438483 {
@@ -460,7 +505,7 @@ public void Should_Not_Throw_If_Merge_Current_Null_String_Array_Type()
460505 }
461506
462507 [ TestCaseSource ( nameof ( XmlConversionCases ) ) ]
463- public void Should_Convert_Xml_Value_Correctly ( string propertyElement , string propertyName , object expectedConversion , bool expectedException )
508+ public void Should_Convert_Xml_Value_Correctly ( string propertyElement , string propertyName , object expectedConversion )
464509 {
465510 var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
466511 var settingsElement = XElement . Parse ( $ "<Root>{ propertyElement } </Root>") ;
@@ -474,10 +519,10 @@ public void Should_Convert_Xml_Value_Correctly(string propertyElement,string pro
474519 [ Test ]
475520 public void Should_Throw_For_Unsupported_Conversion ( )
476521 {
477- var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
478522 var settingsElement = XElement . Parse ( $ "<Root><PropertyType/></Root>") ;
479523 var unsupported = typeof ( PropertyInfo ) . GetProperty ( nameof ( PropertyInfo . PropertyType ) ) ;
480- var expectedMessage = $ "Cannot handle 'PropertyType' yet";
524+
525+ var expectedMessage = $ "Unexpected settings type Type for setting PropertyType in settings merger GetValueFromXml";
481526 Assert . Throws < Exception > ( ( ) => settingsMerger . GetValueFromXml ( settingsElement , unsupported ) , expectedMessage ) ;
482527 }
483528
@@ -503,31 +548,31 @@ string CreateElement(string elementName, string value)
503548 var cases = new object [ ]
504549 {
505550 // boolean
506- new object [ ] { CreateElement ( hideFullyCovered , "true" ) , hideFullyCovered , true , false } ,
507- new object [ ] { CreateElement ( hideFullyCovered , "false" ) , hideFullyCovered , false , false } ,
508- new object [ ] { CreateElement ( hideFullyCovered , "bad" ) , hideFullyCovered , null , false } ,
509- new object [ ] { CreateElement ( hideFullyCovered , "" ) , hideFullyCovered , null , false } ,
510- new object [ ] { CreateElement ( hideFullyCovered , boolArray ) , hideFullyCovered , true , false } ,
551+ new object [ ] { CreateElement ( hideFullyCovered , "true" ) , hideFullyCovered , true } ,
552+ new object [ ] { CreateElement ( hideFullyCovered , "false" ) , hideFullyCovered , false } ,
553+ new object [ ] { CreateElement ( hideFullyCovered , "bad" ) , hideFullyCovered , null } ,
554+ new object [ ] { CreateElement ( hideFullyCovered , "" ) , hideFullyCovered , null } ,
555+ new object [ ] { CreateElement ( hideFullyCovered , boolArray ) , hideFullyCovered , true } ,
511556
512557 // int
513- new object [ ] { CreateElement ( thresholdForCrapScore , "1" ) , thresholdForCrapScore , 1 , false } ,
514- new object [ ] { CreateElement ( thresholdForCrapScore , "bad" ) , thresholdForCrapScore , null , false } ,
515- new object [ ] { CreateElement ( thresholdForCrapScore , "" ) , thresholdForCrapScore , null , false } ,
558+ new object [ ] { CreateElement ( thresholdForCrapScore , "1" ) , thresholdForCrapScore , 1 } ,
559+ new object [ ] { CreateElement ( thresholdForCrapScore , "bad" ) , thresholdForCrapScore , null } ,
560+ new object [ ] { CreateElement ( thresholdForCrapScore , "" ) , thresholdForCrapScore , null } ,
516561
517562 // string
518- new object [ ] { CreateElement ( coverletConsoleCustomPath , "1" ) , coverletConsoleCustomPath , "1" , false } ,
563+ new object [ ] { CreateElement ( coverletConsoleCustomPath , "1" ) , coverletConsoleCustomPath , "1" } ,
519564 // breaking change ( previous ignored )
520- new object [ ] { CreateElement ( coverletConsoleCustomPath , "" ) , coverletConsoleCustomPath , "" , false } ,
565+ new object [ ] { CreateElement ( coverletConsoleCustomPath , "" ) , coverletConsoleCustomPath , "" } ,
521566
522567 // string[]
523- new object [ ] { CreateElement ( exclude , stringArray ) , exclude , new string [ ] { "1" , "2" } , false } ,
524- new object [ ] { CreateElement ( exclude , "" ) , exclude , new string [ ] { } , false } ,
568+ new object [ ] { CreateElement ( exclude , stringArray ) , exclude , new string [ ] { "1" , "2" } } ,
569+ new object [ ] { CreateElement ( exclude , "" ) , exclude , new string [ ] { } } ,
525570
526571 // null for no property element
527- new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null , false } ,
572+ new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null } ,
528573
529574 //exception for no type conversion
530- new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No , false }
575+ new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No }
531576
532577 } ;
533578
0 commit comments