in src/Microsoft.TestPlatform.ObjectModel/Logger/LoggerSettings.cs [122:233]
internal static LoggerSettings FromXml(XmlReader reader)
{
var elementName = reader.Name;
var empty = reader.IsEmptyElement;
var settings = new LoggerSettings
{
IsEnabled = true
};
// Read attributes.
if (reader.HasAttributes)
{
while (reader.MoveToNextAttribute())
{
switch (reader.Name.ToLowerInvariant())
{
case Constants.LoggerFriendlyNameLower:
settings.FriendlyName = reader.Value;
break;
case Constants.LoggerUriName:
try
{
settings.Uri = new Uri(reader.Value);
}
#if NETSTANDARD1_0
catch
#else
catch (UriFormatException)
#endif
{
throw new SettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resources.Resources.InvalidUriInSettings,
reader.Value,
elementName));
}
break;
case Constants.LoggerAssemblyQualifiedNameLower:
settings.AssemblyQualifiedName = reader.Value;
break;
case Constants.LoggerCodeBaseLower:
settings.CodeBase = reader.Value;
break;
case Constants.LoggerEnabledName:
bool.TryParse(reader.Value, out var value);
settings.IsEnabled = value;
break;
default:
throw new SettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resources.Resources.InvalidSettingsXmlAttribute,
elementName,
reader.Name));
}
}
}
// Check for required attributes.
if (string.IsNullOrWhiteSpace(settings.FriendlyName) &&
string.IsNullOrWhiteSpace(settings.Uri?.ToString()) &&
string.IsNullOrWhiteSpace(settings.AssemblyQualifiedName))
{
throw new SettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resources.Resources.MissingLoggerAttributes,
elementName,
Constants.LoggerFriendlyName));
}
// Move to next node.
reader.Read();
// Return empty settings if previous element is empty.
if (empty)
{
return settings;
}
// Read inner elements.
while (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name.ToLowerInvariant())
{
#if !NETSTANDARD1_0
case Constants.LoggerConfigurationNameLower:
var document = new XmlDocument();
var element = document.CreateElement(reader.Name);
element.InnerXml = reader.ReadInnerXml();
settings.Configuration = element;
break;
#endif
default:
throw new SettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resources.Resources.InvalidSettingsXmlElement,
elementName,
reader.Name));
}
}
reader.ReadEndElement();
return settings;
}