TerminalTests.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include <stdio.h>
  2. #include "../Tests.hpp"
  3. #include "core/Clock.hpp"
  4. #include "core/Logger.hpp"
  5. #include "core/Terminal.hpp"
  6. #include "core/Test.hpp"
  7. #define KEY_CASE(key) \
  8. case key: puts(#key); break
  9. void testTerminal(bool tty) {
  10. Core::IntVector2 size = Core::getTerminalSize();
  11. if(tty) {
  12. TEST_TRUE(size[0] > 0);
  13. TEST_TRUE(size[1] > 0);
  14. TEST_FALSE(Core::enterRawTerminal());
  15. TEST_FALSE(Core::leaveRawTerminal());
  16. } else {
  17. TEST(0, size[0]);
  18. TEST(0, size[1]);
  19. }
  20. Core::enterAlternativeTerminal();
  21. Core::clearTerminal();
  22. Core::resetCursor();
  23. LOG_ERROR("Not visible!");
  24. Core::leaveAlternativeTerminal();
  25. LOG_ERROR("Not visible!");
  26. Core::moveCursorUp(2);
  27. Core::moveCursorDown(1);
  28. Core::moveCursorLeft(3);
  29. Core::moveCursorRight(3);
  30. Core::clearTerminalLine();
  31. Core::hideCursor();
  32. Core::showCursor();
  33. u64 u = TERMINAL_KEY_F5 | TERMINAL_KEY_SHIFT;
  34. TEST_TRUE(Core::isSpecialChar(u));
  35. Core::SpecialChar s = Core::convertToSpecialChar(u);
  36. TEST(TERMINAL_KEY_F5, s.key);
  37. TEST_FALSE(s.alt);
  38. TEST_FALSE(s.control);
  39. TEST_TRUE(s.shift);
  40. }
  41. void testInteractiveTerminal(void) {
  42. Core::enterAlternativeTerminal();
  43. Core::resetCursor();
  44. Core::hideCursor();
  45. puts("Hi there");
  46. LOG_WARNING("This is a test");
  47. Core::IntVector2 v = Core::getTerminalSize();
  48. printf("%d %d\n", v[0], v[1]);
  49. Core::clearTerminal();
  50. Core::resetCursor();
  51. Core::showCursor();
  52. puts("the final!!!");
  53. Core::Clock::sleepMillis(500);
  54. Core::enterRawTerminal();
  55. while(true) {
  56. u64 c = Core::getRawChar();
  57. if(c == 'q') {
  58. break;
  59. } else if(c == 0) {
  60. continue;
  61. } else if(Core::isSpecialChar(c)) {
  62. Core::SpecialChar sc = Core::convertToSpecialChar(c);
  63. if(sc.shift) {
  64. printf("SHIFT + ");
  65. }
  66. if(sc.control) {
  67. printf("CTRL + ");
  68. }
  69. if(sc.alt) {
  70. printf("ALT + ");
  71. }
  72. switch(sc.key) {
  73. KEY_CASE(TERMINAL_KEY_ARROW_LEFT);
  74. KEY_CASE(TERMINAL_KEY_ARROW_RIGHT);
  75. KEY_CASE(TERMINAL_KEY_ARROW_UP);
  76. KEY_CASE(TERMINAL_KEY_ARROW_DOWN);
  77. KEY_CASE(TERMINAL_KEY_DELETE);
  78. KEY_CASE(TERMINAL_KEY_F1);
  79. KEY_CASE(TERMINAL_KEY_F2);
  80. KEY_CASE(TERMINAL_KEY_F3);
  81. KEY_CASE(TERMINAL_KEY_F4);
  82. KEY_CASE(TERMINAL_KEY_F5);
  83. KEY_CASE(TERMINAL_KEY_F6);
  84. KEY_CASE(TERMINAL_KEY_F7);
  85. KEY_CASE(TERMINAL_KEY_F8);
  86. KEY_CASE(TERMINAL_KEY_F9);
  87. KEY_CASE(TERMINAL_KEY_F10);
  88. KEY_CASE(TERMINAL_KEY_F11);
  89. KEY_CASE(TERMINAL_KEY_F12);
  90. KEY_CASE(TERMINAL_KEY_PAGE_UP);
  91. KEY_CASE(TERMINAL_KEY_PAGE_DOWN);
  92. KEY_CASE(TERMINAL_KEY_HOME);
  93. KEY_CASE(TERMINAL_KEY_END);
  94. default: printf("%lu\n", sc.key); break;
  95. }
  96. } else {
  97. printf("%lu\n", c);
  98. }
  99. }
  100. Core::leaveRawTerminal();
  101. Core::leaveAlternativeTerminal();
  102. }