using System.Drawing;
using TerminalGuiFluentTesting;
using TerminalGuiFluentTestingXunit;
using Xunit.Abstractions;
namespace IntegrationTests.FluentTests;
///
/// Basic tests for GuiTestContext functionality including constructor, lifecycle, and resize operations.
///
public class GuiTestContextTests (ITestOutputHelper outputHelper)
{
private readonly TextWriter _out = new TestOutputWriter (outputHelper);
[Theory]
[ClassData (typeof (TestDrivers))]
public void Constructor_Sets_Application_Screen (TestDriver d)
{
using var context = new GuiTestContext (d, _out, TimeSpan.FromSeconds (10));
Assert.NotEqual (Rectangle.Empty, context.App?.Screen);
}
[Theory]
[ClassData (typeof (TestDrivers))]
public void ResizeConsole_Resizes (TestDriver d)
{
var lbl = new Label
{
Width = Dim.Fill ()
};
using GuiTestContext c = With.A (40, 10, d)
.Add (lbl)
.AssertEqual (38, lbl.Frame.Width) // Window has 2 border
.ResizeConsole (20, 20)
.WaitIteration ()
.AssertEqual (18, lbl.Frame.Width);
}
[Theory]
[ClassData (typeof (TestDrivers))]
public void With_New_A_Runs (TestDriver d)
{
using GuiTestContext context = With.A (40, 10, d, _out);
Assert.True (context.App!.TopRunnable!.Running);
Assert.NotEqual (Rectangle.Empty, context.App!.Screen);
}
[Theory]
[ClassData (typeof (TestDrivers))]
public void AnsiScreenShot_Renders_Ansi_Stream (TestDriver d)
{
using GuiTestContext context = With.A (10, 3, d, _out)
.Then ((app) =>
{
app.TopRunnable!.BorderStyle = LineStyle.None;
app.TopRunnable!.Border!.Thickness = Thickness.Empty;
app.TopRunnable.Text = "hello";
})
.ScreenShot ("ScreenShot", _out)
.AnsiScreenShot ("AnsiScreenShot", _out)
;
}
[Theory]
[ClassData (typeof (TestDrivers))]
public void With_Starts_Stops_Without_Error (TestDriver d)
{
using GuiTestContext context = With.A (40, 10, d, _out);
// No actual assertions are needed — if no exceptions are thrown, it's working
}
[Theory]
[ClassData (typeof (TestDrivers))]
public void With_Without_Stop_Still_Cleans_Up (TestDriver d)
{
GuiTestContext? context;
using (context = With.A (40, 10, d, _out))
{
Assert.False (context.Finished);
}
Assert.True (context.Finished);
}
}