File: XUnit\SkippedTestMessageBus.cs
Web Access
Project: src\test\TestUtilities\TestUtilities.csproj (Microsoft.TestUtilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Linq;
using Xunit.Abstractions;
using Xunit.Sdk;
 
namespace Microsoft.TestUtilities;
 
/// <summary>Implements message bus to communicate tests skipped via SkipTestException.</summary>
public sealed class SkippedTestMessageBus : IMessageBus
{
    private readonly IMessageBus _innerBus;
 
    public SkippedTestMessageBus(IMessageBus innerBus)
    {
        _innerBus = innerBus;
    }
 
    public int SkippedTestCount { get; private set; }
 
    public void Dispose()
    {
        // nothing to dispose
    }
 
    public bool QueueMessage(IMessageSinkMessage message)
    {
        var testFailed = message as ITestFailed;
 
        if (testFailed != null)
        {
            var exceptionType = testFailed.ExceptionTypes.FirstOrDefault();
            if (exceptionType == typeof(SkipTestException).FullName)
            {
                SkippedTestCount++;
                return _innerBus.QueueMessage(new TestSkipped(testFailed.Test, testFailed.Messages.FirstOrDefault()));
            }
        }
 
        // Nothing we care about, send it on its way
        return _innerBus.QueueMessage(message);
    }
}