ViewKeyBindingTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using Xunit;
  4. using Xunit.Abstractions;
  5. namespace Terminal.Gui.ViewTests;
  6. public class ViewKeyBindingTests {
  7. readonly ITestOutputHelper _output;
  8. public ViewKeyBindingTests (ITestOutputHelper output)
  9. {
  10. this._output = output;
  11. }
  12. // tests that test KeyBindingScope.Focus and KeyBindingScope.HotKey (tests for KeyBindingScope.Application are in Application/KeyboardTests.cs)
  13. public class ScopedKeyBindingView : View {
  14. public bool ApplicationCommand { get; set; }
  15. public bool HotKeyCommand { get; set; }
  16. public bool FocusedCommand { get; set; }
  17. public ScopedKeyBindingView ()
  18. {
  19. AddCommand (Command.Save, () => ApplicationCommand = true);
  20. AddCommand (Command.Default, () => HotKeyCommand = true);
  21. AddCommand (Command.Left, () => FocusedCommand = true);
  22. KeyBindings.Add (KeyCode.A, KeyBindingScope.Application, Command.Save);
  23. HotKey = KeyCode.H;
  24. KeyBindings.Add (KeyCode.F, KeyBindingScope.Focused, Command.Left);
  25. }
  26. }
  27. [Fact]
  28. [AutoInitShutdown]
  29. public void Focus_KeyBinding ()
  30. {
  31. var view = new ScopedKeyBindingView ();
  32. var invoked = false;
  33. view.InvokingKeyBindings += (s, e) => invoked = true;
  34. Application.Top.Add (view);
  35. Application.Begin (Application.Top);
  36. Application.OnKeyDown (new (KeyCode.A));
  37. Assert.True (invoked);
  38. invoked = false;
  39. Application.OnKeyDown (new (KeyCode.H));
  40. Assert.True (invoked);
  41. invoked = false;
  42. Assert.False (view.HasFocus);
  43. Application.OnKeyDown (new (KeyCode.F));
  44. Assert.False (invoked);
  45. Assert.False (view.FocusedCommand);
  46. invoked = false;
  47. view.CanFocus = true;
  48. view.SetFocus ();
  49. Assert.True (view.HasFocus);
  50. Application.OnKeyDown (new (KeyCode.F));
  51. Assert.True (invoked);
  52. Assert.True (view.ApplicationCommand);
  53. Assert.True (view.HotKeyCommand);
  54. Assert.True (view.FocusedCommand);
  55. }
  56. [Fact]
  57. [AutoInitShutdown]
  58. public void Focus_KeyBinding_Negative ()
  59. {
  60. var view = new ScopedKeyBindingView ();
  61. var invoked = false;
  62. view.InvokingKeyBindings += (s, e) => invoked = true;
  63. Application.Top.Add (view);
  64. Application.Begin (Application.Top);
  65. Application.OnKeyDown (new (KeyCode.Z));
  66. Assert.False (invoked);
  67. Assert.False (view.ApplicationCommand);
  68. Assert.False (view.HotKeyCommand);
  69. Assert.False (view.FocusedCommand);
  70. invoked = false;
  71. Assert.False (view.HasFocus);
  72. Application.OnKeyDown (new (KeyCode.F));
  73. Assert.False (invoked);
  74. Assert.False (view.ApplicationCommand);
  75. Assert.False (view.HotKeyCommand);
  76. Assert.False (view.FocusedCommand);
  77. }
  78. [Fact]
  79. [AutoInitShutdown]
  80. public void HotKey_KeyBinding ()
  81. {
  82. var view = new ScopedKeyBindingView ();
  83. var invoked = false;
  84. view.InvokingKeyBindings += (s, e) => invoked = true;
  85. Application.Top.Add (view);
  86. Application.Begin (Application.Top);
  87. invoked = false;
  88. Application.OnKeyDown (new (KeyCode.H));
  89. Assert.True (invoked);
  90. Assert.True (view.HotKeyCommand);
  91. view.HotKey = KeyCode.Z;
  92. invoked = false;
  93. view.HotKeyCommand = false;
  94. Application.OnKeyDown (new (KeyCode.H)); // old hot key
  95. Assert.False (invoked);
  96. Assert.False (view.HotKeyCommand);
  97. Application.OnKeyDown (new (KeyCode.Z)); // new hot key
  98. Assert.True (invoked);
  99. Assert.True (view.HotKeyCommand);
  100. }
  101. [Fact]
  102. [AutoInitShutdown]
  103. public void HotKey_KeyBinding_Negative ()
  104. {
  105. var view = new ScopedKeyBindingView ();
  106. var invoked = false;
  107. view.InvokingKeyBindings += (s, e) => invoked = true;
  108. Application.Top.Add (view);
  109. Application.Begin (Application.Top);
  110. Application.OnKeyDown (new (KeyCode.Z));
  111. Assert.False (invoked);
  112. Assert.False (view.HotKeyCommand);
  113. invoked = false;
  114. Application.OnKeyDown (new (KeyCode.F));
  115. Assert.False (view.HotKeyCommand);
  116. }
  117. }