FakeDriverInputTests.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. // Act - Push multiple keys
  31. FakeConsole.PushMockKeyPress (KeyCode.A);
  32. FakeConsole.PushMockKeyPress (KeyCode.B);
  33. FakeConsole.PushMockKeyPress (KeyCode.C);
  34. // Assert
  35. Assert.Equal (3, FakeConsole.MockKeyPresses.Count);
  36. // Pop and verify order (stack is LIFO)
  37. var key1 = FakeConsole.MockKeyPresses.Pop ();
  38. var key2 = FakeConsole.MockKeyPresses.Pop ();
  39. var key3 = FakeConsole.MockKeyPresses.Pop ();
  40. Assert.Equal ('C', key1.KeyChar);
  41. Assert.Equal ('B', key2.KeyChar);
  42. Assert.Equal ('A', key3.KeyChar);
  43. driver.End ();
  44. }
  45. [Fact]
  46. public void FakeDriver_Can_Clear_MockKeyPresses ()
  47. {
  48. // Arrange
  49. var driver = new FakeDriver ();
  50. driver.Init ();
  51. FakeConsole.PushMockKeyPress (KeyCode.A);
  52. FakeConsole.PushMockKeyPress (KeyCode.B);
  53. // Act
  54. FakeConsole.MockKeyPresses.Clear ();
  55. // Assert
  56. Assert.Empty (FakeConsole.MockKeyPresses);
  57. driver.End ();
  58. }
  59. [Fact]
  60. public void FakeDriver_Supports_Special_Keys ()
  61. {
  62. // Arrange
  63. var driver = new FakeDriver ();
  64. driver.Init ();
  65. // Act - Push special keys
  66. FakeConsole.PushMockKeyPress (KeyCode.Enter);
  67. FakeConsole.PushMockKeyPress (KeyCode.Esc);
  68. FakeConsole.PushMockKeyPress (KeyCode.Tab);
  69. FakeConsole.PushMockKeyPress (KeyCode.CursorUp);
  70. // Assert
  71. Assert.Equal (4, FakeConsole.MockKeyPresses.Count);
  72. driver.End ();
  73. }
  74. [Fact]
  75. public void FakeDriver_Supports_Modified_Keys ()
  76. {
  77. // Arrange
  78. var driver = new FakeDriver ();
  79. driver.Init ();
  80. // Act - Push modified keys
  81. FakeConsole.PushMockKeyPress (KeyCode.A | KeyCode.CtrlMask);
  82. FakeConsole.PushMockKeyPress (KeyCode.S | KeyCode.ShiftMask);
  83. FakeConsole.PushMockKeyPress (KeyCode.F1 | KeyCode.AltMask);
  84. // Assert
  85. Assert.Equal (3, FakeConsole.MockKeyPresses.Count);
  86. var key1 = FakeConsole.MockKeyPresses.Pop ();
  87. Assert.True (key1.Modifiers.HasFlag (ConsoleModifiers.Alt));
  88. driver.End ();
  89. }
  90. #endregion
  91. #region FakeConsole Tests
  92. [Fact]
  93. public void FakeConsole_Has_Default_Dimensions ()
  94. {
  95. // Arrange
  96. var driver = new FakeDriver ();
  97. driver.Init ();
  98. // Assert
  99. Assert.Equal (80, FakeConsole.WindowWidth);
  100. Assert.Equal (25, FakeConsole.WindowHeight);
  101. Assert.Equal (80, FakeConsole.BufferWidth);
  102. Assert.Equal (25, FakeConsole.BufferHeight);
  103. driver.End ();
  104. }
  105. [Fact]
  106. public void FakeConsole_Can_Set_Buffer_Size ()
  107. {
  108. // Arrange
  109. var driver = new FakeDriver ();
  110. driver.Init ();
  111. // Act
  112. FakeConsole.SetBufferSize (100, 40);
  113. // Assert
  114. Assert.Equal (100, FakeConsole.BufferWidth);
  115. Assert.Equal (40, FakeConsole.BufferHeight);
  116. driver.End ();
  117. }
  118. [Fact]
  119. public void FakeConsole_Can_Set_Cursor_Position ()
  120. {
  121. // Arrange
  122. var driver = new FakeDriver ();
  123. driver.Init ();
  124. // Act
  125. FakeConsole.SetCursorPosition (15, 10);
  126. // Assert
  127. Assert.Equal (15, FakeConsole.CursorLeft);
  128. Assert.Equal (10, FakeConsole.CursorTop);
  129. driver.End ();
  130. }
  131. [Fact]
  132. public void FakeConsole_Tracks_Colors ()
  133. {
  134. // Arrange
  135. var driver = new FakeDriver ();
  136. driver.Init ();
  137. // Act
  138. FakeConsole.ForegroundColor = ConsoleColor.Red;
  139. FakeConsole.BackgroundColor = ConsoleColor.Blue;
  140. // Assert
  141. Assert.Equal (ConsoleColor.Red, FakeConsole.ForegroundColor);
  142. Assert.Equal (ConsoleColor.Blue, FakeConsole.BackgroundColor);
  143. driver.End ();
  144. }
  145. [Fact]
  146. public void FakeConsole_Can_Reset_Colors ()
  147. {
  148. // Arrange
  149. var driver = new FakeDriver ();
  150. driver.Init ();
  151. FakeConsole.ForegroundColor = ConsoleColor.Red;
  152. FakeConsole.BackgroundColor = ConsoleColor.Blue;
  153. // Act
  154. FakeConsole.ResetColor ();
  155. // Assert
  156. Assert.Equal (ConsoleColor.Gray, FakeConsole.ForegroundColor);
  157. Assert.Equal (ConsoleColor.Black, FakeConsole.BackgroundColor);
  158. driver.End ();
  159. }
  160. #endregion
  161. }