namespace UnitTests.ApplicationTests;
/// These tests focus on Application.SessionToken and the various ways it can be changed.
public class SessionTokenTests
{
public SessionTokenTests ()
{
#if DEBUG_IDISPOSABLE
View.EnableDebugIDisposableAsserts = true;
View.Instances.Clear ();
SessionToken.Instances.Clear ();
#endif
}
[Fact]
[AutoInitShutdown]
public void Begin_End_Cleans_Up_SessionToken ()
{
// Test null Toplevel
Assert.Throws (() => Application.Begin (null));
var top = new Toplevel ();
SessionToken rs = Application.Begin (top);
Assert.NotNull (rs);
Application.End (rs);
Assert.NotNull (Application.Top);
// v2 does not use main loop, it uses MainLoop and its internal
//Assert.NotNull (Application.MainLoop);
Assert.NotNull (Application.Driver);
top.Dispose ();
#if DEBUG_IDISPOSABLE
Assert.True (rs.WasDisposed);
#endif
}
[Fact]
public void Dispose_Cleans_Up_SessionToken ()
{
var rs = new SessionToken (null);
Assert.NotNull (rs);
// Should not throw because Toplevel was null
rs.Dispose ();
#if DEBUG_IDISPOSABLE
Assert.True (rs.WasDisposed);
#endif
var top = new Toplevel ();
rs = new (top);
Assert.NotNull (rs);
// Should throw because Toplevel was not cleaned up
Assert.Throws (() => rs.Dispose ());
rs.Toplevel.Dispose ();
rs.Toplevel = null;
rs.Dispose ();
#if DEBUG_IDISPOSABLE
Assert.True (rs.WasDisposed);
Assert.True (top.WasDisposed);
#endif
}
[Fact]
public void New_Creates_SessionToken ()
{
var rs = new SessionToken (null);
Assert.Null (rs.Toplevel);
var top = new Toplevel ();
rs = new (top);
Assert.Equal (top, rs.Toplevel);
}
}