public void TaskReturnsTrue_Tests(string warningsAsErrors, bool treatAllWarningsAsErrors, int warningCountShouldBe, int errorCountShouldBe) { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <PropertyGroup> <MSBuildTreatWarningsAsErrors>{treatAllWarningsAsErrors}</MSBuildTreatWarningsAsErrors> <MSBuildWarningsAsErrors>{warningsAsErrors}</MSBuildWarningsAsErrors> </PropertyGroup> <Target Name='Build'> <CustomLogAndReturnTask Return=""true"" WarningCode=""MSB1234""/> <CustomLogAndReturnTask Return=""true"" WarningCode=""MSB1235""/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.WarningCount.ShouldBe(warningCountShouldBe); logger.ErrorCount.ShouldBe(errorCountShouldBe); // The build will continue so we should see the warning MSB1235 logger.AssertLogContains("MSB1235"); } }
public void TreatWarningsAsErrorsWhenBuildingSameProjectMultipleTimes() { using (TestEnvironment testEnvironment = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles project2 = testEnvironment.CreateTestProjectWithFiles($@" <Project xmlns=""msbuildnamespace""> <PropertyGroup> <MSBuildWarningsAsErrors>{ExpectedEventCode}</MSBuildWarningsAsErrors> </PropertyGroup> <Target Name=""Build""> <MSBuild Projects=""$(MSBuildThisFileFullPath)"" Targets=""AnotherTarget"" /> </Target> <Target Name=""AnotherTarget""> <Warning Text=""{ExpectedEventMessage}"" Code=""{ExpectedEventCode}"" /> </Target> </Project>"); TransientTestProjectWithFiles project1 = testEnvironment.CreateTestProjectWithFiles($@" <Project xmlns=""msbuildnamespace""> <Target Name=""Build""> <MSBuild Projects=""{project2.ProjectFile}"" Targets=""Build"" /> </Target> </Project>"); MockLogger logger = project1.BuildProjectExpectFailure(); VerifyBuildErrorEvent(logger); } }
[InlineData("MSB1234", "MSB1234", "MSB1234", "MSB4181", true)]// Log MSB1234, MSBuildWarningsAsMessages takes priority public void WarningsAsErrorsAndMessages_Tests(string WarningsAsMessages, string WarningsAsErrors, string WarningToLog, string LogShouldContain, bool allWarningsAreErrors = false) { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <PropertyGroup> <MSBuildTreatWarningsAsErrors>{allWarningsAreErrors}</MSBuildTreatWarningsAsErrors> <MSBuildWarningsAsMessages>{WarningsAsMessages}</MSBuildWarningsAsMessages> <MSBuildWarningsAsErrors>{WarningsAsErrors}</MSBuildWarningsAsErrors> </PropertyGroup> <Target Name='Build'> <CustomLogAndReturnTask Return=""true"" ReturnHasLoggedErrors=""true"" WarningCode=""{WarningToLog}""/> <ReturnFailureWithoutLoggingErrorTask/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.WarningCount.ShouldBe(0); logger.ErrorCount.ShouldBe(1); logger.AssertLogContains(LogShouldContain); } }
public void TaskReturnsTrueButLogsWarning_TreatWarningsAsErrors_BuildShouldFinishAndFail() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""LogWarningReturnHasLoggedError"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <PropertyGroup> <MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors> </PropertyGroup> <Target Name='Build'> <CustomLogAndReturnTask Return=""true"" WarningCode=""MSB1234""/> <CustomLogAndReturnTask Return=""true"" WarningCode=""MSB1235""/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.WarningCount.ShouldBe(0); logger.ErrorCount.ShouldBe(2); // The build will continue so we should see the error MSB1235 logger.AssertLogContains("MSB1235"); } }
public void TaskReturnsHasLoggedErrorAndLogsWarningAsError_BuildShouldFinishAndFail() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <PropertyGroup> <MSBuildWarningsAsErrors>MSB1234</MSBuildWarningsAsErrors> </PropertyGroup> <Target Name='Build'> <CustomLogAndReturnTask Return=""true"" ReturnHasLoggedErrors=""true"" WarningCode=""MSB1234""/> <ReturnFailureWithoutLoggingErrorTask/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.WarningCount.ShouldBe(0); logger.ErrorCount.ShouldBe(1); // The build should STOP when a task logs an error, make sure ReturnFailureWithoutLoggingErrorTask doesn't run. logger.AssertLogDoesntContain("MSB4181"); } }
public void TaskLogsWarningAsError_BatchedBuild() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <PropertyGroup> <MSBuildWarningsAsErrors>MSB1234</MSBuildWarningsAsErrors> </PropertyGroup> <ItemGroup> <SomeItem Include=""Item1""> <Return>true</Return> <ReturnHasLoggedErrors>true</ReturnHasLoggedErrors> <WarningCode>MSB1235</WarningCode> </SomeItem> <SomeItem Include=""Item2""> <Return>true</Return> <ReturnHasLoggedErrors>true</ReturnHasLoggedErrors> <WarningCode>MSB1236</WarningCode> </SomeItem> <SomeItem Include=""Item3""> <Return>true</Return> <ReturnHasLoggedErrors>true</ReturnHasLoggedErrors> <WarningCode>MSB1234</WarningCode> </SomeItem> <SomeItem Include=""Item4""> <Return>true</Return> <ReturnHasLoggedErrors>true</ReturnHasLoggedErrors> <WarningCode>MSB1237</WarningCode> </SomeItem> </ItemGroup> <Target Name='Build'> <CustomLogAndReturnTask Sources=""@(SomeItem)"" Return=""true"" ReturnHasLoggedErrors=""true"" WarningCode=""%(WarningCode)""/> <ReturnFailureWithoutLoggingErrorTask/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.WarningCount.ShouldBe(2); logger.ErrorCount.ShouldBe(1); // The build should STOP when a task logs an error, make sure ReturnFailureWithoutLoggingErrorTask doesn't run. logger.AssertLogDoesntContain("MSB1237"); } }
public void TaskReturnsFailureButDoesNotLogError_ShouldCauseBuildFailure() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <Target Name='Build'> <ReturnFailureWithoutLoggingErrorTask/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectFailure(); logger.AssertLogContains("MSB4132"); } }
public void TaskReturnsFailureAndLogsError_ContinueOnError_WarnAndContinue() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""CustomLogAndReturnTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <Target Name='Build'> <CustomLogAndReturnTask Return=""false"" ErrorCode=""MSB1234"" ContinueOnError=""WarnAndContinue""/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectSuccess(); // The only warning should be the error->warning logged by the task. logger.WarningCount.ShouldBe(1); logger.AssertLogContains("MSB1234"); } }
public void TaskReturnsFailureButDoesNotLogError_ContinueOnError_WarnAndContinue() { using (TestEnvironment env = TestEnvironment.Create(_output)) { TransientTestProjectWithFiles proj = env.CreateTestProjectWithFiles($@" <Project> <UsingTask TaskName = ""ReturnFailureWithoutLoggingErrorTask"" AssemblyName=""Microsoft.Build.Engine.UnitTests""/> <Target Name='Build'> <ReturnFailureWithoutLoggingErrorTask ContinueOnError=""WarnAndContinue""/> </Target> </Project>"); MockLogger logger = proj.BuildProjectExpectSuccess(); logger.WarningCount.ShouldBe(1); logger.AssertLogContains("MSB4181"); } }