<PackageReference Include="NUnit" Version="3.0.0-rc-3" />

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> namespaceSuites = new Dictionary<string, TestSuite>(); private TestSuite rootSuite; public TestSuite RootSuite => rootSuite; public NamespaceTreeBuilder(TestSuite rootSuite) { this.rootSuite = rootSuite; } public void Add(IList<Test> fixtures) { foreach (TestSuite fixture in fixtures) { Add(fixture); } } public void Add(TestSuite fixture) { string namespaceForFixture = GetNamespaceForFixture(fixture); TestSuite testSuite = BuildFromNameSpace(namespaceForFixture); if (fixture is SetUpFixture) AddSetUpFixture(fixture, testSuite, namespaceForFixture); else testSuite.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 BuildFromNameSpace(string ns) { if (ns == null || ns == "") return rootSuite; TestSuite testSuite = namespaceSuites.ContainsKey(ns) ? namespaceSuites[ns] : null; if (testSuite != null) return testSuite; int num = ns.LastIndexOf("."); if (num == -1) { testSuite = new TestSuite(ns); if (rootSuite == null) rootSuite = testSuite; else rootSuite.Add(testSuite); } else { string text = ns.Substring(0, num); TestSuite testSuite2 = BuildFromNameSpace(text); string name = ns.Substring(num + 1); testSuite = new TestSuite(text, name); testSuite2.Add(testSuite); } namespaceSuites[ns] = testSuite; return testSuite; } private void AddSetUpFixture(TestSuite newSetupFixture, TestSuite containingSuite, string ns) { foreach (TestSuite test in containingSuite.Tests) { newSetupFixture.Add(test); } if (containingSuite is SetUpFixture) { containingSuite.Tests.Clear(); 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); } } namespaceSuites[ns] = newSetupFixture; } } }