PageRenderTime 22ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/NUnit/core/TestSuiteBuilder.cs

#
C# | 132 lines | 95 code | 20 blank | 17 comment | 16 complexity | 5ae06fffbc296bcdff7d0c4d1aa25e04 MD5 | raw file
Possible License(s): GPL-2.0
  1. // ****************************************************************
  2. // This is free software licensed under the NUnit license. You
  3. // may obtain a copy of the license as well as information regarding
  4. // copyright ownership at http://nunit.org.
  5. // ****************************************************************
  6. namespace NUnit.Core
  7. {
  8. using NUnit.Core.Builders;
  9. using System.Collections;
  10. using System.Reflection;
  11. /// <summary>
  12. /// This is the master suite builder for NUnit. It builds a test suite from
  13. /// one or more assemblies using a list of internal and external suite builders
  14. /// to create fixtures from the qualified types in each assembly. It implements
  15. /// the ISuiteBuilder interface itself, allowing it to be used by other classes
  16. /// for queries and suite construction.
  17. /// </summary>D:\Dev\NUnit\nunit20\src\NUnitFramework\core\TestBuilderAttribute.cs
  18. public class TestSuiteBuilder
  19. {
  20. #region Instance Variables
  21. private ArrayList builders = new ArrayList();
  22. #endregion
  23. #region Properties
  24. public IList Assemblies
  25. {
  26. get
  27. {
  28. ArrayList assemblies = new ArrayList();
  29. foreach( TestAssemblyBuilder builder in builders )
  30. assemblies.Add( builder.Assembly );
  31. return assemblies;
  32. }
  33. }
  34. public IList AssemblyInfo
  35. {
  36. get
  37. {
  38. ArrayList info = new ArrayList();
  39. foreach( TestAssemblyBuilder builder in this.builders )
  40. info.Add( builder.AssemblyInfo );
  41. return info;
  42. }
  43. }
  44. #endregion
  45. #region Build Methods
  46. /// <summary>
  47. /// Build a suite based on a TestPackage
  48. /// </summary>
  49. /// <param name="package">The TestPackage</param>
  50. /// <returns>A TestSuite</returns>
  51. public TestSuite Build( TestPackage package )
  52. {
  53. bool autoNamespaceSuites = package.GetSetting( "AutoNamespaceSuites", true );
  54. bool mergeAssemblies = package.GetSetting( "MergeAssemblies", false );
  55. TestExecutionContext.CurrentContext.TestCaseTimeout = package.GetSetting("DefaultTimeout", 0);
  56. if ( package.IsSingleAssembly )
  57. return BuildSingleAssembly( package );
  58. string targetAssemblyName = null;
  59. if( package.TestName != null && package.Assemblies.Contains( package.TestName ) )
  60. {
  61. targetAssemblyName = package.TestName;
  62. package.TestName = null;
  63. }
  64. TestSuite rootSuite = new ProjectRootSuite( package.FullName );
  65. NamespaceTreeBuilder namespaceTree =
  66. new NamespaceTreeBuilder( rootSuite );
  67. builders.Clear();
  68. foreach(string assemblyName in package.Assemblies)
  69. {
  70. if ( targetAssemblyName == null || targetAssemblyName == assemblyName )
  71. {
  72. TestAssemblyBuilder builder = new TestAssemblyBuilder();
  73. builders.Add( builder );
  74. Test testAssembly = builder.Build( assemblyName, package.TestName, autoNamespaceSuites && !mergeAssemblies );
  75. if ( testAssembly != null )
  76. {
  77. if (!mergeAssemblies)
  78. {
  79. rootSuite.Add(testAssembly);
  80. }
  81. else if (autoNamespaceSuites)
  82. {
  83. namespaceTree.Add(testAssembly.Tests);
  84. rootSuite = namespaceTree.RootSuite;
  85. }
  86. else
  87. {
  88. foreach (Test test in testAssembly.Tests)
  89. rootSuite.Add(test);
  90. }
  91. }
  92. }
  93. }
  94. ProviderCache.Clear();
  95. if (rootSuite.Tests.Count == 0)
  96. return null;
  97. return rootSuite;
  98. }
  99. private TestSuite BuildSingleAssembly( TestPackage package )
  100. {
  101. TestAssemblyBuilder builder = new TestAssemblyBuilder();
  102. builders.Clear();
  103. builders.Add( builder );
  104. TestSuite suite = (TestSuite)builder.Build(
  105. package.FullName,
  106. package.TestName, package.GetSetting( "AutoNamespaceSuites", true ) );
  107. ProviderCache.Clear();
  108. return suite;
  109. }
  110. #endregion
  111. }
  112. }