EscSeqRequestsTests.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. namespace Terminal.Gui.InputTests;
  2. public class EscSeqRequestsTests
  3. {
  4. [Fact]
  5. public void Add_Tests ()
  6. {
  7. EscSeqRequests.Add ("t");
  8. Assert.Single (EscSeqRequests.Statuses);
  9. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  10. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumRequests);
  11. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumOutstanding);
  12. EscSeqRequests.Add ("t", 2);
  13. Assert.Single (EscSeqRequests.Statuses);
  14. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  15. Assert.Equal (3, EscSeqRequests.Statuses [^1].NumRequests);
  16. Assert.Equal (3, EscSeqRequests.Statuses [^1].NumOutstanding);
  17. EscSeqRequests.Clear ();
  18. EscSeqRequests.Add ("t", 2);
  19. Assert.Single (EscSeqRequests.Statuses);
  20. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  21. Assert.Equal (2, EscSeqRequests.Statuses [^1].NumRequests);
  22. Assert.Equal (2, EscSeqRequests.Statuses [^1].NumOutstanding);
  23. EscSeqRequests.Add ("t", 3);
  24. Assert.Single (EscSeqRequests.Statuses);
  25. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  26. Assert.Equal (5, EscSeqRequests.Statuses [^1].NumRequests);
  27. Assert.Equal (5, EscSeqRequests.Statuses [^1].NumOutstanding);
  28. EscSeqRequests.Clear ();
  29. }
  30. [Fact]
  31. public void Constructor_Defaults ()
  32. {
  33. Assert.NotNull (EscSeqRequests.Statuses);
  34. Assert.Empty (EscSeqRequests.Statuses);
  35. }
  36. [Fact]
  37. public void Remove_Tests ()
  38. {
  39. EscSeqRequests.Add ("t");
  40. EscSeqRequests.Remove ("t");
  41. Assert.Empty (EscSeqRequests.Statuses);
  42. EscSeqRequests.Add ("t", 2);
  43. EscSeqRequests.Remove ("t");
  44. Assert.Single (EscSeqRequests.Statuses);
  45. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  46. Assert.Equal (2, EscSeqRequests.Statuses [^1].NumRequests);
  47. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumOutstanding);
  48. EscSeqRequests.Remove ("t");
  49. Assert.Empty (EscSeqRequests.Statuses);
  50. EscSeqRequests.Clear ();
  51. }
  52. [Fact]
  53. public void HasResponse_Tests ()
  54. {
  55. Assert.False (EscSeqRequests.HasResponse ("t"));
  56. EscSeqRequests.Add ("t");
  57. Assert.False (EscSeqRequests.HasResponse ("r"));
  58. Assert.True (EscSeqRequests.HasResponse ("t"));
  59. Assert.Single (EscSeqRequests.Statuses);
  60. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  61. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumRequests);
  62. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumOutstanding);
  63. EscSeqRequests.Remove ("t");
  64. Assert.Empty (EscSeqRequests.Statuses);
  65. }
  66. [Theory]
  67. [InlineData (null)]
  68. [InlineData ("")]
  69. public void Add_Null_Or_Empty_Terminator_Throws (string terminator)
  70. {
  71. if (terminator is null)
  72. {
  73. Assert.Throws<ArgumentNullException> (() => EscSeqRequests.Add (terminator));
  74. }
  75. else
  76. {
  77. Assert.Throws<ArgumentException> (() => EscSeqRequests.Add (terminator));
  78. }
  79. }
  80. [Theory]
  81. [InlineData (null)]
  82. [InlineData ("")]
  83. public void HasResponse_Null_Or_Empty_Terminator_Does_Not_Throws (string terminator)
  84. {
  85. EscSeqRequests.Add ("t");
  86. Assert.False (EscSeqRequests.HasResponse (terminator));
  87. EscSeqRequests.Clear ();
  88. }
  89. [Theory]
  90. [InlineData (null)]
  91. [InlineData ("")]
  92. public void Remove_Null_Or_Empty_Terminator_Throws (string terminator)
  93. {
  94. EscSeqRequests.Add ("t");
  95. if (terminator is null)
  96. {
  97. Assert.Throws<ArgumentNullException> (() => EscSeqRequests.Remove (terminator));
  98. }
  99. else
  100. {
  101. Assert.Throws<ArgumentException> (() => EscSeqRequests.Remove (terminator));
  102. }
  103. EscSeqRequests.Clear ();
  104. }
  105. [Fact]
  106. public void Requests_Responses_Tests ()
  107. {
  108. // This is simulated response from a CSI_ReportTerminalSizeInChars
  109. ConsoleKeyInfo [] cki =
  110. [
  111. new ('\u001b', 0, false, false, false),
  112. new ('[', 0, false, false, false),
  113. new ('8', 0, false, false, false),
  114. new (';', 0, false, false, false),
  115. new ('1', 0, false, false, false),
  116. new ('0', 0, false, false, false),
  117. new (';', 0, false, false, false),
  118. new ('2', 0, false, false, false),
  119. new ('0', 0, false, false, false),
  120. new ('t', 0, false, false, false)
  121. ];
  122. ConsoleKeyInfo newConsoleKeyInfo = default;
  123. ConsoleKey key = default;
  124. ConsoleModifiers mod = default;
  125. Assert.Empty (EscSeqRequests.Statuses);
  126. EscSeqRequests.Add ("t");
  127. Assert.Single (EscSeqRequests.Statuses);
  128. Assert.Equal ("t", EscSeqRequests.Statuses [^1].Terminator);
  129. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumRequests);
  130. Assert.Equal (1, EscSeqRequests.Statuses [^1].NumOutstanding);
  131. EscSeqUtils.DecodeEscSeq (
  132. ref newConsoleKeyInfo,
  133. ref key,
  134. cki,
  135. ref mod,
  136. out string c1Control,
  137. out string code,
  138. out string [] values,
  139. out string terminating,
  140. out bool isKeyMouse,
  141. out List<MouseFlags> mouseFlags,
  142. out Point pos,
  143. out bool isResponse,
  144. null
  145. );
  146. Assert.Empty (EscSeqRequests.Statuses);
  147. Assert.Equal (default, newConsoleKeyInfo);
  148. Assert.Equal (default, key);
  149. Assert.Equal (10, cki.Length);
  150. Assert.Equal (default, mod);
  151. Assert.Equal ("CSI", c1Control);
  152. Assert.Null (code);
  153. // ReSharper disable once HeuristicUnreachableCode
  154. Assert.Equal (3, values.Length);
  155. Assert.Equal ("8", values [0]);
  156. Assert.Equal ("t", terminating);
  157. Assert.False (isKeyMouse);
  158. Assert.Single (mouseFlags);
  159. Assert.Equal (default, mouseFlags [^1]);
  160. Assert.Equal (Point.Empty, pos);
  161. Assert.True (isResponse);
  162. }
  163. }