mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-02 01:03:29 +01:00
Fixed RadioGroup
This commit is contained in:
@@ -341,4 +341,46 @@ public class HotKeyTests
|
||||
Assert.Equal ("", view.Title);
|
||||
Assert.Equal (KeyCode.Null, view.HotKey);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void HotKey_Raises_HotKeyCommand ()
|
||||
{
|
||||
var hotKeyRaised = false;
|
||||
var acceptRaised = false;
|
||||
var selectRaised = false;
|
||||
Application.Top = new Toplevel ();
|
||||
var view = new View
|
||||
{
|
||||
CanFocus = true,
|
||||
HotKeySpecifier = new Rune ('_'),
|
||||
Title = "_Test"
|
||||
};
|
||||
Application.Top.Add (view);
|
||||
view.HotKeyCommand += (s, e) => hotKeyRaised = true;
|
||||
view.Accept += (s, e) => acceptRaised = true;
|
||||
view.Select += (s, e) => selectRaised = true;
|
||||
|
||||
Assert.Equal (KeyCode.T, view.HotKey);
|
||||
Assert.False (Application.OnKeyDown (Key.T)); // wasn't handled
|
||||
Assert.True (hotKeyRaised);
|
||||
Assert.False (acceptRaised);
|
||||
Assert.False (selectRaised);
|
||||
|
||||
hotKeyRaised = false;
|
||||
Assert.False (Application.OnKeyDown (Key.T.WithAlt));
|
||||
Assert.True (hotKeyRaised);
|
||||
Assert.False (acceptRaised);
|
||||
Assert.False (selectRaised);
|
||||
|
||||
hotKeyRaised = false;
|
||||
view.HotKey = KeyCode.E;
|
||||
Assert.False (Application.OnKeyDown (Key.E.WithAlt));
|
||||
Assert.True (hotKeyRaised);
|
||||
Assert.False (acceptRaised);
|
||||
Assert.False (selectRaised);
|
||||
|
||||
Application.Top.Dispose ();
|
||||
Application.ResetState (true);
|
||||
}
|
||||
}
|
||||
|
||||
175
UnitTests/View/ViewCommandTests.cs
Normal file
175
UnitTests/View/ViewCommandTests.cs
Normal file
@@ -0,0 +1,175 @@
|
||||
using System.ComponentModel;
|
||||
using System.Text;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewTests;
|
||||
|
||||
public class ViewCommandTests (ITestOutputHelper output)
|
||||
{
|
||||
// OnAccept/Accept tests
|
||||
[Fact]
|
||||
public void Accept_Command_Raises ()
|
||||
{
|
||||
var view = new ViewEventTester ();
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
Assert.False (view.InvokeCommand (Command.Accept)); // false means it was not handled
|
||||
|
||||
Assert.Equal (1, view.OnAcceptCount);
|
||||
|
||||
Assert.Equal (1, view.AcceptCount);
|
||||
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Accept_Command_Handle_OnAccept_NoEvent ()
|
||||
{
|
||||
var view = new ViewEventTester ();
|
||||
Assert.False (view.HasFocus);
|
||||
|
||||
view.HandleOnAccept = true;
|
||||
Assert.True (view.InvokeCommand (Command.Accept));
|
||||
|
||||
Assert.Equal (1, view.OnAcceptCount);
|
||||
|
||||
Assert.Equal (0, view.AcceptCount);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Accept_Handle_Event_OnAccept_Returns_True ()
|
||||
{
|
||||
var view = new View ();
|
||||
var acceptInvoked = false;
|
||||
|
||||
view.Accept += ViewOnAccept;
|
||||
|
||||
bool? ret = view.InvokeCommand (Command.Accept);
|
||||
Assert.True (ret);
|
||||
Assert.True (acceptInvoked);
|
||||
|
||||
return;
|
||||
|
||||
void ViewOnAccept (object sender, HandledEventArgs e)
|
||||
{
|
||||
acceptInvoked = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Accept_Command_Invokes_Accept_Event ()
|
||||
{
|
||||
var view = new View ();
|
||||
var accepted = false;
|
||||
|
||||
view.Accept += ViewOnAccept;
|
||||
|
||||
view.InvokeCommand (Command.Accept);
|
||||
Assert.True (accepted);
|
||||
|
||||
return;
|
||||
|
||||
void ViewOnAccept (object sender, HandledEventArgs e) { accepted = true; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HotKey_Command_SetsFocus ()
|
||||
{
|
||||
var view = new View ();
|
||||
|
||||
view.CanFocus = true;
|
||||
Assert.False (view.HasFocus);
|
||||
view.InvokeCommand (Command.HotKey);
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
|
||||
public class ViewEventTester : View
|
||||
{
|
||||
public ViewEventTester ()
|
||||
{
|
||||
CanFocus = true;
|
||||
|
||||
Accept += (s, a) =>
|
||||
{
|
||||
a.Handled = HandleAccept;
|
||||
AcceptCount++;
|
||||
};
|
||||
|
||||
HotKeyCommand += (s, a) =>
|
||||
{
|
||||
a.Handled = HandleHotKeyCommand;
|
||||
HotKeyCommandCount++;
|
||||
};
|
||||
|
||||
|
||||
Select += (s, a) =>
|
||||
{
|
||||
a.Handled = HandleSelect;
|
||||
SelectCount++;
|
||||
};
|
||||
}
|
||||
|
||||
public int OnAcceptCount { get; set; }
|
||||
public int AcceptCount { get; set; }
|
||||
public bool HandleOnAccept { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnAccept (HandledEventArgs args)
|
||||
{
|
||||
OnAcceptCount++;
|
||||
|
||||
if (!HandleOnAccept)
|
||||
{
|
||||
return base.OnAccept (args);
|
||||
}
|
||||
|
||||
return HandleOnAccept;
|
||||
}
|
||||
|
||||
public bool HandleAccept { get; set; }
|
||||
|
||||
public int OnHotKeyCommandCount { get; set; }
|
||||
public int HotKeyCommandCount { get; set; }
|
||||
public bool HandleOnHotKeyCommand { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnHotKeyCommand (HandledEventArgs args)
|
||||
{
|
||||
OnHotKeyCommandCount++;
|
||||
if (!HandleOnHotKeyCommand)
|
||||
{
|
||||
return base.OnHotKeyCommand (args);
|
||||
}
|
||||
|
||||
|
||||
return HandleOnHotKeyCommand;
|
||||
}
|
||||
|
||||
public bool HandleHotKeyCommand { get; set; }
|
||||
|
||||
|
||||
public int OnSelectCount { get; set; }
|
||||
public int SelectCount { get; set; }
|
||||
public bool HandleOnSelect { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool OnSelect (HandledEventArgs args)
|
||||
{
|
||||
OnSelectCount++;
|
||||
|
||||
if (!HandleOnSelect)
|
||||
{
|
||||
return base.OnSelect (args);
|
||||
}
|
||||
|
||||
return HandleOnSelect;
|
||||
}
|
||||
|
||||
public bool HandleSelect { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -160,7 +160,7 @@ public class ViewTests (ITestOutputHelper output)
|
||||
if (label)
|
||||
{
|
||||
Assert.False (v.CanFocus);
|
||||
Assert.Equal (new (0, 0, text.Length, 1), v.Frame);
|
||||
Assert.Equal (new (0, 0, text.Length, 1), v.Frame);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -469,7 +469,7 @@ At 0,0
|
||||
X = 0, // don't overcomplicate unit tests
|
||||
Y = 1,
|
||||
Height = Dim.Auto (DimAutoStyle.Text),
|
||||
Width = Dim.Auto(DimAutoStyle.Text),
|
||||
Width = Dim.Auto (DimAutoStyle.Text),
|
||||
Text = "Press me!"
|
||||
};
|
||||
|
||||
@@ -783,7 +783,7 @@ At 0,0
|
||||
r.Dispose ();
|
||||
|
||||
// Empty Rect
|
||||
r = new() { Frame = Rectangle.Empty };
|
||||
r = new () { Frame = Rectangle.Empty };
|
||||
Assert.NotNull (r);
|
||||
Assert.Equal ($"View(){r.Viewport}", r.ToString ());
|
||||
Assert.False (r.CanFocus);
|
||||
@@ -807,7 +807,7 @@ At 0,0
|
||||
r.Dispose ();
|
||||
|
||||
// Rect with values
|
||||
r = new() { Frame = new (1, 2, 3, 4) };
|
||||
r = new () { Frame = new (1, 2, 3, 4) };
|
||||
Assert.NotNull (r);
|
||||
Assert.Equal ($"View(){r.Frame}", r.ToString ());
|
||||
Assert.False (r.CanFocus);
|
||||
@@ -831,7 +831,7 @@ At 0,0
|
||||
r.Dispose ();
|
||||
|
||||
// Initializes a view with a vertical direction
|
||||
r = new()
|
||||
r = new ()
|
||||
{
|
||||
Text = "Vertical View",
|
||||
TextDirection = TextDirection.TopBottom_LeftRight,
|
||||
@@ -870,11 +870,11 @@ At 0,0
|
||||
{
|
||||
var r = new View ();
|
||||
|
||||
Assert.False (r.OnKeyDown (new() { KeyCode = KeyCode.Null }));
|
||||
Assert.False (r.OnKeyDown (new () { KeyCode = KeyCode.Null }));
|
||||
|
||||
//Assert.False (r.OnKeyDown (new KeyEventArgs () { Key = Key.Unknown }));
|
||||
Assert.False (r.OnKeyUp (new() { KeyCode = KeyCode.Null }));
|
||||
Assert.False (r.NewMouseEvent (new() { Flags = MouseFlags.AllEvents }));
|
||||
Assert.False (r.OnKeyUp (new () { KeyCode = KeyCode.Null }));
|
||||
Assert.False (r.NewMouseEvent (new () { Flags = MouseFlags.AllEvents }));
|
||||
|
||||
r.Dispose ();
|
||||
|
||||
@@ -960,7 +960,7 @@ At 0,0
|
||||
view.Dispose ();
|
||||
|
||||
// Object Initializer
|
||||
view = new() { X = 1, Y = 2, Text = "" };
|
||||
view = new () { X = 1, Y = 2, Text = "" };
|
||||
Assert.Equal (1, view.X);
|
||||
Assert.Equal (2, view.Y);
|
||||
Assert.Equal (0, view.Width);
|
||||
@@ -975,7 +975,7 @@ At 0,0
|
||||
view.Y = 2;
|
||||
view.Width = 3;
|
||||
view.Height = 4;
|
||||
super = new() { Frame = new (0, 0, 10, 10) };
|
||||
super = new () { Frame = new (0, 0, 10, 10) };
|
||||
super.Add (view);
|
||||
super.BeginInit ();
|
||||
super.EndInit ();
|
||||
@@ -1153,69 +1153,4 @@ At 0,0
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// OnAccept/Accept tests
|
||||
[Fact]
|
||||
public void OnAccept_Fires_Accept ()
|
||||
{
|
||||
var view = new View ();
|
||||
var accepted = false;
|
||||
|
||||
view.Accept += ViewOnAccept;
|
||||
|
||||
view.InvokeCommand (Command.Accept);
|
||||
Assert.True (accepted);
|
||||
|
||||
return;
|
||||
|
||||
void ViewOnAccept (object sender, HandledEventArgs e) { accepted = true; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Accept_Cancel_Event_OnAccept_Returns_True ()
|
||||
{
|
||||
var view = new View ();
|
||||
var acceptInvoked = false;
|
||||
|
||||
view.Accept += ViewOnAccept;
|
||||
|
||||
bool? ret = view.InvokeCommand (Command.Accept);
|
||||
Assert.True (ret);
|
||||
Assert.True (acceptInvoked);
|
||||
|
||||
return;
|
||||
|
||||
void ViewOnAccept (object sender, HandledEventArgs e)
|
||||
{
|
||||
acceptInvoked = true;
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Accept_Command_Invokes_Accept_Event ()
|
||||
{
|
||||
var view = new View ();
|
||||
var accepted = false;
|
||||
|
||||
view.Accept += ViewOnAccept;
|
||||
|
||||
view.InvokeCommand (Command.Accept);
|
||||
Assert.True (accepted);
|
||||
|
||||
return;
|
||||
|
||||
void ViewOnAccept (object sender, HandledEventArgs e) { accepted = true; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HotKey_Command_SetsFocus ()
|
||||
{
|
||||
var view = new View ();
|
||||
|
||||
view.CanFocus = true;
|
||||
Assert.False (view.HasFocus);
|
||||
view.InvokeCommand (Command.HotKey);
|
||||
Assert.True (view.HasFocus);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user