DeserializationError.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2025, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include <sstream>
  7. void testStringification(DeserializationError error, std::string expected) {
  8. REQUIRE(error.c_str() == expected);
  9. }
  10. void testBoolification(DeserializationError error, bool expected) {
  11. // DeserializationError on left-hand side
  12. CHECK(bool(error) == expected);
  13. CHECK(bool(error) != !expected);
  14. CHECK(!bool(error) == !expected);
  15. // DeserializationError on right-hand side
  16. CHECK(expected == bool(error));
  17. CHECK(!expected != bool(error));
  18. CHECK(!expected == !bool(error));
  19. }
  20. #define TEST_STRINGIFICATION(symbol) \
  21. testStringification(DeserializationError::symbol, #symbol)
  22. #define TEST_BOOLIFICATION(symbol, expected) \
  23. testBoolification(DeserializationError::symbol, expected)
  24. TEST_CASE("DeserializationError") {
  25. SECTION("c_str()") {
  26. TEST_STRINGIFICATION(Ok);
  27. TEST_STRINGIFICATION(EmptyInput);
  28. TEST_STRINGIFICATION(IncompleteInput);
  29. TEST_STRINGIFICATION(InvalidInput);
  30. TEST_STRINGIFICATION(NoMemory);
  31. TEST_STRINGIFICATION(TooDeep);
  32. }
  33. SECTION("as boolean") {
  34. TEST_BOOLIFICATION(Ok, false);
  35. TEST_BOOLIFICATION(EmptyInput, true);
  36. TEST_BOOLIFICATION(IncompleteInput, true);
  37. TEST_BOOLIFICATION(InvalidInput, true);
  38. TEST_BOOLIFICATION(NoMemory, true);
  39. TEST_BOOLIFICATION(TooDeep, true);
  40. }
  41. SECTION("ostream DeserializationError") {
  42. std::stringstream s;
  43. s << DeserializationError(DeserializationError::InvalidInput);
  44. REQUIRE(s.str() == "InvalidInput");
  45. }
  46. SECTION("ostream DeserializationError::Code") {
  47. std::stringstream s;
  48. s << DeserializationError::InvalidInput;
  49. REQUIRE(s.str() == "InvalidInput");
  50. }
  51. SECTION("switch") {
  52. DeserializationError err = DeserializationError::InvalidInput;
  53. switch (err.code()) {
  54. case DeserializationError::InvalidInput:
  55. SUCCEED();
  56. break;
  57. default:
  58. FAIL();
  59. break;
  60. }
  61. }
  62. SECTION("Use in a condition") {
  63. DeserializationError invalidInput(DeserializationError::InvalidInput);
  64. DeserializationError ok(DeserializationError::Ok);
  65. SECTION("if (!err)") {
  66. if (!invalidInput)
  67. FAIL();
  68. }
  69. SECTION("if (err)") {
  70. if (ok)
  71. FAIL();
  72. }
  73. }
  74. SECTION("Comparisons") {
  75. DeserializationError invalidInput(DeserializationError::InvalidInput);
  76. DeserializationError ok(DeserializationError::Ok);
  77. SECTION("DeserializationError == Code") {
  78. REQUIRE(invalidInput == DeserializationError::InvalidInput);
  79. REQUIRE(ok == DeserializationError::Ok);
  80. }
  81. SECTION("Code == DeserializationError") {
  82. REQUIRE(DeserializationError::InvalidInput == invalidInput);
  83. REQUIRE(DeserializationError::Ok == ok);
  84. }
  85. SECTION("DeserializationError != Code") {
  86. REQUIRE(invalidInput != DeserializationError::Ok);
  87. REQUIRE(ok != DeserializationError::InvalidInput);
  88. }
  89. SECTION("Code != DeserializationError") {
  90. REQUIRE(DeserializationError::Ok != invalidInput);
  91. REQUIRE(DeserializationError::InvalidInput != ok);
  92. }
  93. SECTION("DeserializationError == DeserializationError") {
  94. REQUIRE_FALSE(invalidInput == ok);
  95. }
  96. SECTION("DeserializationError != DeserializationError") {
  97. REQUIRE(invalidInput != ok);
  98. }
  99. }
  100. }