private static void SetParallelSettings()

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;
            }
        }