Example #1
0
        /// <inheritdoc/>
        public bool OnMessage(_MessageSinkMessage message)
        {
            Guard.ArgumentNotNull(nameof(message), message);

            if (message is _TestSkipped testSkipped)
            {
                var testFailed = new _TestFailed
                {
                    AssemblyUniqueID       = testSkipped.AssemblyUniqueID,
                    ExceptionParentIndices = new[] { -1 },
                    ExceptionTypes         = new[] { "FAIL_SKIP" },
                    ExecutionTime          = 0m,
                    Messages               = new[] { testSkipped.Reason },
                    Output                 = "",
                    StackTraces            = new[] { "" },
                    TestCaseUniqueID       = testSkipped.TestCaseUniqueID,
                    TestClassUniqueID      = testSkipped.TestClassUniqueID,
                    TestCollectionUniqueID = testSkipped.TestCollectionUniqueID,
                    TestMethodUniqueID     = testSkipped.TestMethodUniqueID,
                    TestUniqueID           = testSkipped.TestUniqueID
                };

                return(innerSink.OnMessage(testFailed));
            }

            // TODO: Shouldn't there be conversions of all the finished messages up the stack, to rectify the counts?

            if (message is _TestCollectionFinished testCollectionFinished)
            {
                testCollectionFinished = new _TestCollectionFinished
                {
                    AssemblyUniqueID       = testCollectionFinished.AssemblyUniqueID,
                    ExecutionTime          = testCollectionFinished.ExecutionTime,
                    TestCollectionUniqueID = testCollectionFinished.TestCollectionUniqueID,
                    TestsFailed            = testCollectionFinished.TestsFailed + testCollectionFinished.TestsSkipped,
                    TestsRun     = testCollectionFinished.TestsRun,
                    TestsSkipped = 0
                };

                return(innerSink.OnMessage(testCollectionFinished));
            }

            if (message is _TestAssemblyFinished assemblyFinished)
            {
                assemblyFinished = new _TestAssemblyFinished
                {
                    AssemblyUniqueID = assemblyFinished.AssemblyUniqueID,
                    ExecutionTime    = assemblyFinished.ExecutionTime,
                    TestsFailed      = assemblyFinished.TestsFailed + assemblyFinished.TestsSkipped,
                    TestsRun         = assemblyFinished.TestsRun,
                    TestsSkipped     = 0
                };

                return(innerSink.OnMessage(assemblyFinished));
            }

            return(innerSink.OnMessage(message));
        }
Example #2
0
        Xunit1RunSummary RunTestCollection(
            IList <Xunit1TestCase> testCases,
            _IMessageSink messageSink)
        {
            Guard.ArgumentValid(nameof(testCases), "testCases must contain at least one test case", testCases.Count > 0);

            var collectionStarting = new _TestCollectionStarting
            {
                AssemblyUniqueID          = testCases[0].AssemblyUniqueID,
                TestCollectionClass       = null,
                TestCollectionDisplayName = $"xUnit.net v1 Tests for {assemblyFileName}",
                TestCollectionUniqueID    = testCases[0].TestCollectionUniqueID
            };

            var results = new Xunit1RunSummary
            {
                Continue = messageSink.OnMessage(collectionStarting)
            };

            try
            {
                if (results.Continue)
                {
                    foreach (var testClassGroup in testCases.GroupBy(tc => tc.TestClass))
                    {
                        var classResults = RunTestClass(testClassGroup.Key, testClassGroup.ToList(), messageSink);
                        results.Aggregate(classResults);
                        if (!classResults.Continue)
                        {
                            break;
                        }
                    }
                }
            }
            finally
            {
                var collectionFinished = new _TestCollectionFinished
                {
                    AssemblyUniqueID       = collectionStarting.AssemblyUniqueID,
                    ExecutionTime          = results.Time,
                    TestCollectionUniqueID = collectionStarting.TestCollectionUniqueID,
                    TestsFailed            = results.Failed,
                    TestsRun     = results.Total,
                    TestsSkipped = results.Skipped
                };

                results.Continue = messageSink.OnMessage(collectionFinished) && results.Continue;
            }

            return(results);
        }
Example #3
0
    /// <summary>
    /// Runs the tests in the test collection.
    /// </summary>
    /// <param name="ctxt">The context that describes the current test collection</param>
    /// <returns>Returns summary information about the tests that were run.</returns>
    protected async ValueTask <RunSummary> RunAsync(TContext ctxt)
    {
        await ctxt.InitializeAsync();

        try
        {
            SetTestContext(ctxt, TestEngineStatus.Initializing);

            var collectionSummary      = new RunSummary();
            var testAssemblyUniqueID   = ctxt.TestCollection.TestAssembly.UniqueID;
            var testCollectionUniqueID = ctxt.TestCollection.UniqueID;

            var collectionStarting = new _TestCollectionStarting
            {
                AssemblyUniqueID          = testAssemblyUniqueID,
                TestCollectionClass       = ctxt.TestCollection.CollectionDefinition?.Name,
                TestCollectionDisplayName = ctxt.TestCollection.DisplayName,
                TestCollectionUniqueID    = testCollectionUniqueID
            };

            if (!ctxt.MessageBus.QueueMessage(collectionStarting))
            {
                ctxt.CancellationTokenSource.Cancel();
            }
            else
            {
                try
                {
                    await AfterTestCollectionStartingAsync(ctxt);

                    SetTestContext(ctxt, TestEngineStatus.Running);

                    collectionSummary = await RunTestClassesAsync(ctxt);

                    SetTestContext(ctxt, TestEngineStatus.CleaningUp);

                    ctxt.Aggregator.Clear();
                    await BeforeTestCollectionFinishedAsync(ctxt);

                    if (ctxt.Aggregator.HasExceptions)
                    {
                        var collectionCleanupFailure = _TestCollectionCleanupFailure.FromException(ctxt.Aggregator.ToException() !, testAssemblyUniqueID, testCollectionUniqueID);
                        if (!ctxt.MessageBus.QueueMessage(collectionCleanupFailure))
                        {
                            ctxt.CancellationTokenSource.Cancel();
                        }
                    }
                }
                finally
                {
                    var collectionFinished = new _TestCollectionFinished
                    {
                        AssemblyUniqueID       = testAssemblyUniqueID,
                        ExecutionTime          = collectionSummary.Time,
                        TestCollectionUniqueID = testCollectionUniqueID,
                        TestsFailed            = collectionSummary.Failed,
                        TestsRun     = collectionSummary.Total,
                        TestsSkipped = collectionSummary.Skipped
                    };

                    if (!ctxt.MessageBus.QueueMessage(collectionFinished))
                    {
                        ctxt.CancellationTokenSource.Cancel();
                    }
                }
            }

            return(collectionSummary);
        }
        finally
        {
            await ctxt.DisposeAsync();
        }
    }