#nullable enable
using System.Diagnostics;
using System.Reflection;
using JetBrains.Annotations;
using TerminalGuiFluentTesting;
using Xunit.Sdk;
namespace UnitTests;
///
/// Enables test functions annotated with the [SetupFakeDriver] attribute to set Application.Driver to new
/// FakeDriver(). The driver is set up with 80 rows and 25 columns.
///
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)]
public class SetupFakeApplicationAttribute : BeforeAfterTestAttribute
{
private IDisposable? _appDispose = null!;
public override void Before (MethodInfo methodUnderTest)
{
Debug.WriteLine ($"Before: {methodUnderTest.Name}");
_appDispose?.Dispose ();
var appFactory = new FakeApplicationFactory ();
_appDispose = appFactory.SetupFakeApplication ();
base.Before (methodUnderTest);
}
public override void After (MethodInfo methodUnderTest)
{
Debug.WriteLine ($"After: {methodUnderTest.Name}");
_appDispose?.Dispose ();
_appDispose = null;
// TODO: This is troublesome; it seems to cause tests to hang when enabled, but shouldn't have any impact.
// TODO: Uncomment after investigation.
//ApplicationImpl.SetInstance (null);
base.After (methodUnderTest);
}
///
/// Runs a single iteration of the main loop (layout, draw, run timed events etc.)
///
public static void RunIteration () { ((ApplicationImpl)ApplicationImpl.Instance).Coordinator?.RunIteration (); }
}