ViewCommandTests.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System.ComponentModel;
  2. using System.Text;
  3. using Xunit.Abstractions;
  4. namespace Terminal.Gui.ViewTests;
  5. public class ViewCommandTests (ITestOutputHelper output)
  6. {
  7. // OnAccept/Accept tests
  8. [Fact]
  9. public void Accept_Command_Raises ()
  10. {
  11. var view = new ViewEventTester ();
  12. Assert.False (view.HasFocus);
  13. Assert.False (view.InvokeCommand (Command.Accept)); // false means it was not handled
  14. Assert.Equal (1, view.OnAcceptCount);
  15. Assert.Equal (1, view.AcceptCount);
  16. Assert.True (view.HasFocus);
  17. }
  18. [Fact]
  19. public void Accept_Command_Handle_OnAccept_NoEvent ()
  20. {
  21. var view = new ViewEventTester ();
  22. Assert.False (view.HasFocus);
  23. view.HandleOnAccept = true;
  24. Assert.True (view.InvokeCommand (Command.Accept));
  25. Assert.Equal (1, view.OnAcceptCount);
  26. Assert.Equal (0, view.AcceptCount);
  27. }
  28. [Fact]
  29. public void Accept_Handle_Event_OnAccept_Returns_True ()
  30. {
  31. var view = new View ();
  32. var acceptInvoked = false;
  33. view.Accept += ViewOnAccept;
  34. bool? ret = view.InvokeCommand (Command.Accept);
  35. Assert.True (ret);
  36. Assert.True (acceptInvoked);
  37. return;
  38. void ViewOnAccept (object sender, HandledEventArgs e)
  39. {
  40. acceptInvoked = true;
  41. e.Handled = true;
  42. }
  43. }
  44. [Fact]
  45. public void Accept_Command_Invokes_Accept_Event ()
  46. {
  47. var view = new View ();
  48. var accepted = false;
  49. view.Accept += ViewOnAccept;
  50. view.InvokeCommand (Command.Accept);
  51. Assert.True (accepted);
  52. return;
  53. void ViewOnAccept (object sender, HandledEventArgs e) { accepted = true; }
  54. }
  55. [Fact]
  56. public void HotKey_Command_SetsFocus ()
  57. {
  58. var view = new View ();
  59. view.CanFocus = true;
  60. Assert.False (view.HasFocus);
  61. view.InvokeCommand (Command.HotKey);
  62. Assert.True (view.HasFocus);
  63. }
  64. public class ViewEventTester : View
  65. {
  66. public ViewEventTester ()
  67. {
  68. CanFocus = true;
  69. Accept += (s, a) =>
  70. {
  71. a.Handled = HandleAccept;
  72. AcceptCount++;
  73. };
  74. HotKeyCommand += (s, a) =>
  75. {
  76. a.Handled = HandleHotKeyCommand;
  77. HotKeyCommandCount++;
  78. };
  79. Select += (s, a) =>
  80. {
  81. a.Handled = HandleSelect;
  82. SelectCount++;
  83. };
  84. }
  85. public int OnAcceptCount { get; set; }
  86. public int AcceptCount { get; set; }
  87. public bool HandleOnAccept { get; set; }
  88. /// <inheritdoc />
  89. protected override bool OnAccept (HandledEventArgs args)
  90. {
  91. OnAcceptCount++;
  92. if (!HandleOnAccept)
  93. {
  94. return base.OnAccept (args);
  95. }
  96. return HandleOnAccept;
  97. }
  98. public bool HandleAccept { get; set; }
  99. public int OnHotKeyCommandCount { get; set; }
  100. public int HotKeyCommandCount { get; set; }
  101. public bool HandleOnHotKeyCommand { get; set; }
  102. /// <inheritdoc />
  103. protected override bool OnHotKeyCommand (HandledEventArgs args)
  104. {
  105. OnHotKeyCommandCount++;
  106. if (!HandleOnHotKeyCommand)
  107. {
  108. return base.OnHotKeyCommand (args);
  109. }
  110. return HandleOnHotKeyCommand;
  111. }
  112. public bool HandleHotKeyCommand { get; set; }
  113. public int OnSelectCount { get; set; }
  114. public int SelectCount { get; set; }
  115. public bool HandleOnSelect { get; set; }
  116. /// <inheritdoc />
  117. protected override bool OnSelect (HandledEventArgs args)
  118. {
  119. OnSelectCount++;
  120. if (!HandleOnSelect)
  121. {
  122. return base.OnSelect (args);
  123. }
  124. return HandleOnSelect;
  125. }
  126. public bool HandleSelect { get; set; }
  127. }
  128. }