From ee85ddf141e0686fbbe2ec496fbfccb4437069d2 Mon Sep 17 00:00:00 2001 From: tznind Date: Mon, 21 Nov 2022 16:33:23 +0000 Subject: [PATCH] Add unit test for Leave event changing focus --- UnitTests/ViewTests.cs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/UnitTests/ViewTests.cs b/UnitTests/ViewTests.cs index e2a20e80b..d569a0b5f 100644 --- a/UnitTests/ViewTests.cs +++ b/UnitTests/ViewTests.cs @@ -4062,5 +4062,38 @@ This is a tes Assert.False (view.IsKeyPress); Assert.True (view.IsKeyUp); } + + [Fact, AutoInitShutdown] + public void SetHasFocus_Do_Not_Throws_If_OnLeave_Remove_Focused_Changing_To_Null () + { + var view1Leave = false; + var subView1Leave = false; + var subView1subView1Leave = false; + var top = Application.Top; + var view1 = new View { CanFocus = true }; + var subView1 = new View { CanFocus = true }; + var subView1subView1 = new View { CanFocus = true }; + view1.Leave += (e) => { + view1Leave = true; + }; + subView1.Leave += (e) => { + subView1.Remove (subView1subView1); + subView1Leave = true; + }; + view1.Add (subView1); + subView1subView1.Leave += (e) => { + // This is never invoked + subView1subView1Leave = true; + }; + subView1.Add (subView1subView1); + var view2 = new View { CanFocus = true }; + top.Add (view1, view2); + Application.Begin (top); + + view2.SetFocus (); + Assert.True (view1Leave); + Assert.True (subView1Leave); + Assert.False (subView1subView1Leave); + } } }