in src/Adapter/MSTest.CoreAdapter/MSTestSettings.cs [304:467]
private static MSTestSettings ToSettings(XmlReader reader)
{
ValidateArg.NotNull<XmlReader>(reader, "reader");
// Expected format of the xml is: -
//
// <MSTestV2>
// <CaptureTraceOutput>true</CaptureTraceOutput>
// <MapInconclusiveToFailed>false</MapInconclusiveToFailed>
// <MapNotRunnableToFailed>false</MapNotRunnableToFailed>
// <EnableBaseClassTestMethodsFromOtherAssemblies>false</EnableBaseClassTestMethodsFromOtherAssemblies>
// <TestTimeout>5000</TestTimeout>
// <TreatClassAndAssemblyCleanupWarningsAsErrors>false</TreatClassAndAssemblyCleanupWarningsAsErrors>
// <Parallelize>
// <Workers>4</Workers>
// <Scope>TestClass</Scope>
// </Parallelize>
// </MSTestV2>
//
// (or)
//
// <MSTest>
// <ForcedLegacyMode>true</ForcedLegacyMode>
// <SettingsFile>..\..\Local.testsettings</SettingsFile>
// <CaptureTraceOutput>true</CaptureTraceOutput>
// </MSTest>
MSTestSettings settings = new MSTestSettings();
// Read the first element in the section which is either "MSTest"/"MSTestV2"
reader.ReadToNextElement();
if (!reader.IsEmptyElement)
{
reader.Read();
while (reader.NodeType == XmlNodeType.Element)
{
bool result;
string elementName = reader.Name.ToUpperInvariant();
switch (elementName)
{
case "CAPTURETRACEOUTPUT":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.CaptureDebugTraces = result;
}
break;
}
case "ENABLEBASECLASSTESTMETHODSFROMOTHERASSEMBLIES":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.EnableBaseClassTestMethodsFromOtherAssemblies = result;
}
break;
}
case "CLASSCLEANUPLIFECYCLE":
{
var value = reader.ReadInnerXml();
if (TryParseEnum(value, out ClassCleanupBehavior lifecycle))
{
settings.ClassCleanupLifecycle = lifecycle;
}
else
{
throw new AdapterSettingsException(
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidClassCleanupLifecycleValue,
value,
string.Join(", ", Enum.GetNames(typeof(ClassCleanupBehavior)))));
}
break;
}
case "FORCEDLEGACYMODE":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.ForcedLegacyMode = result;
}
break;
}
case "MAPINCONCLUSIVETOFAILED":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.MapInconclusiveToFailed = result;
}
break;
}
case "MAPNOTRUNNABLETOFAILED":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.MapNotRunnableToFailed = result;
}
break;
}
case "SETTINGSFILE":
{
string fileName = reader.ReadInnerXml();
if (!string.IsNullOrEmpty(fileName))
{
settings.TestSettingsFile = fileName;
}
break;
}
case "PARALLELIZE":
{
SetParallelSettings(reader.ReadSubtree(), settings);
reader.SkipToNextElement();
break;
}
case "TESTTIMEOUT":
{
if (int.TryParse(reader.ReadInnerXml(), out int testTimeout) && testTimeout > 0)
{
settings.TestTimeout = testTimeout;
}
break;
}
case "TREATCLASSANDASSEMBLYCLEANUPWARNINGSASERRORS":
{
if (bool.TryParse(reader.ReadInnerXml(), out result))
{
settings.TreatClassAndAssemblyCleanupWarningsAsErrors = result;
}
break;
}
default:
{
PlatformServiceProvider.Instance.SettingsProvider.Load(reader.ReadSubtree());
reader.SkipToNextElement();
break;
}
}
}
}
return settings;
}