using System.Drawing;
using TerminalGuiFluentTesting;
namespace Terminal.Gui.Drivers;
#pragma warning disable CS1591
public class FakeApplicationFactory
{
///
/// Creates an initialized fake application which will be cleaned up when result object
/// is disposed.
///
///
public IDisposable SetupFakeApplication ()
{
var cts = new CancellationTokenSource ();
var fakeInput = new FakeNetInput (cts.Token);
FakeOutput output = new ();
output.Size = new (80, 25);
IApplication origApp = ApplicationImpl.Instance;
var sizeMonitor = new FakeSizeMonitor (output, output.LastBuffer!);
var impl = new ApplicationImpl (new FakeNetComponentFactory (fakeInput, output, sizeMonitor));
ApplicationImpl.ChangeInstance (impl);
// Initialize with a fake driver
impl.Init (null, "fake");
// Handle different facade types - cast to common interface instead
var d = (IConsoleDriverFacade)Application.Driver!;
sizeMonitor.SizeChanged += (_, e) =>
{
if (e.Size != null)
{
Size s = e.Size.Value;
output.Size = s;
d.OutputBuffer.SetSize (s.Width, s.Height);
}
};
return new FakeApplicationLifecycle (origApp, cts);
}
}