ButtonTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. namespace Terminal.Gui.ViewsTests;
  2. /// <summary>
  3. /// Pure unit tests for <see cref="Button"/> that don't require Application static dependencies.
  4. /// These tests can run in parallel without interference.
  5. /// </summary>
  6. public class ButtonTests : UnitTests.Parallelizable.ParallelizableBase
  7. {
  8. [Fact]
  9. public void Text_Mirrors_Title ()
  10. {
  11. var view = new Button ();
  12. view.Title = "Hello";
  13. Assert.Equal ("Hello", view.Title);
  14. Assert.Equal ("Hello", view.TitleTextFormatter.Text);
  15. Assert.Equal ("Hello", view.Text);
  16. Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
  17. view.Dispose ();
  18. }
  19. [Fact]
  20. public void Title_Mirrors_Text ()
  21. {
  22. var view = new Button ();
  23. view.Text = "Hello";
  24. Assert.Equal ("Hello", view.Text);
  25. Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
  26. Assert.Equal ("Hello", view.Title);
  27. Assert.Equal ("Hello", view.TitleTextFormatter.Text);
  28. view.Dispose ();
  29. }
  30. [Theory]
  31. [InlineData ("01234", 0, 0, 0, 0)]
  32. [InlineData ("01234", 1, 0, 1, 0)]
  33. [InlineData ("01234", 0, 1, 0, 1)]
  34. [InlineData ("01234", 1, 1, 1, 1)]
  35. [InlineData ("01234", 10, 1, 10, 1)]
  36. [InlineData ("01234", 10, 3, 10, 3)]
  37. [InlineData ("0_1234", 0, 0, 0, 0)]
  38. [InlineData ("0_1234", 1, 0, 1, 0)]
  39. [InlineData ("0_1234", 0, 1, 0, 1)]
  40. [InlineData ("0_1234", 1, 1, 1, 1)]
  41. [InlineData ("0_1234", 10, 1, 10, 1)]
  42. [InlineData ("0_12你", 10, 3, 10, 3)]
  43. [InlineData ("0_12你", 0, 0, 0, 0)]
  44. [InlineData ("0_12你", 1, 0, 1, 0)]
  45. [InlineData ("0_12你", 0, 1, 0, 1)]
  46. [InlineData ("0_12你", 1, 1, 1, 1)]
  47. [InlineData ("0_12你", 10, 1, 10, 1)]
  48. public void Button_AbsoluteSize_Text (string text, int width, int height, int expectedWidth, int expectedHeight)
  49. {
  50. // Override CM
  51. Button.DefaultShadow = ShadowStyle.None;
  52. var btn1 = new Button
  53. {
  54. Text = text,
  55. Width = width,
  56. Height = height
  57. };
  58. Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
  59. Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
  60. Assert.Equal (new (expectedWidth, expectedHeight), btn1.GetContentSize ());
  61. Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
  62. btn1.Dispose ();
  63. }
  64. [Theory]
  65. [InlineData (0, 0, 0, 0)]
  66. [InlineData (1, 0, 1, 0)]
  67. [InlineData (0, 1, 0, 1)]
  68. [InlineData (1, 1, 1, 1)]
  69. [InlineData (10, 1, 10, 1)]
  70. [InlineData (10, 3, 10, 3)]
  71. public void Button_AbsoluteSize_DefaultText (int width, int height, int expectedWidth, int expectedHeight)
  72. {
  73. // Override CM
  74. Button.DefaultShadow = ShadowStyle.None;
  75. var btn1 = new Button ();
  76. btn1.Width = width;
  77. btn1.Height = height;
  78. Assert.Equal (new (expectedWidth, expectedHeight), btn1.Frame.Size);
  79. Assert.Equal (new (expectedWidth, expectedHeight), btn1.Viewport.Size);
  80. Assert.Equal (new Size (expectedWidth, expectedHeight), btn1.TextFormatter.ConstrainToSize);
  81. btn1.Dispose ();
  82. }
  83. [Fact]
  84. public void Button_HotKeyChanged_EventFires ()
  85. {
  86. var btn = new Button { Text = "_Yar" };
  87. object sender = null;
  88. KeyChangedEventArgs args = null;
  89. btn.HotKeyChanged += (s, e) =>
  90. {
  91. sender = s;
  92. args = e;
  93. };
  94. btn.HotKeyChanged += (s, e) =>
  95. {
  96. sender = s;
  97. args = e;
  98. };
  99. btn.HotKey = KeyCode.R;
  100. Assert.Same (btn, sender);
  101. Assert.Equal (KeyCode.Y, args.OldKey);
  102. Assert.Equal (KeyCode.R, args.NewKey);
  103. btn.HotKey = KeyCode.R;
  104. Assert.Same (btn, sender);
  105. Assert.Equal (KeyCode.Y, args.OldKey);
  106. Assert.Equal (KeyCode.R, args.NewKey);
  107. btn.Dispose ();
  108. }
  109. [Fact]
  110. public void Button_HotKeyChanged_EventFires_WithNone ()
  111. {
  112. var btn = new Button ();
  113. object sender = null;
  114. KeyChangedEventArgs args = null;
  115. btn.HotKeyChanged += (s, e) =>
  116. {
  117. sender = s;
  118. args = e;
  119. };
  120. btn.HotKey = KeyCode.R;
  121. Assert.Same (btn, sender);
  122. Assert.Equal (KeyCode.Null, args.OldKey);
  123. Assert.Equal (KeyCode.R, args.NewKey);
  124. btn.Dispose ();
  125. }
  126. }