EscSeqUtilsTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System.Text;
  2. // ReSharper disable HeuristicUnreachableCode
  3. namespace UnitTests.DriverTests;
  4. public class EscSeqUtilsTests
  5. {
  6. [Fact]
  7. public void Defaults_Values ()
  8. {
  9. Assert.Equal ('\x1b', EscSeqUtils.KeyEsc);
  10. Assert.Equal ("\x1b[", EscSeqUtils.CSI);
  11. Assert.Equal ("\x1b[?1003h", EscSeqUtils.CSI_EnableAnyEventMouse);
  12. Assert.Equal ("\x1b[?1006h", EscSeqUtils.CSI_EnableSgrExtModeMouse);
  13. Assert.Equal ("\x1b[?1015h", EscSeqUtils.CSI_EnableUrxvtExtModeMouse);
  14. Assert.Equal ("\x1b[?1003l", EscSeqUtils.CSI_DisableAnyEventMouse);
  15. Assert.Equal ("\x1b[?1006l", EscSeqUtils.CSI_DisableSgrExtModeMouse);
  16. Assert.Equal ("\x1b[?1015l", EscSeqUtils.CSI_DisableUrxvtExtModeMouse);
  17. Assert.Equal ("\x1b[?1003h\x1b[?1015h\u001b[?1006h", EscSeqUtils.CSI_EnableMouseEvents);
  18. Assert.Equal ("\x1b[?1003l\x1b[?1015l\u001b[?1006l", EscSeqUtils.CSI_DisableMouseEvents);
  19. }
  20. [Fact]
  21. public void GetConsoleInputKey_ConsoleKeyInfo ()
  22. {
  23. var cki = new ConsoleKeyInfo ('r', 0, false, false, false);
  24. var expectedCki = new ConsoleKeyInfo ('r', ConsoleKey.R, false, false, false);
  25. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  26. cki = new ('r', 0, true, false, false);
  27. expectedCki = new ('r', ConsoleKey.R, true, false, false);
  28. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  29. cki = new ('r', 0, false, true, false);
  30. expectedCki = new ('r', ConsoleKey.R, false, true, false);
  31. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  32. cki = new ('r', 0, false, false, true);
  33. expectedCki = new ('r', ConsoleKey.R, false, false, true);
  34. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  35. cki = new ('r', 0, true, true, false);
  36. expectedCki = new ('r', ConsoleKey.R, true, true, false);
  37. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  38. cki = new ('r', 0, false, true, true);
  39. expectedCki = new ('r', ConsoleKey.R, false, true, true);
  40. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  41. cki = new ('r', 0, true, true, true);
  42. expectedCki = new ('r', ConsoleKey.R, true, true, true);
  43. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  44. cki = new ('\u0012', 0, false, false, false);
  45. expectedCki = new ('\u0012', ConsoleKey.R, false, false, true);
  46. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  47. cki = new ('\0', (ConsoleKey)64, false, false, true);
  48. expectedCki = new ('\0', ConsoleKey.Spacebar, false, false, true);
  49. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  50. cki = new ('\r', 0, false, false, false);
  51. expectedCki = new ('\r', ConsoleKey.Enter, false, false, false);
  52. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  53. cki = new ('\u007f', 0, false, false, false);
  54. expectedCki = new ('\u007f', ConsoleKey.Backspace, false, false, false);
  55. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  56. cki = new ('R', 0, false, false, false);
  57. expectedCki = new ('R', ConsoleKey.R, true, false, false);
  58. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  59. }
  60. [Theory]
  61. [InlineData (0, 0, $"{EscSeqUtils.CSI}0;0H")]
  62. [InlineData (int.MaxValue, int.MaxValue, $"{EscSeqUtils.CSI}2147483647;2147483647H")]
  63. [InlineData (int.MinValue, int.MinValue, $"{EscSeqUtils.CSI}-2147483648;-2147483648H")]
  64. public void CSI_WriteCursorPosition_ReturnsCorrectEscSeq (int row, int col, string expected)
  65. {
  66. StringBuilder builder = new();
  67. using StringWriter writer = new(builder);
  68. EscSeqUtils.CSI_WriteCursorPosition (writer, row, col);
  69. string actual = builder.ToString();
  70. Assert.Equal (expected, actual);
  71. }
  72. [Theory]
  73. [InlineData ('\u001B', KeyCode.Esc)]
  74. [InlineData ('\r', KeyCode.Enter)]
  75. [InlineData ('1', KeyCode.D1)]
  76. [InlineData ('!', (KeyCode)'!')]
  77. [InlineData ('a', KeyCode.A)]
  78. [InlineData ('A', KeyCode.A | KeyCode.ShiftMask)]
  79. public void MapChar_Returns_Modifiers_If_Needed (char ch, KeyCode keyCode)
  80. {
  81. ConsoleKeyInfo cki = EscSeqUtils.MapChar (ch);
  82. Key key = EscSeqUtils.MapKey (cki);
  83. Key expectedKey = keyCode;
  84. Assert.Equal (key, expectedKey);
  85. }
  86. }