<PackageReference Include="NUnit" Version="4.2.1" />

DefaultSuiteBuilder

Built-in SuiteBuilder for all types of test classes.
using NUnit.Framework.Interfaces; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace NUnit.Framework.Internal.Builders { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class DefaultSuiteBuilder : ISuiteBuilder { private readonly NUnitTestFixtureBuilder _defaultBuilder = new NUnitTestFixtureBuilder(); public bool CanBuildFrom(ITypeInfo typeInfo) { if (typeInfo.IsAbstract && !typeInfo.IsSealed) return false; if (typeInfo.IsDefined<IFixtureBuilder>(true)) return true; if (typeInfo.IsGenericTypeDefinition) return false; return typeInfo.HasMethodWithAttribute(typeof(IImplyFixture)); } public TestSuite BuildFrom(ITypeInfo typeInfo) { return BuildFrom(typeInfo, PreFilter.Empty); } public TestSuite BuildFrom(ITypeInfo typeInfo, IPreFilter filter) { List<TestSuite> list = new List<TestSuite>(); try { IFixtureBuilder[] fixtureBuilderAttributes = GetFixtureBuilderAttributes(typeInfo); IFixtureBuilder[] array = fixtureBuilderAttributes; foreach (IFixtureBuilder fixtureBuilder in array) { foreach (TestSuite item in (fixtureBuilder as IFixtureBuilder2)?.BuildFrom(typeInfo, filter) ?? fixtureBuilder.BuildFrom(typeInfo)) { list.Add(item); } } if (!typeInfo.IsGenericType) { switch (list.Count) { case 0: return _defaultBuilder.BuildFrom(typeInfo, filter); case 1: return list[0]; default: return BuildMultipleFixtures(typeInfo, list); } } return BuildMultipleFixtures(typeInfo, list); } catch (Exception exception) { return new TestFixture(typeInfo, exception.Unwrap()); } } private TestSuite BuildMultipleFixtures(ITypeInfo typeInfo, IEnumerable<TestSuite> fixtures) { TestSuite testSuite = new ParameterizedFixtureSuite(typeInfo); testSuite.ApplyAttributesToTestSuite(typeInfo.Type); foreach (TestSuite fixture in fixtures) { testSuite.Add(fixture); } return testSuite; } private IFixtureBuilder[] GetFixtureBuilderAttributes([System.Runtime.CompilerServices.Nullable(2)] ITypeInfo typeInfo) { IFixtureBuilder[] array = Array.Empty<IFixtureBuilder>(); while (typeInfo != null && !typeInfo.IsType(typeof(object))) { array = typeInfo.GetCustomAttributes<IFixtureBuilder>(false); if (array.Length != 0) { if (array.Length == 1) return array; int num = 0; IFixtureBuilder[] array2 = array; foreach (IFixtureBuilder attr in array2) { if (HasArguments(attr)) num++; } if (num == array.Length) return array; if (num == 0) return new IFixtureBuilder[1] { array[0] }; IFixtureBuilder[] array3 = new IFixtureBuilder[num]; int num2 = 0; IFixtureBuilder[] array4 = array; foreach (IFixtureBuilder fixtureBuilder in array4) { if (HasArguments(fixtureBuilder)) array3[num2++] = fixtureBuilder; } return array3; } typeInfo = typeInfo.BaseType; } return array; } private bool HasArguments(IFixtureBuilder attr) { TestFixtureAttribute testFixtureAttribute = attr as TestFixtureAttribute; if (testFixtureAttribute != null && testFixtureAttribute.Arguments.Length == 0) return testFixtureAttribute.TypeArgs.Length != 0; return true; } } }