FakeDriverInputTests.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using Xunit;
  2. using Xunit.Abstractions;
  3. namespace UnitTests_Parallelizable.Drivers;
  4. /// <summary>
  5. /// Tests for FakeDriver mouse and keyboard input functionality.
  6. /// These tests prove that FakeDriver can be used for testing input handling in Terminal.Gui applications.
  7. /// </summary>
  8. public class FakeDriverInputTests (ITestOutputHelper output)
  9. {
  10. private readonly ITestOutputHelper _output = output;
  11. #region Keyboard Input Tests
  12. [Fact]
  13. public void FakeDriver_Can_Push_Mock_KeyPress ()
  14. {
  15. // Arrange
  16. var driver = new FakeDriver ();
  17. driver.Init ();
  18. // Act - Push a mock key press onto the FakeConsole
  19. FakeConsole.PushMockKeyPress (KeyCode.A);
  20. // Assert - Stack should have the key
  21. Assert.True (FakeConsole.MockKeyPresses.Count > 0);
  22. driver.End ();
  23. }
  24. [Fact]
  25. public void FakeDriver_MockKeyPresses_Stack_Works ()
  26. {
  27. // Arrange
  28. var driver = new FakeDriver ();
  29. driver.Init ();
  30. // Clear any previous state from other tests
  31. FakeConsole.MockKeyPresses.Clear ();
  32. // Act - Push multiple keys
  33. FakeConsole.PushMockKeyPress (KeyCode.A);
  34. FakeConsole.PushMockKeyPress (KeyCode.B);
  35. FakeConsole.PushMockKeyPress (KeyCode.C);
  36. // Assert
  37. Assert.Equal (3, FakeConsole.MockKeyPresses.Count);
  38. // Pop and verify order (stack is LIFO)
  39. var key1 = FakeConsole.MockKeyPresses.Pop ();
  40. var key2 = FakeConsole.MockKeyPresses.Pop ();
  41. var key3 = FakeConsole.MockKeyPresses.Pop ();
  42. Assert.Equal ('C', key1.KeyChar);
  43. Assert.Equal ('B', key2.KeyChar);
  44. Assert.Equal ('A', key3.KeyChar);
  45. driver.End ();
  46. }
  47. [Fact]
  48. public void FakeDriver_Can_Clear_MockKeyPresses ()
  49. {
  50. // Arrange
  51. var driver = new FakeDriver ();
  52. driver.Init ();
  53. FakeConsole.PushMockKeyPress (KeyCode.A);
  54. FakeConsole.PushMockKeyPress (KeyCode.B);
  55. // Act
  56. FakeConsole.MockKeyPresses.Clear ();
  57. // Assert
  58. Assert.Empty (FakeConsole.MockKeyPresses);
  59. driver.End ();
  60. }
  61. [Fact]
  62. public void FakeDriver_Supports_Special_Keys ()
  63. {
  64. // Arrange
  65. var driver = new FakeDriver ();
  66. driver.Init ();
  67. // Act - Push special keys
  68. FakeConsole.PushMockKeyPress (KeyCode.Enter);
  69. FakeConsole.PushMockKeyPress (KeyCode.Esc);
  70. FakeConsole.PushMockKeyPress (KeyCode.Tab);
  71. FakeConsole.PushMockKeyPress (KeyCode.CursorUp);
  72. // Assert
  73. Assert.Equal (4, FakeConsole.MockKeyPresses.Count);
  74. driver.End ();
  75. }
  76. [Fact]
  77. public void FakeDriver_Supports_Modified_Keys ()
  78. {
  79. // Arrange
  80. var driver = new FakeDriver ();
  81. driver.Init ();
  82. // Act - Push modified keys
  83. FakeConsole.PushMockKeyPress (KeyCode.A | KeyCode.CtrlMask);
  84. FakeConsole.PushMockKeyPress (KeyCode.S | KeyCode.ShiftMask);
  85. FakeConsole.PushMockKeyPress (KeyCode.F1 | KeyCode.AltMask);
  86. // Assert
  87. Assert.Equal (3, FakeConsole.MockKeyPresses.Count);
  88. var key1 = FakeConsole.MockKeyPresses.Pop ();
  89. Assert.True (key1.Modifiers.HasFlag (ConsoleModifiers.Alt));
  90. driver.End ();
  91. }
  92. #endregion
  93. #region FakeConsole Tests
  94. [Fact]
  95. public void FakeConsole_Has_Default_Dimensions ()
  96. {
  97. // Arrange
  98. var driver = new FakeDriver ();
  99. driver.Init ();
  100. // Assert
  101. Assert.Equal (80, FakeConsole.WindowWidth);
  102. Assert.Equal (25, FakeConsole.WindowHeight);
  103. Assert.Equal (80, FakeConsole.BufferWidth);
  104. Assert.Equal (25, FakeConsole.BufferHeight);
  105. driver.End ();
  106. }
  107. [Fact]
  108. public void FakeConsole_Can_Set_Buffer_Size ()
  109. {
  110. // Arrange
  111. var driver = new FakeDriver ();
  112. driver.Init ();
  113. // Act
  114. FakeConsole.SetBufferSize (100, 40);
  115. // Assert
  116. Assert.Equal (100, FakeConsole.BufferWidth);
  117. Assert.Equal (40, FakeConsole.BufferHeight);
  118. driver.End ();
  119. }
  120. [Fact]
  121. public void FakeConsole_Can_Set_Cursor_Position ()
  122. {
  123. // Arrange
  124. var driver = new FakeDriver ();
  125. driver.Init ();
  126. // Act
  127. FakeConsole.SetCursorPosition (15, 10);
  128. // Assert
  129. Assert.Equal (15, FakeConsole.CursorLeft);
  130. Assert.Equal (10, FakeConsole.CursorTop);
  131. driver.End ();
  132. }
  133. [Fact]
  134. public void FakeConsole_Tracks_Colors ()
  135. {
  136. // Arrange
  137. var driver = new FakeDriver ();
  138. driver.Init ();
  139. // Act
  140. FakeConsole.ForegroundColor = ConsoleColor.Red;
  141. FakeConsole.BackgroundColor = ConsoleColor.Blue;
  142. // Assert
  143. Assert.Equal (ConsoleColor.Red, FakeConsole.ForegroundColor);
  144. Assert.Equal (ConsoleColor.Blue, FakeConsole.BackgroundColor);
  145. driver.End ();
  146. }
  147. [Fact]
  148. public void FakeConsole_Can_Reset_Colors ()
  149. {
  150. // Arrange
  151. var driver = new FakeDriver ();
  152. driver.Init ();
  153. FakeConsole.ForegroundColor = ConsoleColor.Red;
  154. FakeConsole.BackgroundColor = ConsoleColor.Blue;
  155. // Act
  156. FakeConsole.ResetColor ();
  157. // Assert
  158. Assert.Equal (ConsoleColor.Gray, FakeConsole.ForegroundColor);
  159. Assert.Equal (ConsoleColor.Black, FakeConsole.BackgroundColor);
  160. driver.End ();
  161. }
  162. #endregion
  163. }