ReadLineTests.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <stdio.h>
  2. #include <threads.h>
  3. #include "../Tests.h"
  4. #include "../src/ErrorSimulator.h"
  5. #include "core/ReadLine.h"
  6. static void sleepMillis(int millis) {
  7. struct timespec t = {.tv_nsec = millis * 1000000};
  8. thrd_sleep(&t, nullptr);
  9. }
  10. static void testStringError(int line, const char* s) {
  11. char buffer[256];
  12. for(int i = 0; i < 200; i++) {
  13. if(readLine(buffer, sizeof(buffer))) {
  14. break;
  15. }
  16. sleepMillis(10);
  17. }
  18. if(!testString(__FILE__, line, s, buffer)) {
  19. const char* p = buffer;
  20. printf("Invalid sequence: ");
  21. while(*p != 0) {
  22. printf("%u ", (unsigned int)*p & 0xFF);
  23. p++;
  24. }
  25. putchar('\n');
  26. p = s;
  27. printf("Correct sequence: ");
  28. while(*p != 0) {
  29. printf("%u ", (unsigned int)*p & 0xFF);
  30. p++;
  31. }
  32. putchar('\n');
  33. }
  34. }
  35. void testReadLine(void) {
  36. #ifdef ERROR_SIMULATOR
  37. failMutexInit = true;
  38. if(!TEST_TRUE(startReadLine())) {
  39. return;
  40. }
  41. failMutexInit = false;
  42. failThreadInit = true;
  43. if(!TEST_TRUE(startReadLine())) {
  44. return;
  45. }
  46. failThreadInit = false;
  47. failMutexLock = true;
  48. failMutexUnlock = true;
  49. #endif
  50. if(!TEST_FALSE(startReadLine())) {
  51. return;
  52. }
  53. testStringError(__LINE__, "wusi");
  54. #ifdef ERROR_SIMULATOR
  55. failMutexLock = false;
  56. failMutexUnlock = false;
  57. #endif
  58. testStringError(__LINE__, "gusi");
  59. testStringError(__LINE__, "abc");
  60. testStringError(__LINE__, "abc");
  61. testStringError(__LINE__, "abd");
  62. testStringError(__LINE__, "abö");
  63. testStringError(__LINE__, "ghi");
  64. testStringError(__LINE__, "abcghi");
  65. testStringError(__LINE__, "abcghi");
  66. testStringError(__LINE__, "abö");
  67. testStringError(__LINE__, "abac");
  68. testStringError(
  69. __LINE__,
  70. "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  71. "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  72. "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  73. "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbb");
  74. testStringError(__LINE__, "abäo");
  75. testStringError(__LINE__, "bäöo");
  76. stopReadLine();
  77. }