DefaultSuiteBuilder
Built-in SuiteBuilder for all types of test classes.
using NUnit.Framework.Interfaces;
using System;
namespace NUnit.Framework.Internal.Builders
{
public class DefaultSuiteBuilder : ISuiteBuilder
{
private NUnitTestFixtureBuilder defaultBuilder = new NUnitTestFixtureBuilder();
public bool CanBuildFrom(Type type)
{
if (type.IsAbstract && !type.IsSealed)
return false;
if (type.IsDefined(typeof(IFixtureBuilder), true))
return true;
if (type.IsGenericTypeDefinition)
return false;
return Reflect.HasMethodWithAttribute(type, typeof(IImplyFixture));
}
public Test BuildFrom(Type type)
{
IFixtureBuilder[] fixtureBuilderAttributes = GetFixtureBuilderAttributes(type);
if (!type.IsGenericType) {
switch (fixtureBuilderAttributes.Length) {
case 0:
return defaultBuilder.BuildFrom(type);
case 1:
return fixtureBuilderAttributes[0].BuildFrom(type);
default:
return BuildMultipleFixtures(type, fixtureBuilderAttributes);
}
}
return BuildMultipleFixtures(type, fixtureBuilderAttributes);
}
private Test BuildMultipleFixtures(Type type, IFixtureBuilder[] attrs)
{
TestSuite testSuite = new ParameterizedFixtureSuite(type);
foreach (IFixtureBuilder fixtureBuilder in attrs) {
testSuite.Add(fixtureBuilder.BuildFrom(type));
}
return testSuite;
}
private IFixtureBuilder[] GetFixtureBuilderAttributes(Type type)
{
IFixtureBuilder[] array = new IFixtureBuilder[0];
while (type != (Type)null) {
array = (IFixtureBuilder[])type.GetCustomAttributes(typeof(IFixtureBuilder), false);
if (array.Length > 0)
return array;
type = type.BaseType;
}
return array;
}
}
}