From 4f635ffab480224a99e933df5b376c9cab553e19 Mon Sep 17 00:00:00 2001 From: BDisp Date: Tue, 15 Aug 2023 17:03:39 +0100 Subject: [PATCH] Add unit test to use the Enter and Leave events between two views on two toplevels. --- UnitTests/TopLevels/ToplevelTests.cs | 57 ++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/UnitTests/TopLevels/ToplevelTests.cs b/UnitTests/TopLevels/ToplevelTests.cs index db3921d07..10316b92e 100644 --- a/UnitTests/TopLevels/ToplevelTests.cs +++ b/UnitTests/TopLevels/ToplevelTests.cs @@ -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 () {