Skip to content

Commit

Permalink
Fixes #2559. BackgroundWorkerCollection scenario is broken. (#2560)
Browse files Browse the repository at this point in the history
  • Loading branch information
BDisp authored Apr 17, 2023
1 parent 1bc2590 commit 962ccc6
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 22 deletions.
6 changes: 3 additions & 3 deletions Terminal.Gui/Views/ToplevelEventArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ public class ToplevelEventArgs : EventArgs {
/// <summary>
/// Creates a new instance of the <see cref="ToplevelClosingEventArgs"/> class.
/// </summary>
/// <param name="Toplevel"></param>
public ToplevelEventArgs (Toplevel Toplevel)
/// <param name="toplevel"></param>
public ToplevelEventArgs (Toplevel toplevel)
{
Toplevel = Toplevel;
Toplevel = toplevel;
}

/// <summary>
Expand Down
4 changes: 2 additions & 2 deletions UICatalog/Scenarios/BackgroundWorkerCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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 ();
}
Expand Down Expand Up @@ -139,7 +139,7 @@ private MenuBarItem OpenedWindows ()
item.Checked = false;
}
item.Action += () => {
Application.MoveToOverlappedChild (null);
Application.MoveToOverlappedChild (top);
};
menuItems.Add (item);
}
Expand Down
40 changes: 23 additions & 17 deletions UnitTests/Views/OverlappedTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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--;
};
Expand Down Expand Up @@ -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 ();
};

Expand All @@ -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--;
};
Expand Down Expand Up @@ -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) {
Expand All @@ -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--;
};
Expand Down Expand Up @@ -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--;
};
Expand Down Expand Up @@ -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--;
};
Expand Down Expand Up @@ -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--;
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -672,5 +672,11 @@ public void AllChildClosed_Event_Test ()

Assert.Empty (Application.OverlappedChildren);
}

[Fact]
public void MoveToOverlappedChild_Throw_NullReferenceException_Passing_Null_Parameter ()
{
Assert.Throws<NullReferenceException> (delegate { Application.MoveToOverlappedChild (null); });
}
}
}

0 comments on commit 962ccc6

Please sign in to comment.