a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
126 lines
3.5 KiB
C#
126 lines
3.5 KiB
C#
// ****************************************************************
|
|
// This is free software licensed under the NUnit license. You
|
|
// may obtain a copy of the license as well as information regarding
|
|
// copyright ownership at http://nunit.org/?p=license&r=2.4.
|
|
// ****************************************************************
|
|
|
|
namespace NUnit.Core
|
|
{
|
|
using NUnit.Core.Builders;
|
|
using System.Collections;
|
|
using System.Reflection;
|
|
|
|
/// <summary>
|
|
/// This is the master suite builder for NUnit. It builds a test suite from
|
|
/// one or more assemblies using a list of internal and external suite builders
|
|
/// to create fixtures from the qualified types in each assembly. It implements
|
|
/// the ISuiteBuilder interface itself, allowing it to be used by other classes
|
|
/// for queries and suite construction.
|
|
/// </summary>D:\Dev\NUnit\nunit20\src\NUnitFramework\core\TestBuilderAttribute.cs
|
|
public class TestSuiteBuilder
|
|
{
|
|
#region Instance Variables
|
|
|
|
private ArrayList builders = new ArrayList();
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
public IList Assemblies
|
|
{
|
|
get
|
|
{
|
|
ArrayList assemblies = new ArrayList();
|
|
foreach( TestAssemblyBuilder builder in builders )
|
|
assemblies.Add( builder.Assembly );
|
|
return assemblies;
|
|
}
|
|
}
|
|
|
|
public IList AssemblyInfo
|
|
{
|
|
get
|
|
{
|
|
ArrayList info = new ArrayList();
|
|
foreach( TestAssemblyBuilder builder in this.builders )
|
|
info.Add( builder.AssemblyInfo );
|
|
|
|
return info;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Build Methods
|
|
/// <summary>
|
|
/// Build a suite based on a TestPackage
|
|
/// </summary>
|
|
/// <param name="package">The TestPackage</param>
|
|
/// <returns>A TestSuite</returns>
|
|
public TestSuite Build( TestPackage package )
|
|
{
|
|
bool autoNamespaceSuites = package.GetSetting( "AutoNamespaceSuites", true );
|
|
bool mergeAssemblies = package.GetSetting( "MergeAssemblies", false );
|
|
|
|
if ( package.IsSingleAssembly )
|
|
return BuildSingleAssembly( package );
|
|
string targetAssemblyName = null;
|
|
if( package.TestName != null && package.Assemblies.Contains( package.TestName ) )
|
|
{
|
|
targetAssemblyName = package.TestName;
|
|
package.TestName = null;
|
|
}
|
|
|
|
TestSuite rootSuite = new TestSuite( package.FullName );
|
|
NamespaceTreeBuilder namespaceTree =
|
|
new NamespaceTreeBuilder( rootSuite );
|
|
|
|
builders.Clear();
|
|
foreach(string assemblyName in package.Assemblies)
|
|
{
|
|
if ( targetAssemblyName == null || targetAssemblyName == assemblyName )
|
|
{
|
|
TestAssemblyBuilder builder = new TestAssemblyBuilder();
|
|
builders.Add( builder );
|
|
|
|
Test testAssembly = builder.Build( assemblyName, package.TestName, autoNamespaceSuites && !mergeAssemblies );
|
|
|
|
if ( testAssembly != null )
|
|
{
|
|
if (!mergeAssemblies)
|
|
{
|
|
rootSuite.Add(testAssembly);
|
|
}
|
|
else if (autoNamespaceSuites)
|
|
{
|
|
namespaceTree.Add(testAssembly.Tests);
|
|
rootSuite = namespaceTree.RootSuite;
|
|
}
|
|
else
|
|
{
|
|
foreach (Test test in testAssembly.Tests)
|
|
rootSuite.Add(test);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( rootSuite.Tests.Count == 0 )
|
|
return null;
|
|
|
|
return rootSuite;
|
|
}
|
|
|
|
private TestSuite BuildSingleAssembly( TestPackage package )
|
|
{
|
|
TestAssemblyBuilder builder = new TestAssemblyBuilder();
|
|
builders.Clear();
|
|
builders.Add( builder );
|
|
|
|
return (TestSuite)builder.Build(
|
|
package.FullName,
|
|
package.TestName, package.GetSetting( "AutoNamespaceSuites", true ) );
|
|
}
|
|
#endregion
|
|
}
|
|
}
|