/// <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());
        }
Пример #2
0
        /// <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());
        }
Пример #3
0
        /// <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());
        }