| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- namespace Terminal.Gui.ViewsTests;
- /// <summary>
- /// Pure unit tests for <see cref="Button"/> that don't require Application static dependencies.
- /// These tests can run in parallel without interference.
- /// </summary>
- public class ButtonTests : UnitTests.Parallelizable.ParallelizableBase
- {
- [Fact]
- public void Text_Mirrors_Title ()
- {
- var view = new Button ();
- view.Title = "Hello";
- Assert.Equal ("Hello", view.Title);
- Assert.Equal ("Hello", view.TitleTextFormatter.Text);
- Assert.Equal ("Hello", view.Text);
- Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
- view.Dispose ();
- }
- [Fact]
- public void Title_Mirrors_Text ()
- {
- var view = new Button ();
- view.Text = "Hello";
- Assert.Equal ("Hello", view.Text);
- Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
- Assert.Equal ("Hello", view.Title);
- Assert.Equal ("Hello", view.TitleTextFormatter.Text);
- view.Dispose ();
- }
- [Theory]
- [InlineData ("01234", 0, 0, 0, 0)]
- [InlineData ("01234", 1, 0, 1, 0)]
- [InlineData ("01234", 0, 1, 0, 1)]
- [InlineData ("01234", 1, 1, 1, 1)]
- [InlineData ("01234", 10, 1, 10, 1)]
- [InlineData ("01234", 10, 3, 10, 3)]
- [InlineData ("0_1234", 0, 0, 0, 0)]
- [InlineData ("0_1234", 1, 0, 1, 0)]
- [InlineData ("0_1234", 0, 1, 0, 1)]
- [InlineData ("0_1234", 1, 1, 1, 1)]
- [InlineData ("0_1234", 10, 1, 10, 1)]
- [InlineData ("0_12你", 10, 3, 10, 3)]
- [InlineData ("0_12你", 0, 0, 0, 0)]
- [InlineData ("0_12你", 1, 0, 1, 0)]
- [InlineData ("0_12你", 0, 1, 0, 1)]
- [InlineData ("0_12你", 1, 1, 1, 1)]
- [InlineData ("0_12你", 10, 1, 10, 1)]
- public void Button_AbsoluteSize_Text (string text, int width, int height, int expectedWidth, int expectedHeight)
- {
- // Override CM
- Button.DefaultShadow = ShadowStyle.None;
- var btn1 = new Button
- {
- Text = text,
- Width = width,
- Height = height
- };
- Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
- Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
- Assert.Equal (new (expectedWidth, expectedHeight), btn1.GetContentSize ());
- Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
- btn1.Dispose ();
- }
- [Theory]
- [InlineData (0, 0, 0, 0)]
- [InlineData (1, 0, 1, 0)]
- [InlineData (0, 1, 0, 1)]
- [InlineData (1, 1, 1, 1)]
- [InlineData (10, 1, 10, 1)]
- [InlineData (10, 3, 10, 3)]
- public void Button_AbsoluteSize_DefaultText (int width, int height, int expectedWidth, int expectedHeight)
- {
- // Override CM
- Button.DefaultShadow = ShadowStyle.None;
- var btn1 = new Button ();
- btn1.Width = width;
- btn1.Height = height;
- Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
- Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
- Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
- btn1.Dispose ();
- }
- [Fact]
- public void Button_HotKeyChanged_EventFires ()
- {
- var btn = new Button { Text = "_Yar" };
- object sender = null;
- KeyChangedEventArgs args = null;
- btn.HotKeyChanged += (s, e) =>
- {
- sender = s;
- args = e;
- };
- btn.HotKeyChanged += (s, e) =>
- {
- sender = s;
- args = e;
- };
- btn.HotKey = KeyCode.R;
- Assert.Same (btn, sender);
- Assert.Equal (KeyCode.Y, args.OldKey);
- Assert.Equal (KeyCode.R, args.NewKey);
- btn.HotKey = KeyCode.R;
- Assert.Same (btn, sender);
- Assert.Equal (KeyCode.Y, args.OldKey);
- Assert.Equal (KeyCode.R, args.NewKey);
- btn.Dispose ();
- }
- [Fact]
- public void Button_HotKeyChanged_EventFires_WithNone ()
- {
- var btn = new Button ();
- object sender = null;
- KeyChangedEventArgs args = null;
- btn.HotKeyChanged += (s, e) =>
- {
- sender = s;
- args = e;
- };
- btn.HotKey = KeyCode.R;
- Assert.Same (btn, sender);
- Assert.Equal (KeyCode.Null, args.OldKey);
- Assert.Equal (KeyCode.R, args.NewKey);
- btn.Dispose ();
- }
- [Fact]
- public void HotKeyChange_Works ()
- {
- var clicked = false;
- var btn = new Button { Text = "_Test" };
- btn.Accepting += (s, e) => clicked = true;
- Assert.Equal (KeyCode.T, btn.HotKey);
- Assert.False (btn.NewKeyDownEvent (Key.T)); // Button processes, but does not handle
- Assert.True (clicked);
- clicked = false;
- Assert.False (btn.NewKeyDownEvent (Key.T.WithAlt)); // Button processes, but does not handle
- Assert.True (clicked);
- clicked = false;
- btn.HotKey = KeyCode.E;
- Assert.False (btn.NewKeyDownEvent (Key.E.WithAlt)); // Button processes, but does not handle
- Assert.True (clicked);
- }
- [Theory]
- [InlineData (false, 0)]
- [InlineData (true, 1)]
- public void Space_Fires_Accept (bool focused, int expected)
- {
- var superView = new View
- {
- CanFocus = true
- };
- Button button = new ();
- button.CanFocus = focused;
- var acceptInvoked = 0;
- button.Accepting += (s, e) => acceptInvoked++;
- superView.Add (button);
- button.SetFocus ();
- Assert.Equal (focused, button.HasFocus);
- superView.NewKeyDownEvent (Key.Space);
- Assert.Equal (expected, acceptInvoked);
- superView.Dispose ();
- }
- [Theory]
- [InlineData (false, 0)]
- [InlineData (true, 1)]
- public void Enter_Fires_Accept (bool focused, int expected)
- {
- var superView = new View
- {
- CanFocus = true
- };
- Button button = new ();
- button.CanFocus = focused;
- var acceptInvoked = 0;
- button.Accepting += (s, e) => acceptInvoked++;
- superView.Add (button);
- button.SetFocus ();
- Assert.Equal (focused, button.HasFocus);
- superView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expected, acceptInvoked);
- superView.Dispose ();
- }
- [Theory]
- [InlineData (false, 1)]
- [InlineData (true, 1)]
- public void HotKey_Fires_Accept (bool focused, int expected)
- {
- var superView = new View
- {
- CanFocus = true
- };
- Button button = new ()
- {
- HotKey = Key.A
- };
- button.CanFocus = focused;
- var acceptInvoked = 0;
- button.Accepting += (s, e) => acceptInvoked++;
- superView.Add (button);
- button.SetFocus ();
- Assert.Equal (focused, button.HasFocus);
- superView.NewKeyDownEvent (Key.A);
- Assert.Equal (expected, acceptInvoked);
- superView.Dispose ();
- }
- [Fact]
- public void HotKey_Command_Accepts ()
- {
- var btn = new Button { Text = "_Test" };
- var accepted = false;
- btn.Accepting += (s, e) => accepted = true;
- Assert.Equal (KeyCode.T, btn.HotKey);
- btn.InvokeCommand (Command.HotKey);
- Assert.True (accepted);
- }
- [Fact]
- public void Accept_Event_Returns_True ()
- {
- var btn = new Button { Text = "Test" };
- var acceptInvoked = false;
- btn.Accepting += (s, e) => { acceptInvoked = true; e.Handled = true; };
- Assert.True (btn.InvokeCommand (Command.Accept));
- Assert.True (acceptInvoked);
- }
- [Fact]
- public void Setting_Empty_Text_Sets_HoKey_To_KeyNull ()
- {
- var btn = new Button { Text = "_Test" };
- Assert.Equal (KeyCode.T, btn.HotKey);
- btn.Text = "";
- Assert.Equal (KeyCode.Null, btn.HotKey);
- }
- [Fact]
- public void TestAssignTextToButton ()
- {
- var btn = new Button { Text = "_K Ok" };
- Assert.Equal ("_K Ok", btn.Text);
- btn.Text = "_N Btn";
- Assert.Equal ("_N Btn", btn.Text);
- }
- [Fact]
- public void Accept_Cancel_Event_OnAccept_Returns_True ()
- {
- var button = new Button ();
- var acceptInvoked = false;
- button.Accepting += ButtonAccept;
- bool? ret = button.InvokeCommand (Command.Accept);
- Assert.True (ret);
- Assert.True (acceptInvoked);
- button.Dispose ();
- return;
- void ButtonAccept (object sender, CommandEventArgs e)
- {
- acceptInvoked = true;
- e.Handled = true;
- }
- }
- }
|