1 // ****************************************************************
\r
2 // This is free software licensed under the NUnit license. You
\r
3 // may obtain a copy of the license as well as information regarding
\r
4 // copyright ownership at http://nunit.org/?p=license&r=2.4.
\r
5 // ****************************************************************
\r
9 using NUnit.Core.Builders;
\r
10 using System.Collections;
\r
11 using System.Reflection;
\r
14 /// This is the master suite builder for NUnit. It builds a test suite from
\r
15 /// one or more assemblies using a list of internal and external suite builders
\r
16 /// to create fixtures from the qualified types in each assembly. It implements
\r
17 /// the ISuiteBuilder interface itself, allowing it to be used by other classes
\r
18 /// for queries and suite construction.
\r
19 /// </summary>D:\Dev\NUnit\nunit20\src\NUnitFramework\core\TestBuilderAttribute.cs
\r
20 public class TestSuiteBuilder
\r
22 #region Instance Variables
\r
24 private ArrayList builders = new ArrayList();
\r
29 public IList Assemblies
\r
33 ArrayList assemblies = new ArrayList();
\r
34 foreach( TestAssemblyBuilder builder in builders )
\r
35 assemblies.Add( builder.Assembly );
\r
40 public IList AssemblyInfo
\r
44 ArrayList info = new ArrayList();
\r
45 foreach( TestAssemblyBuilder builder in this.builders )
\r
46 info.Add( builder.AssemblyInfo );
\r
53 #region Build Methods
\r
55 /// Build a suite based on a TestPackage
\r
57 /// <param name="package">The TestPackage</param>
\r
58 /// <returns>A TestSuite</returns>
\r
59 public TestSuite Build( TestPackage package )
\r
61 bool autoNamespaceSuites = package.GetSetting( "AutoNamespaceSuites", true );
\r
62 bool mergeAssemblies = package.GetSetting( "MergeAssemblies", false );
\r
64 if ( package.IsSingleAssembly )
\r
65 return BuildSingleAssembly( package );
\r
66 string targetAssemblyName = null;
\r
67 if( package.TestName != null && package.Assemblies.Contains( package.TestName ) )
\r
69 targetAssemblyName = package.TestName;
\r
70 package.TestName = null;
\r
73 TestSuite rootSuite = new TestSuite( package.FullName );
\r
74 NamespaceTreeBuilder namespaceTree =
\r
75 new NamespaceTreeBuilder( rootSuite );
\r
78 foreach(string assemblyName in package.Assemblies)
\r
80 if ( targetAssemblyName == null || targetAssemblyName == assemblyName )
\r
82 TestAssemblyBuilder builder = new TestAssemblyBuilder();
\r
83 builders.Add( builder );
\r
85 Test testAssembly = builder.Build( assemblyName, package.TestName, autoNamespaceSuites && !mergeAssemblies );
\r
87 if ( testAssembly != null )
\r
89 if (!mergeAssemblies)
\r
91 rootSuite.Add(testAssembly);
\r
93 else if (autoNamespaceSuites)
\r
95 namespaceTree.Add(testAssembly.Tests);
\r
96 rootSuite = namespaceTree.RootSuite;
\r
100 foreach (Test test in testAssembly.Tests)
\r
101 rootSuite.Add(test);
\r
107 if ( rootSuite.Tests.Count == 0 )
\r
113 private TestSuite BuildSingleAssembly( TestPackage package )
\r
115 TestAssemblyBuilder builder = new TestAssemblyBuilder();
\r
117 builders.Add( builder );
\r
119 return (TestSuite)builder.Build(
\r
121 package.TestName, package.GetSetting( "AutoNamespaceSuites", true ) );
\r