mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
* Fixed #3905, #3918 * Tweaked Generic * Label code cleanup * Clean up. * Clean up. * Clean up2.
This commit is contained in:
@@ -10,7 +10,7 @@ public class ViewCommandTests
|
||||
var view = new ViewEventTester ();
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
Assert.False (view.InvokeCommand (Command.Accept)); // false means it was not handled
|
||||
Assert.False (view.InvokeCommand (Command.Accept)); // there's no superview, so it should return true?
|
||||
|
||||
Assert.Equal (1, view.OnAcceptedCount);
|
||||
|
||||
@@ -124,6 +124,148 @@ public class ViewCommandTests
|
||||
Assert.Equal (0, view.OnAcceptedCount);
|
||||
}
|
||||
|
||||
// See https://github.com/gui-cs/Terminal.Gui/issues/3913
|
||||
[Fact]
|
||||
public void Button_IsDefault_Raises_Accepted_Correctly ()
|
||||
{
|
||||
int A_AcceptedCount = 0;
|
||||
bool A_CancelAccepting = false;
|
||||
|
||||
int B_AcceptedCount = 0;
|
||||
bool B_CancelAccepting = false;
|
||||
|
||||
var w = new Window ()
|
||||
{
|
||||
BorderStyle = LineStyle.None,
|
||||
Width = 10,
|
||||
Height = 10
|
||||
};
|
||||
|
||||
var btnA = new Button ()
|
||||
{
|
||||
Width = 3,
|
||||
IsDefault = true
|
||||
};
|
||||
btnA.Accepting += (s, e) =>
|
||||
{
|
||||
A_AcceptedCount++;
|
||||
e.Cancel = A_CancelAccepting;
|
||||
};
|
||||
|
||||
var btnB = new Button ()
|
||||
{
|
||||
Width = 3,
|
||||
X = Pos.Right (btnA)
|
||||
};
|
||||
|
||||
btnB.Accepting += (s, e) =>
|
||||
{
|
||||
B_AcceptedCount++;
|
||||
e.Cancel = B_CancelAccepting;
|
||||
};
|
||||
w.Add (btnA, btnB);
|
||||
|
||||
w.LayoutSubviews ();
|
||||
|
||||
Application.Begin (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, A_AcceptedCount);
|
||||
Assert.Equal (1, B_AcceptedCount);
|
||||
|
||||
B_CancelAccepting = 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, A_AcceptedCount);
|
||||
Assert.Equal (2, B_AcceptedCount);
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
w.LayoutSubviews ();
|
||||
|
||||
Application.Begin (w);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
#endregion OnAccept/Accept tests
|
||||
|
||||
#region OnSelect/Select tests
|
||||
@@ -140,7 +282,7 @@ public class ViewCommandTests
|
||||
Assert.Equal (canFocus, view.CanFocus);
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
Assert.Equal (canFocus, view.InvokeCommand (Command.Select));
|
||||
view.InvokeCommand (Command.Select);
|
||||
|
||||
Assert.Equal (1, view.OnSelectingCount);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.ComponentModel;
|
||||
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewsTests;
|
||||
@@ -30,11 +31,13 @@ public class LabelTests (ITestOutputHelper output)
|
||||
Assert.Equal ("Hello", label.TitleTextFormatter.Text);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HotKey_Command_SetsFocus_OnNextSubview ()
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void HotKey_Command_SetsFocus_OnNextSubview (bool hasHotKey)
|
||||
{
|
||||
var superView = new View { CanFocus = true };
|
||||
var label = new Label ();
|
||||
label.HotKey = hasHotKey ? Key.A.WithAlt : Key.Empty;
|
||||
var nextSubview = new View { CanFocus = true };
|
||||
superView.Add (label, nextSubview);
|
||||
superView.BeginInit ();
|
||||
@@ -45,15 +48,18 @@ public class LabelTests (ITestOutputHelper output)
|
||||
|
||||
label.InvokeCommand (Command.HotKey);
|
||||
Assert.False (label.HasFocus);
|
||||
Assert.True (nextSubview.HasFocus);
|
||||
Assert.Equal (hasHotKey, nextSubview.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MouseClick_SetsFocus_OnNextSubview ()
|
||||
[Theory]
|
||||
[CombinatorialData]
|
||||
public void MouseClick_SetsFocus_OnNextSubview (bool hasHotKey)
|
||||
{
|
||||
var superView = new View { CanFocus = true, Height = 1, Width = 15 };
|
||||
var focusedView = new View { CanFocus = true, Width = 1, Height = 1 };
|
||||
var label = new Label { X = 2, Title = "_x" };
|
||||
var label = new Label { X = 2 };
|
||||
label.HotKey = hasHotKey ? Key.X.WithAlt : Key.Empty;
|
||||
|
||||
var nextSubview = new View { CanFocus = true, X = 4, Width = 4, Height = 1 };
|
||||
superView.Add (focusedView, label, nextSubview);
|
||||
superView.BeginInit ();
|
||||
@@ -65,7 +71,7 @@ public class LabelTests (ITestOutputHelper output)
|
||||
|
||||
label.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
|
||||
Assert.False (label.HasFocus);
|
||||
Assert.True (nextSubview.HasFocus);
|
||||
Assert.Equal (hasHotKey, nextSubview.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user