in src/Adapter/MSTest.CoreAdapter/MSTestSettings.cs [469:559]
private static void SetParallelSettings(XmlReader reader, MSTestSettings settings)
{
reader.Read();
if (!reader.IsEmptyElement)
{
// Read the first child.
reader.Read();
while (reader.NodeType == XmlNodeType.Element)
{
string elementName = reader.Name.ToUpperInvariant();
switch (elementName)
{
case "WORKERS":
{
var value = reader.ReadInnerXml();
if (int.TryParse(value, out int parallelWorkers))
{
if (parallelWorkers == 0)
{
settings.ParallelizationWorkers = Environment.ProcessorCount;
}
else if (parallelWorkers > 0)
{
settings.ParallelizationWorkers = parallelWorkers;
}
else
{
throw new AdapterSettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidParallelWorkersValue,
value));
}
}
else
{
throw new AdapterSettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidParallelWorkersValue,
value));
}
break;
}
case "SCOPE":
{
var value = reader.ReadInnerXml();
if (TryParseEnum(value, out ExecutionScope scope))
{
settings.ParallelizationScope = scope;
}
else
{
throw new AdapterSettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidParallelScopeValue,
value,
string.Join(", ", Enum.GetNames(typeof(ExecutionScope)))));
}
break;
}
default:
{
throw new AdapterSettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidSettingsXmlElement,
ParallelizeSettingsName,
reader.Name));
}
}
}
}
// If any of these properties are not set, resort to the defaults.
if (!settings.ParallelizationWorkers.HasValue)
{
settings.ParallelizationWorkers = Environment.ProcessorCount;
}
if (!settings.ParallelizationScope.HasValue)
{
settings.ParallelizationScope = ExecutionScope.ClassLevel;
}
}