You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.3 KiB
122 lines
3.3 KiB
// ArduinoJson - https://arduinojson.org |
|
// Copyright © 2014-2024, Benoit BLANCHON |
|
// MIT License |
|
|
|
#include <ArduinoJson.h> |
|
#include <catch.hpp> |
|
|
|
#include <sstream> |
|
|
|
void testStringification(DeserializationError error, std::string expected) { |
|
REQUIRE(error.c_str() == expected); |
|
} |
|
|
|
void testBoolification(DeserializationError error, bool expected) { |
|
// DeserializationError on left-hand side |
|
CHECK(bool(error) == expected); |
|
CHECK(bool(error) != !expected); |
|
CHECK(!bool(error) == !expected); |
|
|
|
// DeserializationError on right-hand side |
|
CHECK(expected == bool(error)); |
|
CHECK(!expected != bool(error)); |
|
CHECK(!expected == !bool(error)); |
|
} |
|
|
|
#define TEST_STRINGIFICATION(symbol) \ |
|
testStringification(DeserializationError::symbol, #symbol) |
|
|
|
#define TEST_BOOLIFICATION(symbol, expected) \ |
|
testBoolification(DeserializationError::symbol, expected) |
|
|
|
TEST_CASE("DeserializationError") { |
|
SECTION("c_str()") { |
|
TEST_STRINGIFICATION(Ok); |
|
TEST_STRINGIFICATION(EmptyInput); |
|
TEST_STRINGIFICATION(IncompleteInput); |
|
TEST_STRINGIFICATION(InvalidInput); |
|
TEST_STRINGIFICATION(NoMemory); |
|
TEST_STRINGIFICATION(TooDeep); |
|
} |
|
|
|
SECTION("as boolean") { |
|
TEST_BOOLIFICATION(Ok, false); |
|
TEST_BOOLIFICATION(EmptyInput, true); |
|
TEST_BOOLIFICATION(IncompleteInput, true); |
|
TEST_BOOLIFICATION(InvalidInput, true); |
|
TEST_BOOLIFICATION(NoMemory, true); |
|
TEST_BOOLIFICATION(TooDeep, true); |
|
} |
|
|
|
SECTION("ostream DeserializationError") { |
|
std::stringstream s; |
|
s << DeserializationError(DeserializationError::InvalidInput); |
|
REQUIRE(s.str() == "InvalidInput"); |
|
} |
|
|
|
SECTION("ostream DeserializationError::Code") { |
|
std::stringstream s; |
|
s << DeserializationError::InvalidInput; |
|
REQUIRE(s.str() == "InvalidInput"); |
|
} |
|
|
|
SECTION("switch") { |
|
DeserializationError err = DeserializationError::InvalidInput; |
|
switch (err.code()) { |
|
case DeserializationError::InvalidInput: |
|
SUCCEED(); |
|
break; |
|
default: |
|
FAIL(); |
|
break; |
|
} |
|
} |
|
|
|
SECTION("Use in a condition") { |
|
DeserializationError invalidInput(DeserializationError::InvalidInput); |
|
DeserializationError ok(DeserializationError::Ok); |
|
|
|
SECTION("if (!err)") { |
|
if (!invalidInput) |
|
FAIL(); |
|
} |
|
|
|
SECTION("if (err)") { |
|
if (ok) |
|
FAIL(); |
|
} |
|
} |
|
|
|
SECTION("Comparisons") { |
|
DeserializationError invalidInput(DeserializationError::InvalidInput); |
|
DeserializationError ok(DeserializationError::Ok); |
|
|
|
SECTION("DeserializationError == Code") { |
|
REQUIRE(invalidInput == DeserializationError::InvalidInput); |
|
REQUIRE(ok == DeserializationError::Ok); |
|
} |
|
|
|
SECTION("Code == DeserializationError") { |
|
REQUIRE(DeserializationError::InvalidInput == invalidInput); |
|
REQUIRE(DeserializationError::Ok == ok); |
|
} |
|
|
|
SECTION("DeserializationError != Code") { |
|
REQUIRE(invalidInput != DeserializationError::Ok); |
|
REQUIRE(ok != DeserializationError::InvalidInput); |
|
} |
|
|
|
SECTION("Code != DeserializationError") { |
|
REQUIRE(DeserializationError::Ok != invalidInput); |
|
REQUIRE(DeserializationError::InvalidInput != ok); |
|
} |
|
|
|
SECTION("DeserializationError == DeserializationError") { |
|
REQUIRE_FALSE(invalidInput == ok); |
|
} |
|
|
|
SECTION("DeserializationError != DeserializationError") { |
|
REQUIRE(invalidInput != ok); |
|
} |
|
} |
|
}
|
|
|