File: AbstractIntegrationTest.cs
Web Access
Project: src\src\Razor\src\Razor\test\Microsoft.VisualStudio.Razor.IntegrationTests\Microsoft.VisualStudio.Razor.IntegrationTests.csproj (Microsoft.VisualStudio.Razor.IntegrationTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Threading;
using Microsoft.AspNetCore.Razor.Test.Common;
using Microsoft.VisualStudio.Extensibility.Testing;
using Xunit;
using Xunit.Sdk;
using Task = System.Threading.Tasks.Task;
 
namespace Microsoft.VisualStudio.Razor.IntegrationTests;
 
// TODO: Start collecting LogFiles on failure
 
/// <remarks>
/// The following is the xunit execution order:
///
/// <list type="number">
/// <item><description>Instance constructor</description></item>
/// <item><description><see cref="IAsyncLifetime.InitializeAsync"/></description></item>
/// <item><description><see cref="BeforeAfterTestAttribute.Before"/></description></item>
/// <item><description>Test method</description></item>
/// <item><description><see cref="BeforeAfterTestAttribute.After"/></description></item>
/// <item><description><see cref="IAsyncLifetime.DisposeAsync"/></description></item>
/// <item><description><see cref="IDisposable.Dispose"/></description></item>
/// </list>
/// </remarks>
[IdeSettings(MinVersion = VisualStudioVersion.VS18, RootSuffix = "RoslynDev", MaxAttempts = 2)]
public abstract class AbstractIntegrationTest : AbstractIdeIntegrationTest
{
    protected CancellationToken ControlledHangMitigatingCancellationToken => HangMitigatingCancellationToken;
 
    protected virtual bool AllowDebugFails => false;
 
    public override async Task InitializeAsync()
    {
        // Not sure why the module initializer doesn't seem to work for integration tests
        ThrowingTraceListener.Initialize();
 
        await base.InitializeAsync();
    }
 
    public override void Dispose()
    {
        if (!AllowDebugFails)
        {
            var fails = ThrowingTraceListener.Fails;
            Assert.False(fails.Length > 0, $"""
                Expected 0 Debug.Fail calls. Actual:
                {string.Join(Environment.NewLine, fails)}
                """);
        }
 
        base.Dispose();
    }
}