Skip to content

Commit

Permalink
Properly Consider WarningsAsMessages In TaskLoggingHelper's `HasLogge…
Browse files Browse the repository at this point in the history
…dErrors` (#6308)

Fixes #6306

Context
#6174 didn't properly account for warningsaserrors and warningsasmessages together. This PR makes each taskhost aware of both WarningsAsMessages and WarningsAsErrors when telling tasks whether or not an error should be treated as a warning.

Changes Made
LoggingService and TaskLoggingContext expose a GetWarningsAsMessages to each taskhost for them to store.
No changes to IBE8 API
Taskhosts first check if a warning would be treated as a message when telling tasks whether or not a warning should be treated as a warning.
  • Loading branch information
benvillalobos committed Mar 31, 2021
1 parent 7a89210 commit 80f316e
Show file tree
Hide file tree
Showing 10 changed files with 224 additions and 154 deletions.
7 changes: 6 additions & 1 deletion src/Build.UnitTests/BackEnd/MockLoggingService.cs
Expand Up @@ -557,7 +557,12 @@ public bool HasBuildSubmissionLoggedErrors(int submissionId)
return false;
}

public ICollection<string> GetWarningsToBeLoggedAsErrorsByProject(BuildEventContext context)
public ICollection<string> GetWarningsAsErrors(BuildEventContext context)
{
throw new NotImplementedException();
}

public ICollection<string> GetWarningsAsMessages(BuildEventContext context)
{
throw new NotImplementedException();
}
Expand Down
117 changes: 90 additions & 27 deletions src/Build.UnitTests/BackEnd/TaskHostConfiguration_Tests.cs
Expand Up @@ -57,7 +57,8 @@ public void ConstructorWithNullName()
taskLocation: @"c:\my tasks\mytask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);
}
);
}
Expand Down Expand Up @@ -90,7 +91,8 @@ public void ConstructorWithEmptyName()
taskLocation: @"c:\my tasks\mytask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);
}
);
}
Expand Down Expand Up @@ -123,7 +125,8 @@ public void ConstructorWithNullLocation()
taskLocation: null,
taskParameters: null,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);
}
);
}
Expand Down Expand Up @@ -158,7 +161,8 @@ public void ConstructorWithEmptyLocation()
taskLocation: String.Empty,
taskParameters: null,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);
}
);
}
Expand Down Expand Up @@ -191,26 +195,32 @@ public void TestValidConstructors()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

TaskHostConfiguration config2 = new TaskHostConfiguration(
1,
Directory.GetCurrentDirectory(),
null,
Thread.CurrentThread.CurrentCulture,
Thread.CurrentThread.CurrentUICulture,
nodeId: 1,
startupDirectory: Directory.GetCurrentDirectory(),
buildProcessEnvironment: null,
culture: Thread.CurrentThread.CurrentCulture,
uiCulture: Thread.CurrentThread.CurrentUICulture,
#if FEATURE_APPDOMAIN
appDomainSetup:
#if FEATURE_APPDOMAIN
null,
#endif
lineNumberOfTask:
#endif
1,
1,
@"c:\my project\myproj.proj",
_continueOnErrorDefault,
"TaskName",
@"c:\MyTasks\MyTask.dll",
null,
null,
null);
columnNumberOfTask: 1,
projectFileOfTask: @"c:\my project\myproj.proj",
continueOnError: _continueOnErrorDefault,
taskName: "TaskName",
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: null,
warningsAsMessages: null);

IDictionary<string, object> parameters = new Dictionary<string, object>();
TaskHostConfiguration config3 = new TaskHostConfiguration(
Expand All @@ -234,7 +244,8 @@ public void TestValidConstructors()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

IDictionary<string, object> parameters2 = new Dictionary<string, object>();
parameters2.Add("Text", "Hello!");
Expand Down Expand Up @@ -263,7 +274,8 @@ public void TestValidConstructors()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters2,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

HashSet<string> WarningsAsErrors = new HashSet<string>();
WarningsAsErrors.Add("MSB1234");
Expand Down Expand Up @@ -292,7 +304,8 @@ public void TestValidConstructors()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters2,
globalParameters: null,
warningsAsErrors: WarningsAsErrors);
warningsAsErrors: WarningsAsErrors,
warningsAsMessages: null);
}

/// <summary>
Expand Down Expand Up @@ -328,7 +341,8 @@ public void TestTranslationWithNullDictionary()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: null,
globalParameters: expectedGlobalProperties,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand Down Expand Up @@ -371,7 +385,8 @@ public void TestTranslationWithEmptyDictionary()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: new Dictionary<string, object>(),
globalParameters: new Dictionary<string, string>(),
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand Down Expand Up @@ -419,7 +434,8 @@ public void TestTranslationWithValueTypesInDictionary()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand Down Expand Up @@ -465,7 +481,8 @@ public void TestTranslationWithITaskItemInDictionary()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand Down Expand Up @@ -510,7 +527,8 @@ public void TestTranslationWithITaskItemArrayInDictionary()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: parameters,
globalParameters: null,
warningsAsErrors: null);
warningsAsErrors: null,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand Down Expand Up @@ -562,7 +580,8 @@ public void TestTranslationWithWarningsAsErrors()
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: WarningsAsErrors);
warningsAsErrors: WarningsAsErrors,
warningsAsMessages: null);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());
Expand All @@ -578,6 +597,50 @@ public void TestTranslationWithWarningsAsErrors()

}

/// <summary>
/// Test serialization / deserialization when the parameter dictionary contains warningsasmessages
/// </summary>
[Fact]
public void TestTranslationWithWarningsAsMessages()
{
HashSet<string> WarningsAsMessages = new HashSet<string>();
WarningsAsMessages.Add("MSB1234");
WarningsAsMessages.Add("MSB1235");
WarningsAsMessages.Add("MSB1236");
WarningsAsMessages.Add("MSB1237");
TaskHostConfiguration config = new TaskHostConfiguration(
nodeId: 1,
startupDirectory: Directory.GetCurrentDirectory(),
buildProcessEnvironment: null,
culture: Thread.CurrentThread.CurrentCulture,
uiCulture: Thread.CurrentThread.CurrentUICulture,
#if FEATURE_APPDOMAIN
appDomainSetup:
#if FEATURE_APPDOMAIN
null,
#endif
lineNumberOfTask:
#endif
1,
columnNumberOfTask: 1,
projectFileOfTask: @"c:\my project\myproj.proj",
continueOnError: _continueOnErrorDefault,
taskName: "TaskName",
taskLocation: @"c:\MyTasks\MyTask.dll",
taskParameters: null,
globalParameters: null,
warningsAsErrors: null,
warningsAsMessages: WarningsAsMessages);

((ITranslatable)config).Translate(TranslationHelpers.GetWriteTranslator());
INodePacket packet = TaskHostConfiguration.FactoryForDeserialization(TranslationHelpers.GetReadTranslator());

TaskHostConfiguration deserializedConfig = packet as TaskHostConfiguration;

Assert.NotNull(deserializedConfig.WarningsAsMessages);
config.WarningsAsMessages.SequenceEqual(deserializedConfig.WarningsAsMessages, StringComparer.Ordinal).ShouldBeTrue();
}

/// <summary>
/// Helper methods for testing the task host-related packets.
/// </summary>
Expand Down

0 comments on commit 80f316e

Please sign in to comment.