@@ -35,6 +35,19 @@ public void TreatAllWarningsAsErrors()
35
35
ObjectModelHelpers . BuildProjectExpectSuccess ( GetTestProject ( treatAllWarningsAsErrors : false ) ) ;
36
36
}
37
37
38
+ [ Fact ]
39
+ public void TreatAllWarningsAsErrorsNoPrefix ( )
40
+ {
41
+ MockLogger logger = ObjectModelHelpers . BuildProjectExpectFailure ( GetTestProject ( customProperties : new Dictionary < string , string >
42
+ {
43
+ { "TreatWarningsAsErrors" , "true" } ,
44
+ } ) ) ;
45
+
46
+ VerifyBuildErrorEvent ( logger ) ;
47
+
48
+ ObjectModelHelpers . BuildProjectExpectSuccess ( GetTestProject ( treatAllWarningsAsErrors : false ) ) ;
49
+ }
50
+
38
51
/// <summary>
39
52
/// https://github.com/dotnet/msbuild/issues/2667
40
53
/// </summary>
@@ -91,22 +104,6 @@ public void TreatWarningsAsErrorsWhenSpecifiedIndirectly()
91
104
VerifyBuildErrorEvent ( logger ) ;
92
105
}
93
106
94
- [ Fact ]
95
- public void TreatWarningsAsErrorsWhenSpecifiedThroughAdditiveProperty ( )
96
- {
97
- MockLogger logger = ObjectModelHelpers . BuildProjectExpectFailure (
98
- GetTestProject (
99
- customProperties : new List < KeyValuePair < string , string > >
100
- {
101
- new KeyValuePair < string , string > ( "MSBuildWarningsAsErrors" , "123" ) ,
102
- new KeyValuePair < string , string > ( "MSBuildWarningsAsErrors" , $@ "$(MSBuildWarningsAsErrors);
103
- { ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
104
- new KeyValuePair < string , string > ( "MSBuildWarningsAsErrors" , "$(MSBuildWarningsAsErrors);ABC" )
105
- } ) ) ;
106
-
107
- VerifyBuildErrorEvent ( logger ) ;
108
- }
109
-
110
107
[ Fact ]
111
108
public void NotTreatWarningsAsErrorsWhenCodeNotSpecified ( )
112
109
{
@@ -177,22 +174,99 @@ public void TreatWarningsAsMessagesWhenSpecifiedIndirectly()
177
174
VerifyBuildMessageEvent ( logger ) ;
178
175
}
179
176
177
+ [ Theory ]
178
+ [ InlineData ( true ) ]
179
+ [ InlineData ( false ) ]
180
+ public void TreatWarningsAsMessagesWhenSpecifiedThroughAdditiveProperty ( bool usePrefix )
181
+ {
182
+ string prefix = usePrefix ? "MSBuild" : "" ;
183
+ MockLogger logger = ObjectModelHelpers . BuildProjectExpectSuccess (
184
+ GetTestProject (
185
+ customProperties : new List < KeyValuePair < string , string > >
186
+ {
187
+ new KeyValuePair < string , string > ( $ "{ prefix } WarningsAsMessages", "123" ) ,
188
+ new KeyValuePair < string , string > ( $ "{ prefix } WarningsAsMessages", $@ "$({ prefix } WarningsAsMessages);
189
+ { ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
190
+ new KeyValuePair < string , string > ( $ "{ prefix } WarningsAsMessages", $ "$({ prefix } WarningsAsMessages);ABC")
191
+ } ) ) ;
192
+
193
+ VerifyBuildMessageEvent ( logger ) ;
194
+ }
195
+
180
196
[ Fact ]
181
- public void TreatWarningsAsMessagesWhenSpecifiedThroughAdditiveProperty ( )
197
+ ///
198
+ /// This is for chaining the properties together via addition.
199
+ /// Furthermore it is intended to check if the prefix and no prefix variant interacts properly with each other.
200
+ ///
201
+ public void TreatWarningsAsMessagesWhenSpecifiedThroughAdditivePropertyCombination ( )
182
202
{
183
203
MockLogger logger = ObjectModelHelpers . BuildProjectExpectSuccess (
184
204
GetTestProject (
185
205
customProperties : new List < KeyValuePair < string , string > >
186
206
{
187
207
new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages" , "123" ) ,
188
- new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages " , $@ "$(MSBuildWarningsAsMessages);
208
+ new KeyValuePair < string , string > ( "WarningsAsMessages " , $@ "$(MSBuildWarningsAsMessages);
189
209
{ ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
190
- new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages" , "$(MSBuildWarningsAsMessages );ABC" )
210
+ new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages" , "$(WarningsAsMessages );ABC" )
191
211
} ) ) ;
192
212
193
213
VerifyBuildMessageEvent ( logger ) ;
194
214
}
195
215
216
+ [ Fact ]
217
+ public void TreatWarningsNotAsErrorsWhenSpecifiedThroughAdditivePropertyCombination ( )
218
+ {
219
+ MockLogger logger = ObjectModelHelpers . BuildProjectExpectSuccess (
220
+ GetTestProject (
221
+ customProperties : new List < KeyValuePair < string , string > >
222
+ {
223
+ new KeyValuePair < string , string > ( "MSBuildWarningsNotAsErrors" , "123" ) ,
224
+ new KeyValuePair < string , string > ( "WarningsNotAsErrors" , $@ "$(MSBuildWarningsNotAsErrors);
225
+ { ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
226
+ new KeyValuePair < string , string > ( "MSBuildWarningsNotAsErrors" , "$(WarningsNotAsErrors);ABC" )
227
+ } ) ,
228
+ _output ) ;
229
+
230
+ VerifyBuildWarningEvent ( logger ) ;
231
+ }
232
+
233
+ [ Theory ]
234
+ [ InlineData ( true ) ]
235
+ [ InlineData ( false ) ]
236
+ public void TreatWarningsAsErrorsWhenSpecifiedThroughAdditiveProperty ( bool MSBuildPrefix )
237
+ {
238
+ string prefix = MSBuildPrefix ? "MSBuild" : "" ;
239
+ MockLogger logger = ObjectModelHelpers . BuildProjectExpectFailure (
240
+ GetTestProject (
241
+ customProperties : new List < KeyValuePair < string , string > >
242
+ {
243
+ new KeyValuePair < string , string > ( $@ "{ prefix } WarningsAsErrors", "123" ) ,
244
+ new KeyValuePair < string , string > ( $@ "{ prefix } WarningsAsErrors", $@ "$({ prefix } WarningsAsErrors);
245
+ { ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
246
+ new KeyValuePair < string , string > ( $@ "{ prefix } WarningsAsErrors", $@ "$({ prefix } WarningsAsErrors);ABC")
247
+ } ) ,
248
+ _output ) ;
249
+
250
+ VerifyBuildErrorEvent ( logger ) ;
251
+ }
252
+
253
+ [ Fact ]
254
+ public void TreatWarningsAsErrorsWhenSpecifiedThroughAdditivePropertyCombination ( )
255
+ {
256
+ MockLogger logger = ObjectModelHelpers . BuildProjectExpectFailure (
257
+ GetTestProject (
258
+ customProperties : new List < KeyValuePair < string , string > >
259
+ {
260
+ new KeyValuePair < string , string > ( "WarningsAsErrors" , "123" ) ,
261
+ new KeyValuePair < string , string > ( "MSBuildWarningsAsErrors" , $@ "$(WarningsAsErrors);
262
+ { ExpectedEventCode . ToLowerInvariant ( ) } " ) ,
263
+ new KeyValuePair < string , string > ( "WarningsAsErrors" , "$(MSBuildWarningsAsErrors);ABC" )
264
+ } ) ,
265
+ _output ) ;
266
+
267
+ VerifyBuildErrorEvent ( logger ) ;
268
+ }
269
+
196
270
[ Fact ]
197
271
public void NotTreatWarningsAsMessagesWhenCodeNotSpecified ( )
198
272
{
@@ -202,7 +276,8 @@ public void NotTreatWarningsAsMessagesWhenCodeNotSpecified()
202
276
{
203
277
new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages" , "123" ) ,
204
278
new KeyValuePair < string , string > ( "MSBuildWarningsAsMessages" , "$(MSBuildWarningsAsMessages);ABC" )
205
- } ) ) ;
279
+ } ) ,
280
+ _output ) ;
206
281
207
282
VerifyBuildWarningEvent ( logger ) ;
208
283
}
@@ -273,27 +348,33 @@ private string GetTestProject(bool? treatAllWarningsAsErrors = null, string warn
273
348
</Project>" ;
274
349
}
275
350
351
+
276
352
[ Theory ]
277
353
278
354
[ InlineData ( "MSB1235" , "MSB1234" , "MSB1234" , "MSB1234" , false ) ] // Log MSB1234, treat as error via MSBuildWarningsAsErrors
279
355
[ InlineData ( "MSB1235" , "" , "MSB1234" , "MSB1234" , true ) ] // Log MSB1234, expect MSB1234 as error via MSBuildTreatWarningsAsErrors
280
356
[ InlineData ( "MSB1234" , "MSB1234" , "MSB1234" , "MSB4181" , true ) ] // Log MSB1234, MSBuildWarningsAsMessages takes priority
357
+ [ InlineData ( "MSB1235" , "MSB1234" , "MSB1234" , "MSB1234" , false , false ) ] // Log MSB1234, treat as error via BuildWarningsAsErrors
358
+ [ InlineData ( "MSB1235" , "" , "MSB1234" , "MSB1234" , true , false ) ] // Log MSB1234, expect MSB1234 as error via BuildTreatWarningsAsErrors
359
+ [ InlineData ( "MSB1234" , "MSB1234" , "MSB1234" , "MSB4181" , true , false ) ] // Log MSB1234, BuildWarningsAsMessages takes priority
281
360
public void WarningsAsErrorsAndMessages_Tests ( string WarningsAsMessages ,
282
361
string WarningsAsErrors ,
283
362
string WarningToLog ,
284
363
string LogShouldContain ,
285
- bool allWarningsAreErrors = false )
364
+ bool allWarningsAreErrors = false ,
365
+ bool useMSPrefix = true )
286
366
{
287
367
using ( TestEnvironment env = TestEnvironment . Create ( _output ) )
288
368
{
369
+ var prefix = useMSPrefix ? "MSBuild" : "" ;
289
370
TransientTestProjectWithFiles proj = env . CreateTestProjectWithFiles ( $@ "
290
371
<Project>
291
372
<UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/>
292
373
<UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/>
293
374
<PropertyGroup>
294
- <MSBuildTreatWarningsAsErrors >{ allWarningsAreErrors } </MSBuildTreatWarningsAsErrors >
295
- <MSBuildWarningsAsMessages >{ WarningsAsMessages } </MSBuildWarningsAsMessages >
296
- <MSBuildWarningsAsErrors >{ WarningsAsErrors } </MSBuildWarningsAsErrors >
375
+ <{ prefix } TreatWarningsAsErrors >{ allWarningsAreErrors } </{ prefix } TreatWarningsAsErrors >
376
+ <{ prefix } WarningsAsMessages >{ WarningsAsMessages } </{ prefix } WarningsAsMessages >
377
+ <{ prefix } WarningsAsErrors >{ WarningsAsErrors } </{ prefix } WarningsAsErrors >
297
378
</PropertyGroup>
298
379
<Target Name='Build'>
299
380
<CustomLogAndReturnTask Return=""true"" ReturnHasLoggedErrors=""true"" WarningCode=""{ WarningToLog } ""/>
@@ -310,6 +391,83 @@ public void WarningsAsErrorsAndMessages_Tests(string WarningsAsMessages,
310
391
}
311
392
}
312
393
394
+ [ Theory ]
395
+
396
+ [ InlineData ( true ) ] // Log MSB1234, BuildWarningsNotAsErrors takes priority
397
+ [ InlineData ( false ) ]
398
+ public void WarningsNotAsErrorsAndMessages_Tests ( bool useMSPrefix )
399
+ {
400
+ string Warning = "MSB1235" ;
401
+ using ( TestEnvironment env = TestEnvironment . Create ( _output ) )
402
+ {
403
+ string prefix = useMSPrefix ? "MSBuild" : "" ;
404
+ TransientTestProjectWithFiles proj = env . CreateTestProjectWithFiles ( $@ "
405
+ <Project>
406
+ <PropertyGroup>
407
+ <{ prefix } TreatWarningsAsErrors>true</{ prefix } TreatWarningsAsErrors>
408
+ <{ prefix } WarningsNotAsErrors>{ Warning } </{ prefix } WarningsNotAsErrors>
409
+ </PropertyGroup>
410
+ <Target Name='Build'>
411
+ <Warning Text=""some random text"" Code='{ Warning } ' />
412
+ </Target>
413
+ </Project>" ) ;
414
+
415
+ MockLogger logger = proj . BuildProjectExpectSuccess ( ) ;
416
+
417
+ logger . WarningCount . ShouldBe ( 1 ) ;
418
+ logger . ErrorCount . ShouldBe ( 0 ) ;
419
+
420
+ logger . AssertLogContains ( Warning ) ;
421
+ }
422
+ }
423
+
424
+
425
+
426
+ [ Theory ]
427
+ [ InlineData ( "TreatWarningsAsErrors" , "true" , false ) ] // All warnings are treated as errors
428
+ [ InlineData ( "WarningsAsErrors" , "MSB1007" , false ) ]
429
+ [ InlineData ( "WarningsAsMessages" , "MSB1007" , false ) ]
430
+ [ InlineData ( "WarningsNotAsErrors" , "MSB1007" , true ) ]
431
+ [ InlineData ( "WarningsNotAsErrors" , "MSB1007" , false ) ]
432
+ public void WarningsChangeWaveTest ( string property , string propertyData , bool treatWarningsAsErrors )
433
+ {
434
+ using ( TestEnvironment env = TestEnvironment . Create ( _output ) )
435
+ {
436
+ string warningCode = "MSB1007" ;
437
+ string treatWarningsAsErrorsCodeProperty = treatWarningsAsErrors ? "<MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors>" : "" ;
438
+ env . SetEnvironmentVariable ( "MSBUILDDISABLEFEATURESFROMVERSION" , ChangeWaves . Wave17_14 . ToString ( ) ) ;
439
+ TransientTestProjectWithFiles proj = env . CreateTestProjectWithFiles ( $@ "
440
+ <Project>
441
+ <PropertyGroup>
442
+ { treatWarningsAsErrorsCodeProperty }
443
+ <{ property } >{ propertyData } </{ property } >
444
+ </PropertyGroup>
445
+ <Target Name='Build'>
446
+ <Warning Text=""some random text"" Code='{ warningCode } ' />
447
+ </Target>
448
+ </Project>" ) ;
449
+ if ( treatWarningsAsErrors )
450
+ {
451
+ // Since the "no prefix" variations can't do anything with the change wave disabled, this should always fail.
452
+ MockLogger logger = proj . BuildProjectExpectFailure ( ) ;
453
+ logger . ErrorCount . ShouldBe ( 1 ) ;
454
+ logger . AssertLogContains ( $ "error { warningCode } ") ;
455
+
456
+ logger . AssertLogContains ( warningCode ) ;
457
+ }
458
+ else
459
+ {
460
+ MockLogger logger = proj . BuildProjectExpectSuccess ( ) ;
461
+
462
+ logger . WarningCount . ShouldBe ( 1 ) ;
463
+ logger . AssertLogContains ( $ "warning { warningCode } ") ;
464
+ logger . ErrorCount . ShouldBe ( 0 ) ;
465
+
466
+ logger . AssertLogContains ( warningCode ) ;
467
+ }
468
+ }
469
+ }
470
+
313
471
/// <summary>
314
472
/// Item1 and Item2 log warnings and continue, item 3 logs a warn-> error and prevents item 4 from running in the batched build.
315
473
/// </summary>
@@ -371,17 +529,20 @@ public void TaskLogsWarningAsError_BatchedBuild()
371
529
[ Theory ]
372
530
[ InlineData ( "MSB1234" , false , 1 , 1 ) ]
373
531
[ InlineData ( "MSB0000" , true , 0 , 2 ) ]
374
- public void TaskReturnsTrue_Tests ( string warningsAsErrors , bool treatAllWarningsAsErrors , int warningCountShouldBe , int errorCountShouldBe )
532
+ [ InlineData ( "MSB1234" , false , 1 , 1 , false ) ]
533
+ [ InlineData ( "MSB0000" , true , 0 , 2 , false ) ]
534
+ public void TaskReturnsTrue_Tests ( string warningsAsErrors , bool treatAllWarningsAsErrors , int warningCountShouldBe , int errorCountShouldBe , bool useMSPrefix = true )
375
535
{
536
+ string prefix = useMSPrefix ? "MSBuild" : "" ;
376
537
using ( TestEnvironment env = TestEnvironment . Create ( _output ) )
377
538
{
378
539
TransientTestProjectWithFiles proj = env . CreateTestProjectWithFiles ( $@ "
379
540
<Project>
380
541
<UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/>
381
542
<UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/>
382
543
<PropertyGroup>
383
- <MSBuildTreatWarningsAsErrors >{ treatAllWarningsAsErrors } </MSBuildTreatWarningsAsErrors >
384
- <MSBuildWarningsAsErrors >{ warningsAsErrors } </MSBuildWarningsAsErrors >
544
+ <{ prefix } TreatWarningsAsErrors >{ treatAllWarningsAsErrors } </{ prefix } TreatWarningsAsErrors >
545
+ <{ prefix } WarningsAsErrors >{ warningsAsErrors } </{ prefix } WarningsAsErrors >
385
546
</PropertyGroup>
386
547
<Target Name='Build'>
387
548
<CustomLogAndReturnTask Return=""true"" WarningCode=""MSB1234""/>
0 commit comments