WorkItemBuilder
WorkItemBuilder class knows how to build a tree of work items from a tree of tests
using NUnit.Framework.Interfaces;
using System.Collections.Generic;
using System.Threading;
namespace NUnit.Framework.Internal.Execution
{
public static class WorkItemBuilder
{
private class WorkItemOrderComparer : IComparer<WorkItem>
{
public int Compare(WorkItem x, WorkItem y)
{
int num = 2147483647;
int value = 2147483647;
if (x.Test.Properties.ContainsKey("Order"))
num = (int)x.Test.Properties["Order"][0];
if (y.Test.Properties.ContainsKey("Order"))
value = (int)y.Test.Properties["Order"][0];
return num.CompareTo(value);
}
}
public static WorkItem CreateWorkItem(ITest test, ITestFilter filter, bool recursive = false)
{
TestSuite testSuite = test as TestSuite;
if (testSuite == null)
return new SimpleWorkItem((TestMethod)test, filter);
CompositeWorkItem compositeWorkItem = new CompositeWorkItem(testSuite, filter);
if (recursive) {
int num = 0;
foreach (ITest test2 in testSuite.Tests) {
if (filter.Pass(test2)) {
WorkItem workItem = CreateWorkItem(test2, filter, recursive);
if (workItem.TargetApartment == ApartmentState.Unknown && compositeWorkItem.TargetApartment != ApartmentState.Unknown)
workItem.TargetApartment = compositeWorkItem.TargetApartment;
if (test2.Properties.ContainsKey("Order")) {
compositeWorkItem.Children.Insert(0, workItem);
num++;
} else
compositeWorkItem.Children.Add(workItem);
}
}
if (num > 0)
compositeWorkItem.Children.Sort(0, num, new WorkItemOrderComparer());
}
return compositeWorkItem;
}
}
}