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

NamespaceTreeBuilder

public class NamespaceTreeBuilder
Class that can build a tree of automatic namespace suites from a group of fixtures.
using System.Collections.Generic; namespace NUnit.Framework.Internal.Builders { public class NamespaceTreeBuilder { private Dictionary<string, TestSuite> _namespaceIndex = new Dictionary<string, TestSuite>(); private TestSuite _globalInsertionPoint; public TestSuite RootSuite { get; set; } public NamespaceTreeBuilder(TestSuite rootSuite) { Guard.ArgumentNotNull(rootSuite, "rootSuite"); RootSuite = (_globalInsertionPoint = rootSuite); } public void Add(IList<Test> fixtures) { foreach (TestSuite fixture in fixtures) { Add(fixture); } } public void Add(TestSuite fixture) { string namespaceForFixture = GetNamespaceForFixture(fixture); TestSuite namespaceSuite = GetNamespaceSuite(namespaceForFixture); if (fixture is SetUpFixture) AddSetUpFixture(fixture, namespaceSuite, namespaceForFixture); else namespaceSuite.Add(fixture); } private static string GetNamespaceForFixture(TestSuite fixture) { string text = fixture.FullName; int num = text.IndexOfAny(new char[2] { '[', '(' }); if (num >= 0) text = text.Substring(0, num); num = text.LastIndexOf('.'); return (num > 0) ? text.Substring(0, num) : string.Empty; } private TestSuite GetNamespaceSuite(string ns) { Guard.ArgumentNotNull(ns, "ns"); if (ns == "") return _globalInsertionPoint; if (_namespaceIndex.ContainsKey(ns)) return _namespaceIndex[ns]; TestSuite testSuite = null; int num = ns.LastIndexOf("."); if (num == -1) { testSuite = new TestSuite(ns); _globalInsertionPoint.Add(testSuite); } else { string text = ns.Substring(0, num); TestSuite namespaceSuite = GetNamespaceSuite(text); string name = ns.Substring(num + 1); testSuite = new TestSuite(text, name); namespaceSuite.Add(testSuite); } _namespaceIndex[ns] = testSuite; return testSuite; } private void AddSetUpFixture(TestSuite newSetupFixture, TestSuite containingSuite, string ns) { foreach (TestSuite test in containingSuite.Tests) { newSetupFixture.Add(test); } containingSuite.Tests.Clear(); if (containingSuite is SetUpFixture || containingSuite is TestAssembly) containingSuite.Add(newSetupFixture); else { TestSuite testSuite = (TestSuite)containingSuite.Parent; if (testSuite == null) { newSetupFixture.Name = RootSuite.Name; RootSuite = newSetupFixture; } else { testSuite.Tests.Remove(containingSuite); testSuite.Add(newSetupFixture); } } _namespaceIndex[ns] = newSetupFixture; if (ns == "") _globalInsertionPoint = newSetupFixture; } } }