Files
Terminal.Gui/Tests/UnitTests/View/ViewCommandTests.cs
Tig acb5979e6c Cleans up/Refactors View.Subviews (#3962)
* Subview clean up

* New Add/Remove event pattern

* Using Logging

* cleanup

* Subview -> SubView

* Test code cleanup. Killed many warnings.

* Fix tznind feedback

* Refactored AllViewTest helpers

* Moved keyboard tests to parallel

* Moved mouse tests to parallel

* Moved view tests to parallel

* Test code cleanup. Killed many warnings.

* dupe test

* Some mouse tests can't run in parallel because MouseGrabView

* Made SpinnerView more testable

* Moved more tests

* SubViews to IReadOnlyCollection<View>

* SubViews to IReadOnlyCollection<View> 2

* scrollbar tests

* shortcut tests

* Use InternalSubViews vs. _subviews

* Nuked View.IsAdded.
Added View.SuperViewChanged.

* API doc updats

* Unit Test tweak

* Unit Test tweak
2025-03-08 15:42:17 -07:00

156 lines
4.7 KiB
C#

namespace Terminal.Gui.ViewTests;
public class ViewCommandTests
{
// See https://github.com/gui-cs/Terminal.Gui/issues/3913
[Fact]
public void Button_IsDefault_Raises_Accepted_Correctly ()
{
int aAcceptedCount = 0;
bool aCancelAccepting = false;
int bAcceptedCount = 0;
bool bCancelAccepting = false;
var w = new Window ()
{
BorderStyle = LineStyle.None,
Width = 10,
Height = 10
};
var btnA = new Button ()
{
Width = 3,
IsDefault = true
};
btnA.Accepting += (s, e) =>
{
aAcceptedCount++;
e.Cancel = aCancelAccepting;
};
var btnB = new Button ()
{
Width = 3,
X = Pos.Right (btnA)
};
btnB.Accepting += (s, e) =>
{
bAcceptedCount++;
e.Cancel = bCancelAccepting;
};
w.Add (btnA, btnB);
w.LayoutSubViews ();
Application.Top = w;
Application.TopLevels.Push(w);
Assert.Same (Application.Top, w);
// Click button 2
var btn2Frame = btnB.FrameToScreen ();
Application.RaiseMouseEvent (
new MouseEventArgs ()
{
ScreenPosition = btn2Frame.Location,
Flags = MouseFlags.Button1Clicked
});
// Button A should have been accepted because B didn't cancel and A IsDefault
Assert.Equal (1, aAcceptedCount);
Assert.Equal (1, bAcceptedCount);
bCancelAccepting = true;
Application.RaiseMouseEvent (
new MouseEventArgs ()
{
ScreenPosition = btn2Frame.Location,
Flags = MouseFlags.Button1Clicked
});
// Button A (IsDefault) should NOT have been accepted because B canceled
Assert.Equal (1, aAcceptedCount);
Assert.Equal (2, bAcceptedCount);
Application.ResetState (true);
}
// See: https://github.com/gui-cs/Terminal.Gui/issues/3905
[Fact]
public void Button_CanFocus_False_Raises_Accepted_Correctly ()
{
int wAcceptedCount = 0;
bool wCancelAccepting = false;
var w = new Window ()
{
Title = "Window",
BorderStyle = LineStyle.None,
Width = 10,
Height = 10
};
w.Accepting += (s, e) =>
{
wAcceptedCount++;
e.Cancel = wCancelAccepting;
};
int btnAcceptedCount = 0;
bool btnCancelAccepting = false;
var btn = new Button ()
{
Title = "Button",
Width = 3,
IsDefault = true,
};
btn.CanFocus = true;
btn.Accepting += (s, e) =>
{
btnAcceptedCount++;
e.Cancel = btnCancelAccepting;
};
w.Add (btn);
Application.Top = w;
Application.TopLevels.Push (w);
Assert.Same (Application.Top, w);
w.LayoutSubViews ();
// Click button just like a driver would
var btnFrame = btn.FrameToScreen ();
Application.RaiseMouseEvent (
new MouseEventArgs ()
{
ScreenPosition = btnFrame.Location,
Flags = MouseFlags.Button1Pressed
});
Application.RaiseMouseEvent (
new MouseEventArgs ()
{
ScreenPosition = btnFrame.Location,
Flags = MouseFlags.Button1Released
});
Application.RaiseMouseEvent (
new MouseEventArgs ()
{
ScreenPosition = btnFrame.Location,
Flags = MouseFlags.Button1Clicked
});
Assert.Equal (1, btnAcceptedCount);
Assert.Equal (2, wAcceptedCount);
Application.ResetState (true);
}
}