From 962ccc6c0a6eb91f8ae0806c8d7901337d70d1a4 Mon Sep 17 00:00:00 2001 From: BDisp Date: Mon, 17 Apr 2023 16:32:35 +0100 Subject: [PATCH] Fixes #2559. BackgroundWorkerCollection scenario is broken. (#2560) --- Terminal.Gui/Views/ToplevelEventArgs.cs | 6 +-- .../Scenarios/BackgroundWorkerCollection.cs | 4 +- UnitTests/Views/OverlappedTests.cs | 40 +++++++++++-------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Terminal.Gui/Views/ToplevelEventArgs.cs b/Terminal.Gui/Views/ToplevelEventArgs.cs index 727c977a20..36829521fe 100644 --- a/Terminal.Gui/Views/ToplevelEventArgs.cs +++ b/Terminal.Gui/Views/ToplevelEventArgs.cs @@ -9,10 +9,10 @@ public class ToplevelEventArgs : EventArgs { /// /// Creates a new instance of the class. /// - /// - public ToplevelEventArgs (Toplevel Toplevel) + /// + public ToplevelEventArgs (Toplevel toplevel) { - Toplevel = Toplevel; + Toplevel = toplevel; } /// diff --git a/UICatalog/Scenarios/BackgroundWorkerCollection.cs b/UICatalog/Scenarios/BackgroundWorkerCollection.cs index 222bd97993..fb661153b1 100644 --- a/UICatalog/Scenarios/BackgroundWorkerCollection.cs +++ b/UICatalog/Scenarios/BackgroundWorkerCollection.cs @@ -107,7 +107,7 @@ private MenuBarItem View () var top = Application.OverlappedChildren.Find ((x) => x.Data.ToString () == "WorkerApp"); item.Checked = top.Visible = (bool)!item.Checked; if (top.Visible) { - Application.MoveToOverlappedChild (null); + Application.MoveToOverlappedChild (top); } else { Application.OverlappedTop.SetNeedsDisplay (); } @@ -139,7 +139,7 @@ private MenuBarItem OpenedWindows () item.Checked = false; } item.Action += () => { - Application.MoveToOverlappedChild (null); + Application.MoveToOverlappedChild (top); }; menuItems.Add (item); } diff --git a/UnitTests/Views/OverlappedTests.cs b/UnitTests/Views/OverlappedTests.cs index c37ec5a45b..cc1afcc3ad 100644 --- a/UnitTests/Views/OverlappedTests.cs +++ b/UnitTests/Views/OverlappedTests.cs @@ -90,15 +90,15 @@ public void Application_RequestStop_With_Params_On_A_Not_OverlappedContainer_Alw Assert.True (Application.Current == d); }; - d.Closed += (s,e) => Application.RequestStop (top1); + d.Closed += (s, e) => Application.RequestStop (top1); Application.Iteration += () => { Assert.Null (Application.OverlappedChildren); - if (iterations == 4) Assert.True (Application.Current == d); -else if (iterations == 3) Assert.True (Application.Current == top4); -else if (iterations == 2) Assert.True (Application.Current == top3); -else if (iterations == 1) Assert.True (Application.Current == top2); -else Assert.True (Application.Current == top1); + if (iterations == 4) Assert.True (Application.Current == d); + else if (iterations == 3) Assert.True (Application.Current == top4); + else if (iterations == 2) Assert.True (Application.Current == top3); + else if (iterations == 1) Assert.True (Application.Current == top2); + else Assert.True (Application.Current == top1); Application.RequestStop (top1); iterations--; }; @@ -154,7 +154,7 @@ public void OverlappedContainer_With_Toplevel_RequestStop_Balanced () }; // Now this will close the OverlappedContainer propagating through the OverlappedChildren. - d.Closed += (s,e) => { + d.Closed += (s, e) => { overlapped.RequestStop (); }; @@ -165,7 +165,7 @@ public void OverlappedContainer_With_Toplevel_RequestStop_Balanced () Assert.False (d.Running); } else { Assert.Equal (iterations, Application.OverlappedChildren.Count); - for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); + for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); } iterations--; }; @@ -214,7 +214,7 @@ public void OverlappedContainer_With_Application_RequestStop_OverlappedTop_With_ }; // Now this will close the OverlappedContainer propagating through the OverlappedChildren. - d.Closed += (s,e) => Application.RequestStop (overlapped); + d.Closed += (s, e) => Application.RequestStop (overlapped); Application.Iteration += () => { if (iterations == 4) { @@ -223,7 +223,7 @@ public void OverlappedContainer_With_Application_RequestStop_OverlappedTop_With_ Assert.False (d.Running); } else { Assert.Equal (iterations, Application.OverlappedChildren.Count); - for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); + for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); } iterations--; }; @@ -282,7 +282,7 @@ public void OverlappedContainer_With_Application_RequestStop_OverlappedTop_Witho Assert.False (d.Running); } else { Assert.Equal (iterations, Application.OverlappedChildren.Count); - for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); + for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); } iterations--; }; @@ -380,7 +380,7 @@ public void Modal_Toplevel_Can_Open_Another_Modal_Toplevel_But_RequestStop_To_Th Assert.False (Application.Current.Running); } else { Assert.Equal (iterations, Application.OverlappedChildren.Count); - for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); + for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + 1).ToString (), Application.OverlappedChildren [i].Id); } iterations--; }; @@ -447,7 +447,7 @@ public void Modal_Toplevel_Can_Open_Another_Not_Modal_Toplevel_But_RequestStop_T Assert.True (c4.Running); } else { Assert.Equal (iterations, Application.OverlappedChildren.Count); - for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + (iterations == 4 && i == 0 ? 2 : 1)).ToString (), + for (int i = 0; i < iterations; i++) Assert.Equal ((iterations - i + (iterations == 4 && i == 0 ? 2 : 1)).ToString (), Application.OverlappedChildren [i].Id); } iterations--; @@ -570,7 +570,7 @@ public void OverlappedContainer_Open_And_Close_Modal_And_Open_Not_Modal_Toplevel }; stage.Closed += (_, _) => { - if (iterations == 11) allStageClosed = true; + if (iterations == 11) allStageClosed = true; Assert.Equal (iterations, Application.OverlappedChildren.Count); if (running) { stageCompleted = true; @@ -592,12 +592,12 @@ public void OverlappedContainer_Open_And_Close_Modal_And_Open_Not_Modal_Toplevel running = false; Assert.Equal (iterations, Application.OverlappedChildren.Count); - } else if (!overlappedRequestStop && running && !allStageClosed) Assert.Equal (iterations, Application.OverlappedChildren.Count); -else if (!overlappedRequestStop && !running && allStageClosed) { + } else if (!overlappedRequestStop && running && !allStageClosed) Assert.Equal (iterations, Application.OverlappedChildren.Count); + else if (!overlappedRequestStop && !running && allStageClosed) { Assert.Equal (iterations, Application.OverlappedChildren.Count); overlappedRequestStop = true; overlapped.RequestStop (); - } else Assert.Empty (Application.OverlappedChildren); + } else Assert.Empty (Application.OverlappedChildren); }; Application.Run (overlapped); @@ -672,5 +672,11 @@ public void AllChildClosed_Event_Test () Assert.Empty (Application.OverlappedChildren); } + + [Fact] + public void MoveToOverlappedChild_Throw_NullReferenceException_Passing_Null_Parameter () + { + Assert.Throws (delegate { Application.MoveToOverlappedChild (null); }); + } } }