/// <summary> /// Orders the test collections using the TestCollectionOrderer. /// </summary> /// <returns>Test collections (and the associated test cases) in run order</returns> private List <Tuple <VsixTestCollection, List <IXunitTestCase> > > CreateTestCollections(IEnumerable <VsixTestCase> vsixTests) { var collections = new ConcurrentDictionary <string, ITestCollection>(); var testCases = from tc in vsixTests.OfType <VsixTestCase>() // For NewIdeInstance tests, every test case is its own new collection that will // run in parallel with the rest. Otherwise, it's a combination of VS + Suffix. let key = tc.NewIdeInstance.GetValueOrDefault() ? Guid.NewGuid().ToString() : tc.VisualStudioVersion + tc.RootSuffix let col = collections.GetOrAdd(key, x => new VsixTestCollection( TestAssembly, tc.TestMethod?.TestClass?.Class, tc.VisualStudioVersion, tc.RootSuffix)) select new { Collection = col, Test = tc }; var testCasesByCollection = testCases.GroupBy(tc => tc.Collection, TestCollectionComparer.Instance) .ToDictionary(group => group.Key, group => group.Select(x => (IXunitTestCase)x.Test).ToList()); IEnumerable <ITestCollection> orderedTestCollections; try { orderedTestCollections = TestCollectionOrderer.OrderTestCollections(testCasesByCollection.Keys); } catch (Exception ex) { var innerEx = ex.Unwrap(); DiagnosticMessageSink.OnMessage(new DiagnosticMessage("Test collection orderer '{0}' threw '{1}' during ordering: {2}", TestCollectionOrderer.GetType().FullName, innerEx.GetType().FullName, innerEx.StackTrace)); orderedTestCollections = testCasesByCollection.Keys.ToList(); } return(orderedTestCollections .OfType <VsixTestCollection>() .Select(collection => Tuple.Create(collection, testCasesByCollection[collection])) .ToList()); }
/// <summary> /// Orders the test collections using the <see cref="TestCollectionOrderer"/>. /// </summary> /// <returns>Test collections (and the associated test cases) in run order</returns> protected List <Tuple <ITestCollection, List <TTestCase> > > OrderTestCases() { var testCasesByCollection = TestCases.GroupBy(tc => tc.TestMethod.TestClass.TestCollection, TestCollectionComparer.Instance) .ToDictionary(collectionGroup => collectionGroup.Key, collectionGroup => collectionGroup.ToList()); var orderedTestCollections = TestCollectionOrderer.OrderTestCollections(testCasesByCollection.Keys); return(orderedTestCollections.Select(collection => Tuple.Create(collection, testCasesByCollection[collection])) .ToList()); }
/// <summary> /// Orders the test collections using the <see cref="TestCollectionOrderer"/>. /// </summary> /// <returns>Test collections (and the associated test cases) in run order</returns> protected List <Tuple <ITestCollection, List <TTestCase> > > OrderTestCollections() { var testCasesByCollection = TestCases.GroupBy(tc => tc.TestMethod.TestClass.TestCollection, TestCollectionComparer.Instance) .ToDictionary(collectionGroup => collectionGroup.Key, collectionGroup => collectionGroup.ToList()); IEnumerable <ITestCollection> orderedTestCollections; try { orderedTestCollections = TestCollectionOrderer.OrderTestCollections(testCasesByCollection.Keys); } catch (Exception ex) { var innerEx = ex.Unwrap(); DiagnosticMessageSink.OnMessage(new DiagnosticMessage("Test collection orderer '{0}' threw '{1}' during ordering: {2}", TestCollectionOrderer.GetType().FullName, innerEx.GetType().FullName, innerEx.StackTrace)); orderedTestCollections = testCasesByCollection.Keys.ToList(); } return(orderedTestCollections.Select(collection => Tuple.Create(collection, testCasesByCollection[collection])) .ToList()); }