5
5
using FineCodeCoverageTests . Test_helpers ;
6
6
using Moq ;
7
7
using NUnit . Framework ;
8
+ using StructureMap . AutoMocking ;
8
9
using System ;
9
10
using System . Collections . Generic ;
10
11
using System . IO ;
@@ -142,13 +143,21 @@ public async Task Should_Return_Using_VsBuild_When_No_Labelled_PropertyGroup(boo
142
143
143
144
public class SettingsMerger_Tests
144
145
{
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
+ }
145
155
[ Test ]
146
156
public void Should_Use_Global_Settings_If_No_Project_Level_Or_FCC_Settings_Files ( )
147
157
{
148
158
var mockAppOptions = new Mock < IAppOptions > ( MockBehavior . Strict ) ;
149
159
var appOptions = mockAppOptions . Object ;
150
160
151
- var settingsMerger = new SettingsMerger ( null ) ;
152
161
var mergedSettings = settingsMerger . Merge ( appOptions , new List < XElement > ( ) , null ) ;
153
162
154
163
Assert . AreSame ( appOptions , mergedSettings ) ;
@@ -161,7 +170,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Settings_File()
161
170
mockAppOptions . SetupSet ( o => o . IncludeReferencedProjects = true ) ;
162
171
var appOptions = mockAppOptions . Object ;
163
172
164
- var settingsMerger = new SettingsMerger ( null ) ;
165
173
var settingsFileElement = CreateIncludeReferencedProjectsElement ( true ) ;
166
174
var mergedSettings = settingsMerger . Merge ( appOptions , new List < XElement > { settingsFileElement } , null ) ;
167
175
@@ -176,7 +184,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Settings_File_In
176
184
mockAppOptions . SetupAllProperties ( ) ;
177
185
var appOptions = mockAppOptions . Object ;
178
186
179
- var settingsMerger = new SettingsMerger ( null ) ;
180
187
var settingsFileElementTop = CreateIncludeReferencedProjectsElement ( ! last ) ;
181
188
var settingsFileElementLast = CreateIncludeReferencedProjectsElement ( last ) ;
182
189
var mergedSettings = settingsMerger . Merge (
@@ -196,7 +203,6 @@ public void Should_Overwrite_GlobalOptions_Bool_Properties_From_Project(bool las
196
203
mockAppOptions . SetupAllProperties ( ) ;
197
204
var appOptions = mockAppOptions . Object ;
198
205
199
- var settingsMerger = new SettingsMerger ( null ) ;
200
206
var settingsFileElement = CreateIncludeReferencedProjectsElement ( ! last ) ;
201
207
var projectElement = CreateIncludeReferencedProjectsElement ( last ) ;
202
208
var mergedSettings = settingsMerger . Merge (
@@ -221,7 +227,6 @@ public void Should_Overwrite_Int_Properties()
221
227
</Root>
222
228
" ) ;
223
229
224
- var settingsMerger = new SettingsMerger ( null ) ;
225
230
var mergedSettings = settingsMerger . Merge (
226
231
appOptions ,
227
232
new List < XElement > { } ,
@@ -244,7 +249,6 @@ public void Should_Overwrite_Enum_Properties()
244
249
</Root>
245
250
" ) ;
246
251
247
- var settingsMerger = new SettingsMerger ( null ) ;
248
252
var mergedSettings = settingsMerger . Merge (
249
253
appOptions ,
250
254
new List < XElement > { } ,
@@ -267,7 +271,6 @@ public void Should_Overwrite_String_Properties()
267
271
</Root>
268
272
" ) ;
269
273
270
- var settingsMerger = new SettingsMerger ( null ) ;
271
274
var mergedSettings = settingsMerger . Merge (
272
275
appOptions ,
273
276
new List < XElement > { } ,
@@ -293,7 +296,6 @@ public void Should_Overwrite_String_Array_By_Default()
293
296
</Root>
294
297
" ) ;
295
298
296
- var settingsMerger = new SettingsMerger ( null ) ;
297
299
var mergedSettings = settingsMerger . Merge (
298
300
appOptions ,
299
301
new List < XElement > { } ,
@@ -319,7 +321,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_False()
319
321
</Root>
320
322
" ) ;
321
323
322
- var settingsMerger = new SettingsMerger ( null ) ;
323
324
var mergedSettings = settingsMerger . Merge (
324
325
appOptions ,
325
326
new List < XElement > { } ,
@@ -345,7 +346,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_True_Property_Merge_false
345
346
</Root>
346
347
" ) ;
347
348
348
- var settingsMerger = new SettingsMerger ( null ) ;
349
349
var mergedSettings = settingsMerger . Merge (
350
350
appOptions ,
351
351
new List < XElement > { } ,
@@ -371,7 +371,6 @@ public void Should_Overwrite_String_Array_DefaultMerge_Not_Bool()
371
371
</Root>
372
372
" ) ;
373
373
374
- var settingsMerger = new SettingsMerger ( null ) ;
375
374
var mergedSettings = settingsMerger . Merge (
376
375
appOptions ,
377
376
new List < XElement > { } ,
@@ -397,7 +396,6 @@ public void Should_Merge_String_Array_If_DefaultMerge()
397
396
</Root>
398
397
" ) ;
399
398
400
- var settingsMerger = new SettingsMerger ( null ) ;
401
399
var mergedSettings = settingsMerger . Merge (
402
400
appOptions ,
403
401
new List < XElement > { } ,
@@ -423,7 +421,6 @@ public void Should_Merge_If_Property_Element_Merge()
423
421
</Root>
424
422
" ) ;
425
423
426
- var settingsMerger = new SettingsMerger ( null ) ;
427
424
var mergedSettings = settingsMerger . Merge (
428
425
appOptions ,
429
426
new List < XElement > { } ,
@@ -433,6 +430,54 @@ public void Should_Merge_If_Property_Element_Merge()
433
430
Assert . AreEqual ( new string [ ] { "global" , "1" , "2" } , appOptions . Exclude ) ;
434
431
}
435
432
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
+
436
481
[ Test ]
437
482
public void Should_Not_Throw_If_Merge_Current_Null_String_Array_Type ( )
438
483
{
@@ -460,7 +505,7 @@ public void Should_Not_Throw_If_Merge_Current_Null_String_Array_Type()
460
505
}
461
506
462
507
[ 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 )
464
509
{
465
510
var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
466
511
var settingsElement = XElement . Parse ( $ "<Root>{ propertyElement } </Root>") ;
@@ -474,10 +519,10 @@ public void Should_Convert_Xml_Value_Correctly(string propertyElement,string pro
474
519
[ Test ]
475
520
public void Should_Throw_For_Unsupported_Conversion ( )
476
521
{
477
- var settingsMerger = new SettingsMerger ( new Mock < ILogger > ( ) . Object ) ;
478
522
var settingsElement = XElement . Parse ( $ "<Root><PropertyType/></Root>") ;
479
523
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";
481
526
Assert . Throws < Exception > ( ( ) => settingsMerger . GetValueFromXml ( settingsElement , unsupported ) , expectedMessage ) ;
482
527
}
483
528
@@ -503,31 +548,31 @@ string CreateElement(string elementName, string value)
503
548
var cases = new object [ ]
504
549
{
505
550
// 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 } ,
511
556
512
557
// 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 } ,
516
561
517
562
// string
518
- new object [ ] { CreateElement ( coverletConsoleCustomPath , "1" ) , coverletConsoleCustomPath , "1" , false } ,
563
+ new object [ ] { CreateElement ( coverletConsoleCustomPath , "1" ) , coverletConsoleCustomPath , "1" } ,
519
564
// breaking change ( previous ignored )
520
- new object [ ] { CreateElement ( coverletConsoleCustomPath , "" ) , coverletConsoleCustomPath , "" , false } ,
565
+ new object [ ] { CreateElement ( coverletConsoleCustomPath , "" ) , coverletConsoleCustomPath , "" } ,
521
566
522
567
// 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 [ ] { } } ,
525
570
526
571
// null for no property element
527
- new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null , false } ,
572
+ new object [ ] { CreateElement ( exclude , "true" ) , hideFullyCovered , null } ,
528
573
529
574
//exception for no type conversion
530
- new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No , false }
575
+ new object [ ] { CreateElement ( enumConversion , "No" ) , enumConversion , RunMsCodeCoverage . No }
531
576
532
577
} ;
533
578
0 commit comments