Add unit test to use the Enter and Leave events between two views on two toplevels.

This commit is contained in:
BDisp
2023-08-15 17:03:39 +01:00
parent de909b86cd
commit 4f635ffab4

View File

@@ -1013,6 +1013,63 @@ namespace Terminal.Gui.TopLevelTests {
Assert.True (v.HasFocus);
}
[Fact, AutoInitShutdown]
public void OnEnter_OnLeave_Triggered_On_Application_Begin_End_With_More_Toplevels ()
{
var isEnterTop = false;
var isLeaveTop = false;
var vt = new View ();
vt.Enter += (_) => isEnterTop = true;
vt.Leave += (_) => isLeaveTop = true;
var top = Application.Top;
top.Add (vt);
Assert.False (vt.CanFocus);
var exception = Record.Exception (() => top.OnEnter (top));
Assert.Null (exception);
exception = Record.Exception (() => top.OnLeave (top));
Assert.Null (exception);
vt.CanFocus = true;
Application.Begin (top);
Assert.True (isEnterTop);
Assert.False (isLeaveTop);
isEnterTop = false;
var isEnterDiag = false;
var isLeaveDiag = false;
var vd = new View ();
vd.Enter += (_) => isEnterDiag = true;
vd.Leave += (_) => isLeaveDiag = true;
var d = new Dialog ();
d.Add (vd);
Assert.False (vd.CanFocus);
exception = Record.Exception (() => d.OnEnter (d));
Assert.Null (exception);
exception = Record.Exception (() => d.OnLeave (d));
Assert.Null (exception);
vd.CanFocus = true;
var rs = Application.Begin (d);
Assert.True (isEnterDiag);
Assert.False (isLeaveDiag);
Assert.False (isEnterTop);
Assert.True (isLeaveTop);
isEnterDiag = false;
isLeaveTop = false;
Application.End (rs);
Assert.False (isEnterDiag);
Assert.True (isLeaveDiag);
Assert.True (isEnterTop);
Assert.False (isLeaveTop); // Leave event cannot be trigger because it v.Enter was performed and v is focused
Assert.True (vt.HasFocus);
}
[Fact, AutoInitShutdown]
public void PositionCursor_SetCursorVisibility_To_Invisible_If_Focused_Is_Null ()
{