protected override IList <TestPart> GetTestPartsImpl(IReflectionPolicy reflectionPolicy, ICodeElementInfo codeElement)
            {
                bool             copied            = false;
                IList <TestPart> combinedTestParts = null;

                ForEachDriver(testFrameworkManager.SelectTestFrameworksForCodeElementsImpl(
                                  testFrameworkHandles, testFrameworkFallbackMode, testFrameworkOptions, new[] { codeElement }),
                              (driver, items, driverCount) =>
                {
                    IList <TestPart> testParts = driver.GetTestParts(reflectionPolicy, codeElement);
                    if (testParts.Count != 0)
                    {
                        if (combinedTestParts == null)
                        {
                            combinedTestParts = testParts;
                        }
                        else
                        {
                            if (!copied)
                            {
                                combinedTestParts = new List <TestPart>(combinedTestParts);
                                copied            = true;
                            }

                            GenericCollectionUtils.AddAll(testParts, combinedTestParts);
                        }
                    }

                    return(false);
                });

                return(combinedTestParts ?? EmptyArray <TestPart> .Instance);
            }
            private bool ForEachDriver <T>(MultiMap <TestFrameworkSelection, T> testFrameworkPartitions,
                                           Func <ITestDriver, IList <T>, int, bool> func)
                where T : class
            {
                var testDriverPartitions = new Dictionary <TestDriverFactory, TestDriverData <T> >();

                foreach (var testFrameworkPartition in testFrameworkPartitions)
                {
                    if (testFrameworkPartition.Value.Count != 0)
                    {
                        TestFrameworkSelection testFrameworkSelection = testFrameworkPartition.Key;
                        ComponentHandle <ITestFramework, TestFrameworkTraits> testFrameworkHandle = testFrameworkSelection.TestFrameworkHandle;
                        TestDriverFactory testDriverFactory = testFrameworkHandle.GetComponent().GetTestDriverFactory();

                        TestDriverData <T> testDriverData;
                        if (!testDriverPartitions.TryGetValue(testDriverFactory, out testDriverData))
                        {
                            testDriverData = new TestDriverData <T>(testFrameworkSelection.TestFrameworkOptions);
                            testDriverPartitions.Add(testDriverFactory, testDriverData);
                        }
                        else
                        {
                            testDriverData.ItemIndex = new HashSet <T>(ReferentialEqualityComparer <T> .Instance);
                            GenericCollectionUtils.AddAll(testDriverData.Items, testDriverData.ItemIndex);
                        }

                        testDriverData.TestFrameworkHandles.Add(testFrameworkHandle);

                        foreach (var item in testFrameworkPartition.Value)
                        {
                            if (testDriverData.ItemIndex == null)
                            {
                                testDriverData.Items.Add(item);
                            }
                            else if (!testDriverData.ItemIndex.Contains(item))
                            {
                                testDriverData.Items.Add(item);
                                testDriverData.ItemIndex.Add(item);
                            }
                        }
                    }
                }

                int testDriverCount = testDriverPartitions.Count;

                foreach (var testDriverPartition in testDriverPartitions)
                {
                    TestDriverFactory  testDriverFactory = testDriverPartition.Key;
                    TestDriverData <T> testDriverData    = testDriverPartition.Value;

                    try
                    {
                        ITestDriver driver = testDriverFactory(testDriverData.TestFrameworkHandles,
                                                               testDriverData.TestFrameworkOptions, logger);
                        if (func(driver, testDriverData.Items, testDriverCount))
                        {
                            return(true);
                        }
                    }
                    catch (Exception ex)
                    {
                        //UnhandledExceptionPolicy.Report("An unhandled exception occurred while invoking a test driver.", ex);
                        throw new ModelException("An exception occurred while invoking a test driver.", ex);
                    }
                }

                return(false);
            }