From 4592f23260d5a4a75c6cce0065141de609bc2e46 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 15 May 2018 18:23:09 +0200 Subject: [PATCH] Merged MsgPackError and JsonError into DeserializationError. Return NotSupported if the JSON input contains "\u". --- CHANGELOG.md | 2 +- examples/JsonConfigFile/JsonConfigFile.ino | 2 +- examples/JsonHttpClient/JsonHttpClient.ino | 2 +- .../JsonParserExample/JsonParserExample.ino | 2 +- examples/MsgPackParser/MsgPackParser.ino | 2 +- fuzzing/fuzzer.cpp | 4 +- ...JsonError.hpp => DeserializationError.hpp} | 31 ++- .../Json/Deserialization/JsonDeserializer.hpp | 79 +++---- .../MsgPack/MsgPackDeserializer.hpp | 97 ++++---- src/ArduinoJson/MsgPack/MsgPackError.hpp | 74 ------ src/ArduinoJson/deserializeJson.hpp | 21 +- src/ArduinoJson/deserializeMsgPack.hpp | 18 +- test/DynamicJsonBuffer/no_memory.cpp | 4 +- test/IntegrationTests/gbathree.cpp | 4 +- test/JsonArray/copyTo.cpp | 12 +- test/JsonDeserializer/CMakeLists.txt | 2 +- ...JsonError.cpp => DeserializationError.cpp} | 14 +- .../JsonDeserializer/deserializeJsonArray.cpp | 177 +++++++------- .../deserializeJsonArrayStatic.cpp | 24 +- .../deserializeJsonObject.cpp | 216 ++++++++++-------- .../deserializeJsonObjectStatic.cpp | 20 +- .../JsonDeserializer/deserializeJsonValue.cpp | 97 ++++---- test/JsonDeserializer/nestingLimit.cpp | 5 +- test/JsonDeserializer/std_istream.cpp | 8 +- test/JsonDeserializer/std_string.cpp | 12 +- test/Misc/unsigned_char.cpp | 8 +- test/Misc/vla.cpp | 8 +- test/MsgPack/CMakeLists.txt | 1 - test/MsgPack/MsgPackError.cpp | 44 ---- test/MsgPack/deserializeArray.cpp | 24 +- test/MsgPack/deserializeObject.cpp | 24 +- test/MsgPack/deserializeStaticVariant.cpp | 111 ++++----- test/MsgPack/deserializeVariant.cpp | 4 +- test/MsgPack/incompleteInput.cpp | 6 +- test/MsgPack/nestingLimit.cpp | 21 +- test/MsgPack/notSupported.cpp | 4 +- test/MsgPack/std_istream.cpp | 8 +- test/MsgPack/std_string.cpp | 18 +- 38 files changed, 574 insertions(+), 636 deletions(-) rename src/ArduinoJson/{JsonError.hpp => DeserializationError.hpp} (52%) delete mode 100644 src/ArduinoJson/MsgPack/MsgPackError.hpp rename test/JsonDeserializer/{JsonError.cpp => DeserializationError.cpp} (66%) delete mode 100644 test/MsgPack/MsgPackError.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index dce5d9a1..78b53dee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ HEAD > > ```c++ > DynamicJsonDocument doc; -> JsonError error = deserializeJson(doc, json); +> DeserializationError error = deserializeJson(doc, json); > if (error) { > > } diff --git a/examples/JsonConfigFile/JsonConfigFile.ino b/examples/JsonConfigFile/JsonConfigFile.ino index 6134f587..2d5956ce 100644 --- a/examples/JsonConfigFile/JsonConfigFile.ino +++ b/examples/JsonConfigFile/JsonConfigFile.ino @@ -35,7 +35,7 @@ void loadConfiguration(const char *filename, Config &config) { StaticJsonDocument<512> doc; // Deserialize the JSON document - JsonError error = deserializeJson(doc, file); + DeserializationError error = deserializeJson(doc, file); if (error) Serial.println(F("Failed to read file, using default configuration")); diff --git a/examples/JsonHttpClient/JsonHttpClient.ino b/examples/JsonHttpClient/JsonHttpClient.ino index 41b130ef..73f6b15e 100644 --- a/examples/JsonHttpClient/JsonHttpClient.ino +++ b/examples/JsonHttpClient/JsonHttpClient.ino @@ -76,7 +76,7 @@ void setup() { DynamicJsonDocument doc(capacity); // Parse JSON object - JsonError error = deserializeJson(doc, client); + DeserializationError error = deserializeJson(doc, client); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.c_str()); diff --git a/examples/JsonParserExample/JsonParserExample.ino b/examples/JsonParserExample/JsonParserExample.ino index d7926cf9..1001350c 100644 --- a/examples/JsonParserExample/JsonParserExample.ino +++ b/examples/JsonParserExample/JsonParserExample.ino @@ -32,7 +32,7 @@ void setup() { "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; // Deserialize the JSON document - JsonError error = deserializeJson(doc, json); + DeserializationError error = deserializeJson(doc, json); // Test if parsing succeeds. if (error) { diff --git a/examples/MsgPackParser/MsgPackParser.ino b/examples/MsgPackParser/MsgPackParser.ino index 381fffd1..5798aff4 100644 --- a/examples/MsgPackParser/MsgPackParser.ino +++ b/examples/MsgPackParser/MsgPackParser.ino @@ -45,7 +45,7 @@ void setup() { // It's a reference to the JsonObject, the actual bytes are inside the // JsonBuffer with all the other nodes of the object tree. // Memory is freed when jsonBuffer goes out of scope. - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); // Test if parsing succeeds. if (error) { diff --git a/fuzzing/fuzzer.cpp b/fuzzing/fuzzer.cpp index 0c5a19af..8ceacaf4 100644 --- a/fuzzing/fuzzer.cpp +++ b/fuzzing/fuzzer.cpp @@ -18,8 +18,8 @@ class memstream : public std::istream { extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { DynamicJsonDocument doc; memstream json(data, size); - JsonError error = deserializeJson(doc, json); - if (error == JsonError::Ok) { + DeserializationError error = deserializeJson(doc, json); + if (error == DeserializationError::Ok) { JsonVariant variant = doc.as(); variant.as(); // <- serialize to JSON } diff --git a/src/ArduinoJson/JsonError.hpp b/src/ArduinoJson/DeserializationError.hpp similarity index 52% rename from src/ArduinoJson/JsonError.hpp rename to src/ArduinoJson/DeserializationError.hpp index cc988bed..724f2ab9 100644 --- a/src/ArduinoJson/JsonError.hpp +++ b/src/ArduinoJson/DeserializationError.hpp @@ -10,25 +10,33 @@ namespace ArduinoJson { -class JsonError { +class DeserializationError { public: - enum Code { Ok, TooDeep, NoMemory, InvalidInput, IncompleteInput }; + enum Code { + Ok, + IncompleteInput, + InvalidInput, + NoMemory, + NotSupported, + TooDeep + }; - JsonError(Code code) : _code(code) {} + DeserializationError() {} + DeserializationError(Code code) : _code(code) {} - friend bool operator==(const JsonError& err, Code code) { + friend bool operator==(const DeserializationError& err, Code code) { return err._code == code; } - friend bool operator==(Code code, const JsonError& err) { + friend bool operator==(Code code, const DeserializationError& err) { return err._code == code; } - friend bool operator!=(const JsonError& err, Code code) { + friend bool operator!=(const DeserializationError& err, Code code) { return err._code != code; } - friend bool operator!=(Code code, const JsonError& err) { + friend bool operator!=(Code code, const DeserializationError& err) { return err._code != code; } @@ -48,6 +56,8 @@ class JsonError { return "InvalidInput"; case IncompleteInput: return "IncompleteInput"; + case NotSupported: + return "NotSupported"; default: return "???"; } @@ -58,13 +68,14 @@ class JsonError { }; #if ARDUINOJSON_ENABLE_STD_STREAM -inline std::ostream& operator<<(std::ostream& s, const JsonError& e) { +inline std::ostream& operator<<(std::ostream& s, + const DeserializationError& e) { s << e.c_str(); return s; } -inline std::ostream& operator<<(std::ostream& s, JsonError::Code c) { - s << JsonError(c).c_str(); +inline std::ostream& operator<<(std::ostream& s, DeserializationError::Code c) { + s << DeserializationError(c).c_str(); return s; } #endif diff --git a/src/ArduinoJson/Json/Deserialization/JsonDeserializer.hpp b/src/ArduinoJson/Json/Deserialization/JsonDeserializer.hpp index 73026e37..3b5d3301 100644 --- a/src/ArduinoJson/Json/Deserialization/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/Deserialization/JsonDeserializer.hpp @@ -4,7 +4,7 @@ #pragma once -#include "../../JsonError.hpp" +#include "../../DeserializationError.hpp" #include "../../JsonVariant.hpp" #include "../../Memory/JsonBuffer.hpp" #include "../../Reading/Reader.hpp" @@ -24,8 +24,8 @@ class JsonDeserializer { _writer(writer), _nestingLimit(nestingLimit), _loaded(false) {} - JsonError parse(JsonVariant &variant) { - JsonError err = skipSpacesAndComments(); + DeserializationError parse(JsonVariant &variant) { + DeserializationError err = skipSpacesAndComments(); if (err) return err; switch (current()) { @@ -64,22 +64,22 @@ class JsonDeserializer { return true; } - JsonError parseArray(JsonVariant &variant) { - if (_nestingLimit == 0) return JsonError::TooDeep; + DeserializationError parseArray(JsonVariant &variant) { + if (_nestingLimit == 0) return DeserializationError::TooDeep; JsonArray *array = new (_buffer) JsonArray(_buffer); - if (!array) return JsonError::NoMemory; + if (!array) return DeserializationError::NoMemory; variant = array; // Check opening braket - if (!eat('[')) return JsonError::InvalidInput; + if (!eat('[')) return DeserializationError::InvalidInput; // Skip spaces - JsonError err = skipSpacesAndComments(); + DeserializationError err = skipSpacesAndComments(); if (err) return err; // Empty array? - if (eat(']')) return JsonError::Ok; + if (eat(']')) return DeserializationError::Ok; // Read each value for (;;) { @@ -89,34 +89,34 @@ class JsonDeserializer { err = parse(value); _nestingLimit++; if (err) return err; - if (!array->add(value)) return JsonError::NoMemory; + if (!array->add(value)) return DeserializationError::NoMemory; // 2 - Skip spaces err = skipSpacesAndComments(); if (err) return err; // 3 - More values? - if (eat(']')) return JsonError::Ok; - if (!eat(',')) return JsonError::InvalidInput; + if (eat(']')) return DeserializationError::Ok; + if (!eat(',')) return DeserializationError::InvalidInput; } } - JsonError parseObject(JsonVariant &variant) { - if (_nestingLimit == 0) return JsonError::TooDeep; + DeserializationError parseObject(JsonVariant &variant) { + if (_nestingLimit == 0) return DeserializationError::TooDeep; JsonObject *object = new (_buffer) JsonObject(_buffer); - if (!object) return JsonError::NoMemory; + if (!object) return DeserializationError::NoMemory; variant = object; // Check opening brace - if (!eat('{')) return JsonError::InvalidInput; + if (!eat('{')) return DeserializationError::InvalidInput; // Skip spaces - JsonError err = skipSpacesAndComments(); + DeserializationError err = skipSpacesAndComments(); if (err) return err; // Empty object? - if (eat('}')) return JsonError::Ok; + if (eat('}')) return DeserializationError::Ok; // Read each key value pair for (;;) { @@ -130,7 +130,7 @@ class JsonDeserializer { if (err) return err; // Colon - if (!eat(':')) return JsonError::InvalidInput; + if (!eat(':')) return DeserializationError::InvalidInput; // Parse value JsonVariant value; @@ -138,15 +138,15 @@ class JsonDeserializer { err = parse(value); _nestingLimit++; if (err) return err; - if (!object->set(key, value)) return JsonError::NoMemory; + if (!object->set(key, value)) return DeserializationError::NoMemory; // Skip spaces err = skipSpacesAndComments(); if (err) return err; // More keys/values? - if (eat('}')) return JsonError::Ok; - if (!eat(',')) return JsonError::InvalidInput; + if (eat('}')) return DeserializationError::Ok; + if (!eat(',')) return DeserializationError::InvalidInput; // Skip spaces err = skipSpacesAndComments(); @@ -154,24 +154,24 @@ class JsonDeserializer { } } - JsonError parseValue(JsonVariant &variant) { + DeserializationError parseValue(JsonVariant &variant) { bool hasQuotes = isQuote(current()); const char *value; - JsonError error = parseString(&value); + DeserializationError error = parseString(&value); if (error) return error; if (hasQuotes) { variant = value; } else { variant = RawJson(value); } - return JsonError::Ok; + return DeserializationError::Ok; } - JsonError parseString(const char **result) { + DeserializationError parseString(const char **result) { typename RemoveReference::type::String str = _writer.startString(); char c = current(); - if (c == '\0') return JsonError::IncompleteInput; + if (c == '\0') return DeserializationError::IncompleteInput; if (isQuote(c)) { // quotes move(); @@ -181,14 +181,15 @@ class JsonDeserializer { move(); if (c == stopChar) break; - if (c == '\0') return JsonError::IncompleteInput; + if (c == '\0') return DeserializationError::IncompleteInput; if (c == '\\') { c = current(); - if (c == 0) return JsonError::IncompleteInput; + if (c == '\0') return DeserializationError::IncompleteInput; + if (c == 'u') return DeserializationError::NotSupported; // replace char c = Encoding::unescapeChar(c); - if (c == '\0') return JsonError::InvalidInput; + if (c == '\0') return DeserializationError::InvalidInput; move(); } @@ -201,12 +202,12 @@ class JsonDeserializer { c = current(); } while (canBeInNonQuotedString(c)); } else { - return JsonError::InvalidInput; + return DeserializationError::InvalidInput; } *result = str.c_str(); - if (*result == NULL) return JsonError::NoMemory; - return JsonError::Ok; + if (*result == NULL) return DeserializationError::NoMemory; + return DeserializationError::Ok; } static inline bool isBetween(char c, char min, char max) { @@ -222,12 +223,12 @@ class JsonDeserializer { return c == '\'' || c == '\"'; } - JsonError skipSpacesAndComments() { + DeserializationError skipSpacesAndComments() { for (;;) { switch (current()) { // end of string case '\0': - return JsonError::IncompleteInput; + return DeserializationError::IncompleteInput; // spaces case ' ': @@ -247,7 +248,7 @@ class JsonDeserializer { bool wasStar = false; for (;;) { char c = current(); - if (c == '\0') return JsonError::IncompleteInput; + if (c == '\0') return DeserializationError::IncompleteInput; if (c == '/' && wasStar) { move(); break; @@ -264,19 +265,19 @@ class JsonDeserializer { for (;;) { move(); char c = current(); - if (c == '\0') return JsonError::IncompleteInput; + if (c == '\0') return DeserializationError::IncompleteInput; if (c == '\n') break; } break; // not a comment, just a '/' default: - return JsonError::InvalidInput; + return DeserializationError::InvalidInput; } break; default: - return JsonError::Ok; + return DeserializationError::Ok; } } } diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index d7654756..34dc11de 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -4,21 +4,18 @@ #pragma once +#include "../DeserializationError.hpp" #include "../JsonVariant.hpp" #include "../Memory/JsonBuffer.hpp" #include "../Reading/Reader.hpp" #include "../TypeTraits/IsConst.hpp" #include "../Writing/Writer.hpp" -#include "./MsgPackError.hpp" #include "./endianess.hpp" #include "./ieee754.hpp" namespace ArduinoJson { namespace Internals { -// Parse JSON string to create JsonArrays and JsonObjects -// This internal class is not indended to be used directly. -// Instead, use JsonBuffer.parseArray() or .parseObject() template class MsgPackDeserializer { public: @@ -29,18 +26,18 @@ class MsgPackDeserializer { _writer(writer), _nestingLimit(nestingLimit) {} - MsgPackError parse(JsonVariant &variant) { + DeserializationError parse(JsonVariant &variant) { uint8_t code; - if (!readByte(code)) return MsgPackError::IncompleteInput; + if (!readByte(code)) return DeserializationError::IncompleteInput; if ((code & 0x80) == 0) { variant = code; - return MsgPackError::Ok; + return DeserializationError::Ok; } if ((code & 0xe0) == 0xe0) { variant = static_cast(code); - return MsgPackError::Ok; + return DeserializationError::Ok; } if ((code & 0xe0) == 0xa0) { @@ -54,15 +51,15 @@ class MsgPackDeserializer { switch (code) { case 0xc0: variant = static_cast(0); - return MsgPackError::Ok; + return DeserializationError::Ok; case 0xc2: variant = false; - return MsgPackError::Ok; + return DeserializationError::Ok; case 0xc3: variant = true; - return MsgPackError::Ok; + return DeserializationError::Ok; case 0xcc: return readInteger(variant); @@ -94,7 +91,7 @@ class MsgPackDeserializer { #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64 return readInteger(variant); #else - if (!skip(4)) return MsgPackError::IncompleteInput; + if (!skip(4)) return DeserializationError::IncompleteInput; return readInteger(variant); #endif @@ -126,7 +123,7 @@ class MsgPackDeserializer { return readObject(variant); default: - return MsgPackError::NotSupported; + return DeserializationError::NotSupported; } } @@ -176,123 +173,123 @@ class MsgPackDeserializer { } template - MsgPackError readInteger(JsonVariant &variant) { + DeserializationError readInteger(JsonVariant &variant) { T value; - if (!readInteger(value)) return MsgPackError::IncompleteInput; + if (!readInteger(value)) return DeserializationError::IncompleteInput; variant = value; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - typename EnableIf::type readFloat( + typename EnableIf::type readFloat( JsonVariant &variant) { T value; - if (!readBytes(value)) return MsgPackError::IncompleteInput; + if (!readBytes(value)) return DeserializationError::IncompleteInput; fixEndianess(value); variant = value; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - typename EnableIf::type readDouble( + typename EnableIf::type readDouble( JsonVariant &variant) { T value; - if (!readBytes(value)) return MsgPackError::IncompleteInput; + if (!readBytes(value)) return DeserializationError::IncompleteInput; fixEndianess(value); variant = value; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - typename EnableIf::type readDouble( + typename EnableIf::type readDouble( JsonVariant &variant) { uint8_t i[8]; // input is 8 bytes T value; // output is 4 bytes uint8_t *o = reinterpret_cast(&value); - if (!readBytes(i, 8)) return MsgPackError::IncompleteInput; + if (!readBytes(i, 8)) return DeserializationError::IncompleteInput; doubleToFloat(i, o); fixEndianess(value); variant = value; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - MsgPackError readString(JsonVariant &variant) { + DeserializationError readString(JsonVariant &variant) { T size; - if (!readInteger(size)) return MsgPackError::IncompleteInput; + if (!readInteger(size)) return DeserializationError::IncompleteInput; return readString(variant, size); } - MsgPackError readString(JsonVariant &variant, size_t n) { + DeserializationError readString(JsonVariant &variant, size_t n) { typename RemoveReference::type::String str = _writer.startString(); for (; n; --n) { uint8_t c; - if (!readBytes(c)) return MsgPackError::IncompleteInput; + if (!readBytes(c)) return DeserializationError::IncompleteInput; str.append(static_cast(c)); } const char *s = str.c_str(); - if (s == NULL) return MsgPackError::NoMemory; + if (s == NULL) return DeserializationError::NoMemory; variant = s; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - MsgPackError readArray(JsonVariant &variant) { + DeserializationError readArray(JsonVariant &variant) { TSize size; - if (!readInteger(size)) return MsgPackError::IncompleteInput; + if (!readInteger(size)) return DeserializationError::IncompleteInput; return readArray(variant, size); } - MsgPackError readArray(JsonVariant &variant, size_t n) { + DeserializationError readArray(JsonVariant &variant, size_t n) { JsonArray *array = new (_buffer) JsonArray(_buffer); - if (!array) return MsgPackError::NoMemory; + if (!array) return DeserializationError::NoMemory; variant = array; return readArray(*array, n); } - MsgPackError readArray(JsonArray &array, size_t n) { - if (_nestingLimit == 0) return MsgPackError::TooDeep; + DeserializationError readArray(JsonArray &array, size_t n) { + if (_nestingLimit == 0) return DeserializationError::TooDeep; --_nestingLimit; for (; n; --n) { JsonVariant variant; - MsgPackError err = parse(variant); + DeserializationError err = parse(variant); if (err) return err; - if (!array.add(variant)) return MsgPackError::NoMemory; + if (!array.add(variant)) return DeserializationError::NoMemory; } ++_nestingLimit; - return MsgPackError::Ok; + return DeserializationError::Ok; } template - MsgPackError readObject(JsonVariant &variant) { + DeserializationError readObject(JsonVariant &variant) { TSize size; - if (!readInteger(size)) return MsgPackError::IncompleteInput; + if (!readInteger(size)) return DeserializationError::IncompleteInput; return readObject(variant, size); } - MsgPackError readObject(JsonVariant &variant, size_t n) { + DeserializationError readObject(JsonVariant &variant, size_t n) { JsonObject *object = new (_buffer) JsonObject(_buffer); - if (!object) return MsgPackError::NoMemory; + if (!object) return DeserializationError::NoMemory; variant = object; return readObject(*object, n); } - MsgPackError readObject(JsonObject &object, size_t n) { - if (_nestingLimit == 0) return MsgPackError::TooDeep; + DeserializationError readObject(JsonObject &object, size_t n) { + if (_nestingLimit == 0) return DeserializationError::TooDeep; --_nestingLimit; for (; n; --n) { - MsgPackError err; + DeserializationError err; JsonVariant variant; err = parse(variant); if (err) return err; const char *key = variant.as(); - if (!key) return MsgPackError::NotSupported; + if (!key) return DeserializationError::NotSupported; err = parse(variant); if (err) return err; - if (!object.set(key, variant)) return MsgPackError::NoMemory; + if (!object.set(key, variant)) return DeserializationError::NoMemory; } ++_nestingLimit; - return MsgPackError::Ok; + return DeserializationError::Ok; } JsonBuffer *_buffer; diff --git a/src/ArduinoJson/MsgPack/MsgPackError.hpp b/src/ArduinoJson/MsgPack/MsgPackError.hpp deleted file mode 100644 index ed3a8a12..00000000 --- a/src/ArduinoJson/MsgPack/MsgPackError.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// ArduinoJson - arduinojson.org -// Copyright Benoit Blanchon 2014-2018 -// MIT License - -#pragma once - -#if ARDUINOJSON_ENABLE_STD_STREAM -#include -#endif - -namespace ArduinoJson { - -class MsgPackError { - public: - enum Code { Ok, NotSupported, NoMemory, TooDeep, IncompleteInput }; - - MsgPackError() {} - - MsgPackError(Code code) : _code(code) {} - - operator bool() const { - return _code != Ok; - } - - friend bool operator==(const MsgPackError& err, Code code) { - return err._code == code; - } - - friend bool operator==(Code code, const MsgPackError& err) { - return err._code == code; - } - - friend bool operator!=(const MsgPackError& err, Code code) { - return err._code != code; - } - - friend bool operator!=(Code code, const MsgPackError& err) { - return err._code != code; - } - - const char* c_str() const { - switch (_code) { - case Ok: - return "Ok"; - case NotSupported: - return "NotSupported"; - case NoMemory: - return "NoMemory"; - case TooDeep: - return "TooDeep"; - case IncompleteInput: - return "IncompleteInput"; - default: - return "???"; - } - } - - private: - Code _code; -}; - -#if ARDUINOJSON_ENABLE_STD_STREAM -inline std::ostream& operator<<(std::ostream& os, const MsgPackError& err) { - os << err.c_str(); - return os; -} - -inline std::ostream& operator<<(std::ostream& os, MsgPackError::Code code) { - os << MsgPackError(code).c_str(); - return os; -} -#endif - -} // namespace ArduinoJson diff --git a/src/ArduinoJson/deserializeJson.hpp b/src/ArduinoJson/deserializeJson.hpp index bda81ac6..b0eafc8b 100644 --- a/src/ArduinoJson/deserializeJson.hpp +++ b/src/ArduinoJson/deserializeJson.hpp @@ -9,12 +9,12 @@ #include "Writing/Writer.hpp" namespace ArduinoJson { -// JsonError deserializeJson(TDocument& doc, TString input); +// DeserializationError deserializeJson(TDocument& doc, TString input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TString = const std::string&, const String& template typename Internals::EnableIf::value, - JsonError>::type + DeserializationError>::type deserializeJson(TDocument &doc, const TString &input) { using namespace Internals; return makeJsonDeserializer(&doc.buffer(), makeReader(input), @@ -22,33 +22,34 @@ deserializeJson(TDocument &doc, const TString &input) { .parse(doc.template to()); } // -// JsonError deserializeJson(TDocument& doc, TChar* input); +// DeserializationError deserializeJson(TDocument& doc, TChar* input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TChar* = char*, const char*, const FlashStringHelper* template -JsonError deserializeJson(TDocument &doc, TChar *input) { +DeserializationError deserializeJson(TDocument &doc, TChar *input) { using namespace Internals; return makeJsonDeserializer(&doc.buffer(), makeReader(input), makeWriter(doc.buffer(), input), doc.nestingLimit) .parse(doc.template to()); } // -// JsonError deserializeJson(TDocument& doc, TChar* input, size_t inputSize); -// TDocument = DynamicJsonDocument, StaticJsonDocument -// TChar* = char*, const char*, const FlashStringHelper* +// DeserializationError deserializeJson(TDocument& doc, TChar* input, size_t +// inputSize); TDocument = DynamicJsonDocument, StaticJsonDocument TChar* = +// char*, const char*, const FlashStringHelper* template -JsonError deserializeJson(TDocument &doc, TChar *input, size_t inputSize) { +DeserializationError deserializeJson(TDocument &doc, TChar *input, + size_t inputSize) { using namespace Internals; return makeJsonDeserializer(&doc.buffer(), makeReader(input, inputSize), makeWriter(doc.buffer(), input), doc.nestingLimit) .parse(doc.template to()); } // -// JsonError deserializeJson(TDocument& doc, TStream input); +// DeserializationError deserializeJson(TDocument& doc, TStream input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TStream = std::istream&, Stream& template -JsonError deserializeJson(TDocument &doc, TStream &input) { +DeserializationError deserializeJson(TDocument &doc, TStream &input) { using namespace Internals; return makeJsonDeserializer(&doc.buffer(), makeReader(input), makeWriter(doc.buffer(), input), doc.nestingLimit) diff --git a/src/ArduinoJson/deserializeMsgPack.hpp b/src/ArduinoJson/deserializeMsgPack.hpp index 92ac993c..9256a411 100644 --- a/src/ArduinoJson/deserializeMsgPack.hpp +++ b/src/ArduinoJson/deserializeMsgPack.hpp @@ -9,12 +9,12 @@ #include "Writing/Writer.hpp" namespace ArduinoJson { -// MsgPackError deserializeMsgPack(TDocument& doc, TString input); +// DeserializationError deserializeMsgPack(TDocument& doc, TString input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TString = const std::string&, const String& template typename Internals::EnableIf::value, - MsgPackError>::type + DeserializationError>::type deserializeMsgPack(TDocument &doc, const TString &input) { using namespace Internals; return makeMsgPackDeserializer(&doc.buffer(), makeReader(input), @@ -23,11 +23,11 @@ deserializeMsgPack(TDocument &doc, const TString &input) { .parse(doc.template to()); } // -// MsgPackError deserializeMsgPack(TDocument& doc, TChar* input); +// DeserializationError deserializeMsgPack(TDocument& doc, TChar* input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TChar* = char*, const char*, const FlashStringHelper* template -MsgPackError deserializeMsgPack(TDocument &doc, TChar *input) { +DeserializationError deserializeMsgPack(TDocument &doc, TChar *input) { using namespace Internals; return makeMsgPackDeserializer(&doc.buffer(), makeReader(input), makeWriter(doc.buffer(), input), @@ -35,13 +35,13 @@ MsgPackError deserializeMsgPack(TDocument &doc, TChar *input) { .parse(doc.template to()); } // -// MsgPackError deserializeMsgPack(TDocument& doc, TChar* input, size_t +// DeserializationError deserializeMsgPack(TDocument& doc, TChar* input, size_t // inputSize); // TDocument = DynamicJsonDocument, StaticJsonDocument // TChar* = char*, const char*, const FlashStringHelper* template -MsgPackError deserializeMsgPack(TDocument &doc, TChar *input, - size_t inputSize) { +DeserializationError deserializeMsgPack(TDocument &doc, TChar *input, + size_t inputSize) { using namespace Internals; return makeMsgPackDeserializer(&doc.buffer(), makeReader(input, inputSize), makeWriter(doc.buffer(), input), @@ -49,11 +49,11 @@ MsgPackError deserializeMsgPack(TDocument &doc, TChar *input, .parse(doc.template to()); } // -// MsgPackError deserializeMsgPack(TDocument& doc, TStream input); +// DeserializationError deserializeMsgPack(TDocument& doc, TStream input); // TDocument = DynamicJsonDocument, StaticJsonDocument // TStream = std::istream&, Stream& template -MsgPackError deserializeMsgPack(TDocument &doc, TStream &input) { +DeserializationError deserializeMsgPack(TDocument &doc, TStream &input) { using namespace Internals; return makeMsgPackDeserializer(&doc.buffer(), makeReader(input), makeWriter(doc.buffer(), input), diff --git a/test/DynamicJsonBuffer/no_memory.cpp b/test/DynamicJsonBuffer/no_memory.cpp index ecb82b8c..06eec36b 100644 --- a/test/DynamicJsonBuffer/no_memory.cpp +++ b/test/DynamicJsonBuffer/no_memory.cpp @@ -27,9 +27,9 @@ TEST_CASE("DynamicJsonBuffer no memory") { // char json[] = "{[]}"; // DynamicJsonDocument obj; - // JsonError err = deserializeJson(obj, json); + // DeserializationError err = deserializeJson(obj, json); - // REQUIRE(err != JsonError::Ok); + // REQUIRE(err != DeserializationError::Ok); // } SECTION("startString()") { diff --git a/test/IntegrationTests/gbathree.cpp b/test/IntegrationTests/gbathree.cpp index 965022ae..9372fc1d 100644 --- a/test/IntegrationTests/gbathree.cpp +++ b/test/IntegrationTests/gbathree.cpp @@ -8,7 +8,7 @@ TEST_CASE("Gbathree") { DynamicJsonDocument doc; - JsonError error = deserializeJson( + DeserializationError error = deserializeJson( doc, "{\"protocol_name\":\"fluorescence\",\"repeats\":1,\"wait\":0," "\"averages\":1,\"measurements\":3,\"meas2_light\":15,\"meas1_" @@ -23,7 +23,7 @@ TEST_CASE("Gbathree") { JsonObject& root = doc.as(); SECTION("Success") { - REQUIRE(error == JsonError::Ok); + REQUIRE(error == DeserializationError::Ok); } SECTION("ProtocolName") { diff --git a/test/JsonArray/copyTo.cpp b/test/JsonArray/copyTo.cpp index 87c9801e..d9092708 100644 --- a/test/JsonArray/copyTo.cpp +++ b/test/JsonArray/copyTo.cpp @@ -10,8 +10,8 @@ TEST_CASE("JsonArray::copyTo()") { SECTION("BiggerOneDimensionIntegerArray") { char json[] = "[1,2,3]"; - JsonError err = deserializeJson(doc, json); - REQUIRE(err == JsonError::Ok); + DeserializationError err = deserializeJson(doc, json); + REQUIRE(err == DeserializationError::Ok); JsonArray& array = doc.as(); int destination[4] = {0}; @@ -26,8 +26,8 @@ TEST_CASE("JsonArray::copyTo()") { SECTION("SmallerOneDimensionIntegerArray") { char json[] = "[1,2,3]"; - JsonError err = deserializeJson(doc, json); - REQUIRE(err == JsonError::Ok); + DeserializationError err = deserializeJson(doc, json); + REQUIRE(err == DeserializationError::Ok); JsonArray& array = doc.as(); int destination[2] = {0}; @@ -41,8 +41,8 @@ TEST_CASE("JsonArray::copyTo()") { SECTION("TwoOneDimensionIntegerArray") { char json[] = "[[1,2],[3],[4]]"; - JsonError err = deserializeJson(doc, json); - REQUIRE(err == JsonError::Ok); + DeserializationError err = deserializeJson(doc, json); + REQUIRE(err == DeserializationError::Ok); JsonArray& array = doc.as(); int destination[3][2] = {{0}}; diff --git a/test/JsonDeserializer/CMakeLists.txt b/test/JsonDeserializer/CMakeLists.txt index 16cb2460..5624ffdd 100644 --- a/test/JsonDeserializer/CMakeLists.txt +++ b/test/JsonDeserializer/CMakeLists.txt @@ -8,7 +8,7 @@ add_executable(JsonDeserializerTests deserializeJsonObject.cpp deserializeJsonObjectStatic.cpp deserializeJsonValue.cpp - JsonError.cpp + DeserializationError.cpp nestingLimit.cpp std_istream.cpp std_string.cpp diff --git a/test/JsonDeserializer/JsonError.cpp b/test/JsonDeserializer/DeserializationError.cpp similarity index 66% rename from test/JsonDeserializer/JsonError.cpp rename to test/JsonDeserializer/DeserializationError.cpp index b80bd66a..c524f082 100644 --- a/test/JsonDeserializer/JsonError.cpp +++ b/test/JsonDeserializer/DeserializationError.cpp @@ -5,27 +5,28 @@ #include #include -void testStringification(JsonError error, std::string expected) { +void testStringification(DeserializationError error, std::string expected) { REQUIRE(error.c_str() == expected); } -void testBoolification(JsonError error, bool expected) { +void testBoolification(DeserializationError error, bool expected) { CHECK(error == expected); } #define TEST_STRINGIFICATION(symbol) \ - testStringification(JsonError::symbol, #symbol) + testStringification(DeserializationError::symbol, #symbol) #define TEST_BOOLIFICATION(symbol, expected) \ - testBoolification(JsonError::symbol, expected) + testBoolification(DeserializationError::symbol, expected) -TEST_CASE("JsonError") { +TEST_CASE("DeserializationError") { SECTION("c_str()") { TEST_STRINGIFICATION(Ok); TEST_STRINGIFICATION(TooDeep); TEST_STRINGIFICATION(NoMemory); TEST_STRINGIFICATION(InvalidInput); TEST_STRINGIFICATION(IncompleteInput); + TEST_STRINGIFICATION(NotSupported); } SECTION("as boolean") { @@ -34,11 +35,12 @@ TEST_CASE("JsonError") { TEST_BOOLIFICATION(NoMemory, true); TEST_BOOLIFICATION(InvalidInput, true); TEST_BOOLIFICATION(IncompleteInput, true); + TEST_BOOLIFICATION(NotSupported, true); } SECTION("ostream") { std::stringstream s; - s << JsonError::InvalidInput; + s << DeserializationError::InvalidInput; REQUIRE(s.str() == "InvalidInput"); } } diff --git a/test/JsonDeserializer/deserializeJsonArray.cpp b/test/JsonDeserializer/deserializeJsonArray.cpp index 57bf5759..f1f7ff28 100644 --- a/test/JsonDeserializer/deserializeJsonArray.cpp +++ b/test/JsonDeserializer/deserializeJsonArray.cpp @@ -9,36 +9,36 @@ TEST_CASE("deserialize JSON array") { DynamicJsonDocument doc; SECTION("An empty array") { - JsonError err = deserializeJson(doc, "[]"); + DeserializationError err = deserializeJson(doc, "[]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(0 == arr.size()); } SECTION("Spaces") { SECTION("Before the opening bracket") { - JsonError err = deserializeJson(doc, " []"); + DeserializationError err = deserializeJson(doc, " []"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(0 == arr.size()); } SECTION("Before first value") { - JsonError err = deserializeJson(doc, "[ \t\r\n42]"); + DeserializationError err = deserializeJson(doc, "[ \t\r\n42]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == 42); } SECTION("After first value") { - JsonError err = deserializeJson(doc, "[42 \t\r\n]"); + DeserializationError err = deserializeJson(doc, "[42 \t\r\n]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == 42); } @@ -46,58 +46,58 @@ TEST_CASE("deserialize JSON array") { SECTION("Values types") { SECTION("On integer") { - JsonError err = deserializeJson(doc, "[42]"); + DeserializationError err = deserializeJson(doc, "[42]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == 42); } SECTION("Two integers") { - JsonError err = deserializeJson(doc, "[42,84]"); + DeserializationError err = deserializeJson(doc, "[42,84]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == 42); REQUIRE(arr[1] == 84); } SECTION("Double") { - JsonError err = deserializeJson(doc, "[4.2,1e2]"); + DeserializationError err = deserializeJson(doc, "[4.2,1e2]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == 4.2); REQUIRE(arr[1] == 1e2); } SECTION("Unsigned long") { - JsonError err = deserializeJson(doc, "[4294967295]"); + DeserializationError err = deserializeJson(doc, "[4294967295]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == 4294967295UL); } SECTION("Boolean") { - JsonError err = deserializeJson(doc, "[true,false]"); + DeserializationError err = deserializeJson(doc, "[true,false]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == true); REQUIRE(arr[1] == false); } SECTION("Null") { - JsonError err = deserializeJson(doc, "[null,null]"); + DeserializationError err = deserializeJson(doc, "[null,null]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0].as() == 0); REQUIRE(arr[1].as() == 0); @@ -106,232 +106,241 @@ TEST_CASE("deserialize JSON array") { SECTION("Quotes") { SECTION("Double quotes") { - JsonError err = deserializeJson(doc, "[ \"hello\" , \"world\" ]"); + DeserializationError err = + deserializeJson(doc, "[ \"hello\" , \"world\" ]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("Single quotes") { - JsonError err = deserializeJson(doc, "[ 'hello' , 'world' ]"); + DeserializationError err = deserializeJson(doc, "[ 'hello' , 'world' ]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("No quotes") { - JsonError err = deserializeJson(doc, "[ hello , world ]"); + DeserializationError err = deserializeJson(doc, "[ hello , world ]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("Double quotes (empty strings)") { - JsonError err = deserializeJson(doc, "[\"\",\"\"]"); + DeserializationError err = deserializeJson(doc, "[\"\",\"\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == ""); REQUIRE(arr[1] == ""); } SECTION("Single quotes (empty strings)") { - JsonError err = deserializeJson(doc, "[\'\',\'\']"); + DeserializationError err = deserializeJson(doc, "[\'\',\'\']"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == ""); REQUIRE(arr[1] == ""); } SECTION("No quotes (empty strings)") { - JsonError err = deserializeJson(doc, "[,]"); + DeserializationError err = deserializeJson(doc, "[,]"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("Closing single quotes missing") { - JsonError err = deserializeJson(doc, "[\"]"); + DeserializationError err = deserializeJson(doc, "[\"]"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Closing double quotes missing") { - JsonError err = deserializeJson(doc, "[\']"); + DeserializationError err = deserializeJson(doc, "[\']"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Block comments") { SECTION("Before opening bracket") { - JsonError err = deserializeJson(doc, "/*COMMENT*/ [\"hello\"]"); + DeserializationError err = + deserializeJson(doc, "/*COMMENT*/ [\"hello\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("After opening bracket") { - JsonError err = deserializeJson(doc, "[/*COMMENT*/ \"hello\"]"); + DeserializationError err = + deserializeJson(doc, "[/*COMMENT*/ \"hello\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("Before closing bracket") { - JsonError err = deserializeJson(doc, "[\"hello\"/*COMMENT*/]"); + DeserializationError err = deserializeJson(doc, "[\"hello\"/*COMMENT*/]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("After closing bracket") { - JsonError err = deserializeJson(doc, "[\"hello\"]/*COMMENT*/"); + DeserializationError err = deserializeJson(doc, "[\"hello\"]/*COMMENT*/"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("Before comma") { - JsonError err = deserializeJson(doc, "[\"hello\"/*COMMENT*/,\"world\"]"); + DeserializationError err = + deserializeJson(doc, "[\"hello\"/*COMMENT*/,\"world\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("After comma") { - JsonError err = deserializeJson(doc, "[\"hello\",/*COMMENT*/ \"world\"]"); + DeserializationError err = + deserializeJson(doc, "[\"hello\",/*COMMENT*/ \"world\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("/*/") { - JsonError err = deserializeJson(doc, "[/*/\n]"); - REQUIRE(err == JsonError::IncompleteInput); + DeserializationError err = deserializeJson(doc, "[/*/\n]"); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Unfinished comment") { - JsonError err = deserializeJson(doc, "[/*COMMENT]"); - REQUIRE(err == JsonError::IncompleteInput); + DeserializationError err = deserializeJson(doc, "[/*COMMENT]"); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Final slash missing") { - JsonError err = deserializeJson(doc, "[/*COMMENT*]"); - REQUIRE(err == JsonError::IncompleteInput); + DeserializationError err = deserializeJson(doc, "[/*COMMENT*]"); + REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Trailing comments") { SECTION("Before opening bracket") { - JsonError err = deserializeJson(doc, "//COMMENT\n\t[\"hello\"]"); + DeserializationError err = + deserializeJson(doc, "//COMMENT\n\t[\"hello\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("After opening bracket") { - JsonError err = deserializeJson(doc, "[//COMMENT\n\"hello\"]"); + DeserializationError err = deserializeJson(doc, "[//COMMENT\n\"hello\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("Before closing bracket") { - JsonError err = deserializeJson(doc, "[\"hello\"//COMMENT\r\n]"); + DeserializationError err = + deserializeJson(doc, "[\"hello\"//COMMENT\r\n]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("After closing bracket") { - JsonError err = deserializeJson(doc, "[\"hello\"]//COMMENT\n"); + DeserializationError err = deserializeJson(doc, "[\"hello\"]//COMMENT\n"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(arr[0] == "hello"); } SECTION("Before comma") { - JsonError err = deserializeJson(doc, "[\"hello\"//COMMENT\n,\"world\"]"); + DeserializationError err = + deserializeJson(doc, "[\"hello\"//COMMENT\n,\"world\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("After comma") { - JsonError err = deserializeJson(doc, "[\"hello\",//COMMENT\n\"world\"]"); + DeserializationError err = + deserializeJson(doc, "[\"hello\",//COMMENT\n\"world\"]"); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(2 == arr.size()); REQUIRE(arr[0] == "hello"); REQUIRE(arr[1] == "world"); } SECTION("Invalid comment") { - JsonError err = deserializeJson(doc, "[/COMMENT\n]"); - REQUIRE(err == JsonError::InvalidInput); + DeserializationError err = deserializeJson(doc, "[/COMMENT\n]"); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("End document with comment") { - JsonError err = deserializeJson(doc, "[//COMMENT"); - REQUIRE(err == JsonError::IncompleteInput); + DeserializationError err = deserializeJson(doc, "[//COMMENT"); + REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Premature null-terminator") { SECTION("After opening bracket") { - JsonError err = deserializeJson(doc, "["); + DeserializationError err = deserializeJson(doc, "["); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After value") { - JsonError err = deserializeJson(doc, "[1"); + DeserializationError err = deserializeJson(doc, "[1"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After comma") { - JsonError err = deserializeJson(doc, "[1,"); + DeserializationError err = deserializeJson(doc, "[1,"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } @@ -339,21 +348,21 @@ TEST_CASE("deserialize JSON array") { const char* input = "[1,2]"; SECTION("After opening bracket") { - JsonError err = deserializeJson(doc, input, 1); + DeserializationError err = deserializeJson(doc, input, 1); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After value") { - JsonError err = deserializeJson(doc, input, 2); + DeserializationError err = deserializeJson(doc, input, 2); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After comma") { - JsonError err = deserializeJson(doc, input, 3); + DeserializationError err = deserializeJson(doc, input, 3); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } @@ -362,14 +371,14 @@ TEST_CASE("deserialize JSON array") { char jsonString[] = " [ { \"a\" : 1 , \"b\" : 2 } , { \"c\" : 3 , \"d\" : 4 } ] "; - JsonError err = deserializeJson(doc, jsonString); + DeserializationError err = deserializeJson(doc, jsonString); JsonArray& arr = doc.as(); JsonObject& object1 = arr[0]; const JsonObject& object2 = arr[1]; JsonObject& object3 = arr[2]; - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(true == object1.success()); REQUIRE(true == object2.success()); diff --git a/test/JsonDeserializer/deserializeJsonArrayStatic.cpp b/test/JsonDeserializer/deserializeJsonArrayStatic.cpp index 8315c7eb..471ad72a 100644 --- a/test/JsonDeserializer/deserializeJsonArrayStatic.cpp +++ b/test/JsonDeserializer/deserializeJsonArrayStatic.cpp @@ -10,45 +10,45 @@ TEST_CASE("deserialize JSON array with a StaticJsonDocument") { StaticJsonDocument doc; char input[] = "[]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("TooSmallBufferForArrayWithOneValue") { StaticJsonDocument doc; char input[] = "[1]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::NoMemory); + REQUIRE(err == DeserializationError::NoMemory); } SECTION("BufferOfTheRightSizeForArrayWithOneValue") { StaticJsonDocument doc; char input[] = "[1]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("TooSmallBufferForArrayWithNestedObject") { StaticJsonDocument doc; char input[] = "[{}]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::NoMemory); + REQUIRE(err == DeserializationError::NoMemory); } SECTION("BufferOfTheRightSizeForArrayWithNestedObject") { StaticJsonDocument doc; char input[] = "[{}]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("CopyStringNotSpaces") { @@ -77,10 +77,10 @@ TEST_CASE("deserialize JSON array with a StaticJsonDocument") { StaticJsonDocument doc; char input[] = "[1,2]"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(doc.memoryUsage() == JSON_ARRAY_SIZE(2)); REQUIRE(arr[0] == 1); diff --git a/test/JsonDeserializer/deserializeJsonObject.cpp b/test/JsonDeserializer/deserializeJsonObject.cpp index ca848a82..d62ce9b0 100644 --- a/test/JsonDeserializer/deserializeJsonObject.cpp +++ b/test/JsonDeserializer/deserializeJsonObject.cpp @@ -9,50 +9,50 @@ TEST_CASE("deserialize JSON object") { DynamicJsonDocument doc; SECTION("An empty object") { - JsonError err = deserializeJson(doc, "{}"); + DeserializationError err = deserializeJson(doc, "{}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 0); } SECTION("Quotes") { SECTION("Double quotes") { - JsonError err = deserializeJson(doc, "{\"key\":\"value\"}"); + DeserializationError err = deserializeJson(doc, "{\"key\":\"value\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("Single quotes") { - JsonError err = deserializeJson(doc, "{'key':'value'}"); + DeserializationError err = deserializeJson(doc, "{'key':'value'}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("No quotes") { - JsonError err = deserializeJson(doc, "{key:value}"); + DeserializationError err = deserializeJson(doc, "{key:value}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("No quotes, allow underscore in key") { - JsonError err = deserializeJson(doc, "{_k_e_y_:42}"); + DeserializationError err = deserializeJson(doc, "{_k_e_y_:42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["_k_e_y_"] == 42); @@ -61,51 +61,51 @@ TEST_CASE("deserialize JSON object") { SECTION("Spaces") { SECTION("Before the key") { - JsonError err = deserializeJson(doc, "{ \"key\":\"value\"}"); + DeserializationError err = deserializeJson(doc, "{ \"key\":\"value\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("After the key") { - JsonError err = deserializeJson(doc, "{\"key\" :\"value\"}"); + DeserializationError err = deserializeJson(doc, "{\"key\" :\"value\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("Before the value") { - JsonError err = deserializeJson(doc, "{\"key\": \"value\"}"); + DeserializationError err = deserializeJson(doc, "{\"key\": \"value\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("After the value") { - JsonError err = deserializeJson(doc, "{\"key\":\"value\" }"); + DeserializationError err = deserializeJson(doc, "{\"key\":\"value\" }"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 1); REQUIRE(obj["key"] == "value"); } SECTION("Before the colon") { - JsonError err = + DeserializationError err = deserializeJson(doc, "{\"key1\":\"value1\" ,\"key2\":\"value2\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == "value1"); @@ -113,11 +113,11 @@ TEST_CASE("deserialize JSON object") { } SECTION("After the colon") { - JsonError err = + DeserializationError err = deserializeJson(doc, "{\"key1\":\"value1\" ,\"key2\":\"value2\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == "value1"); @@ -127,11 +127,11 @@ TEST_CASE("deserialize JSON object") { SECTION("Values types") { SECTION("String") { - JsonError err = + DeserializationError err = deserializeJson(doc, "{\"key1\":\"value1\",\"key2\":\"value2\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == "value1"); @@ -139,10 +139,11 @@ TEST_CASE("deserialize JSON object") { } SECTION("Integer") { - JsonError err = deserializeJson(doc, "{\"key1\":42,\"key2\":-42}"); + DeserializationError err = + deserializeJson(doc, "{\"key1\":42,\"key2\":-42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == 42); @@ -150,10 +151,11 @@ TEST_CASE("deserialize JSON object") { } SECTION("Double") { - JsonError err = deserializeJson(doc, "{\"key1\":12.345,\"key2\":-7E89}"); + DeserializationError err = + deserializeJson(doc, "{\"key1\":12.345,\"key2\":-7E89}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == 12.345); @@ -161,10 +163,11 @@ TEST_CASE("deserialize JSON object") { } SECTION("Booleans") { - JsonError err = deserializeJson(doc, "{\"key1\":true,\"key2\":false}"); + DeserializationError err = + deserializeJson(doc, "{\"key1\":true,\"key2\":false}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"] == true); @@ -172,10 +175,11 @@ TEST_CASE("deserialize JSON object") { } SECTION("Null") { - JsonError err = deserializeJson(doc, "{\"key1\":null,\"key2\":null}"); + DeserializationError err = + deserializeJson(doc, "{\"key1\":null,\"key2\":null}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["key1"].as() == 0); @@ -185,14 +189,14 @@ TEST_CASE("deserialize JSON object") { SECTION("Array") { char jsonString[] = " { \"ab\" : [ 1 , 2 ] , \"cd\" : [ 3 , 4 ] } "; - JsonError err = deserializeJson(doc, jsonString); + DeserializationError err = deserializeJson(doc, jsonString); JsonObject& obj = doc.as(); JsonArray& array1 = obj["ab"]; const JsonArray& array2 = obj["cd"]; JsonArray& array3 = obj["ef"]; - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(true == array1.success()); REQUIRE(true == array2.success()); @@ -214,127 +218,133 @@ TEST_CASE("deserialize JSON object") { SECTION("Premature null terminator") { SECTION("After opening brace") { - JsonError err = deserializeJson(doc, "{"); + DeserializationError err = deserializeJson(doc, "{"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After key") { - JsonError err = deserializeJson(doc, "{\"hello\""); + DeserializationError err = deserializeJson(doc, "{\"hello\""); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After colon") { - JsonError err = deserializeJson(doc, "{\"hello\":"); + DeserializationError err = deserializeJson(doc, "{\"hello\":"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After value") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\""); + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\""); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("After comma") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\","); + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\","); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Misc") { SECTION("A quoted key without value") { - JsonError err = deserializeJson(doc, "{\"key\"}"); + DeserializationError err = deserializeJson(doc, "{\"key\"}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("A non-quoted key without value") { - JsonError err = deserializeJson(doc, "{key}"); + DeserializationError err = deserializeJson(doc, "{key}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("A dangling comma") { - JsonError err = deserializeJson(doc, "{\"key1\":\"value1\",}"); + DeserializationError err = deserializeJson(doc, "{\"key1\":\"value1\",}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("null as a key") { - JsonError err = deserializeJson(doc, "{null:\"value\"}"); + DeserializationError err = deserializeJson(doc, "{null:\"value\"}"); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } } SECTION("Block comments") { SECTION("Before opening brace") { - JsonError err = deserializeJson(doc, "/*COMMENT*/ {\"hello\":\"world\"}"); + DeserializationError err = + deserializeJson(doc, "/*COMMENT*/ {\"hello\":\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After opening brace") { - JsonError err = deserializeJson(doc, "{/*COMMENT*/\"hello\":\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{/*COMMENT*/\"hello\":\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before colon") { - JsonError err = deserializeJson(doc, "{\"hello\"/*COMMENT*/:\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\"/*COMMENT*/:\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After colon") { - JsonError err = deserializeJson(doc, "{\"hello\":/*COMMENT*/\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\":/*COMMENT*/\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"/*COMMENT*/}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\":\"world\"/*COMMENT*/}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"}/*COMMENT*/"); + DeserializationError err = + deserializeJson(doc, "{\"hello\":\"world\"}/*COMMENT*/"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before comma") { - JsonError err = deserializeJson( + DeserializationError err = deserializeJson( doc, "{\"hello\":\"world\"/*COMMENT*/,\"answer\":42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); REQUIRE(obj["answer"] == 42); } SECTION("After comma") { - JsonError err = deserializeJson( + DeserializationError err = deserializeJson( doc, "{\"hello\":\"world\",/*COMMENT*/\"answer\":42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); REQUIRE(obj["answer"] == 42); } @@ -342,69 +352,75 @@ TEST_CASE("deserialize JSON object") { SECTION("Trailing comments") { SECTION("Before opening brace") { - JsonError err = deserializeJson(doc, "//COMMENT\n {\"hello\":\"world\"}"); + DeserializationError err = + deserializeJson(doc, "//COMMENT\n {\"hello\":\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After opening brace") { - JsonError err = deserializeJson(doc, "{//COMMENT\n\"hello\":\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{//COMMENT\n\"hello\":\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before colon") { - JsonError err = deserializeJson(doc, "{\"hello\"//COMMENT\n:\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\"//COMMENT\n:\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After colon") { - JsonError err = deserializeJson(doc, "{\"hello\"://COMMENT\n\"world\"}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\"://COMMENT\n\"world\"}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"//COMMENT\n}"); + DeserializationError err = + deserializeJson(doc, "{\"hello\":\"world\"//COMMENT\n}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("After closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"}//COMMENT\n"); + DeserializationError err = + deserializeJson(doc, "{\"hello\":\"world\"}//COMMENT\n"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before comma") { - JsonError err = deserializeJson( + DeserializationError err = deserializeJson( doc, "{\"hello\":\"world\"//COMMENT\n,\"answer\":42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); REQUIRE(obj["answer"] == 42); } SECTION("After comma") { - JsonError err = deserializeJson( + DeserializationError err = deserializeJson( doc, "{\"hello\":\"world\",//COMMENT\n\"answer\":42}"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); REQUIRE(obj["answer"] == 42); } @@ -412,55 +428,55 @@ TEST_CASE("deserialize JSON object") { SECTION("Dangling slash") { SECTION("Before opening brace") { - JsonError err = deserializeJson(doc, "/{\"hello\":\"world\"}"); + DeserializationError err = deserializeJson(doc, "/{\"hello\":\"world\"}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("After opening brace") { - JsonError err = deserializeJson(doc, "{/\"hello\":\"world\"}"); + DeserializationError err = deserializeJson(doc, "{/\"hello\":\"world\"}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("Before colon") { - JsonError err = deserializeJson(doc, "{\"hello\"/:\"world\"}"); + DeserializationError err = deserializeJson(doc, "{\"hello\"/:\"world\"}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("After colon") { - JsonError err = deserializeJson(doc, "{\"hello\":/\"world\"}"); + DeserializationError err = deserializeJson(doc, "{\"hello\":/\"world\"}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("Before closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"/}"); + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"/}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("After closing brace") { - JsonError err = deserializeJson(doc, "{\"hello\":\"world\"}/"); + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"}/"); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(obj["hello"] == "world"); } SECTION("Before comma") { - JsonError err = + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"/,\"answer\":42}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("After comma") { - JsonError err = + DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\",/\"answer\":42}"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } } diff --git a/test/JsonDeserializer/deserializeJsonObjectStatic.cpp b/test/JsonDeserializer/deserializeJsonObjectStatic.cpp index 85b2dfef..6a1d307a 100644 --- a/test/JsonDeserializer/deserializeJsonObjectStatic.cpp +++ b/test/JsonDeserializer/deserializeJsonObjectStatic.cpp @@ -10,45 +10,45 @@ TEST_CASE("deserialize JSON object with StaticJsonDocument") { StaticJsonDocument doc; char input[] = "{}"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("TooSmallBufferForObjectWithOneValue") { StaticJsonDocument doc; char input[] = "{\"a\":1}"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::NoMemory); + REQUIRE(err == DeserializationError::NoMemory); } SECTION("BufferOfTheRightSizeForObjectWithOneValue") { StaticJsonDocument doc; char input[] = "{\"a\":1}"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("TooSmallBufferForObjectWithNestedObject") { StaticJsonDocument doc; char input[] = "{\"a\":[]}"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::NoMemory); + REQUIRE(err == DeserializationError::NoMemory); } SECTION("BufferOfTheRightSizeForObjectWithNestedObject") { StaticJsonDocument doc; char input[] = "{\"a\":[]}"; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("Should clear the JsonObject") { diff --git a/test/JsonDeserializer/deserializeJsonValue.cpp b/test/JsonDeserializer/deserializeJsonValue.cpp index fb9f8105..45ce150b 100644 --- a/test/JsonDeserializer/deserializeJsonValue.cpp +++ b/test/JsonDeserializer/deserializeJsonValue.cpp @@ -11,71 +11,78 @@ TEST_CASE("deserializeJson(DynamicJsonDocument&)") { DynamicJsonDocument doc; SECTION("null char*") { - JsonError err = deserializeJson(doc, static_cast(0)); + DeserializationError err = deserializeJson(doc, static_cast(0)); - REQUIRE(err != JsonError::Ok); + REQUIRE(err != DeserializationError::Ok); } SECTION("null const char*") { - JsonError err = deserializeJson(doc, static_cast(0)); + DeserializationError err = + deserializeJson(doc, static_cast(0)); - REQUIRE(err != JsonError::Ok); + REQUIRE(err != DeserializationError::Ok); } SECTION("Integer") { - JsonError err = deserializeJson(doc, "-42"); + DeserializationError err = deserializeJson(doc, "-42"); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE_FALSE(doc.is()); REQUIRE(doc.as() == -42); } SECTION("Double") { - JsonError err = deserializeJson(doc, "-1.23e+4"); + DeserializationError err = deserializeJson(doc, "-1.23e+4"); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE_FALSE(doc.is()); REQUIRE(doc.is()); REQUIRE(doc.as() == Approx(-1.23e+4)); } SECTION("Double quoted string") { - JsonError err = deserializeJson(doc, "\"hello world\""); + DeserializationError err = deserializeJson(doc, "\"hello world\""); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE_THAT(doc.as(), Equals("hello world")); } SECTION("Single quoted string") { - JsonError err = deserializeJson(doc, "\'hello world\'"); + DeserializationError err = deserializeJson(doc, "\'hello world\'"); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE_THAT(doc.as(), Equals("hello world")); } SECTION("Escape sequences") { - JsonError err = + DeserializationError err = deserializeJson(doc, "\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\""); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.as() == "1\"2\\3/4\b5\f6\n7\r8\t9"); } - SECTION("True") { - JsonError err = deserializeJson(doc, "true"); + SECTION("UTF-16 surrogate") { + DeserializationError err = deserializeJson(doc, "\"\\uD834\\uDD1E\""); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::NotSupported); + } + + SECTION("True") { + DeserializationError err = deserializeJson(doc, "true"); + + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == true); } SECTION("False") { - JsonError err = deserializeJson(doc, "false"); + DeserializationError err = deserializeJson(doc, "false"); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == false); } @@ -89,84 +96,84 @@ TEST_CASE("deserializeJson(DynamicJsonDocument&)") { } SECTION("Empty input") { - JsonError err = deserializeJson(doc, ""); + DeserializationError err = deserializeJson(doc, ""); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Just a trailing comment") { - JsonError err = deserializeJson(doc, "// comment"); + DeserializationError err = deserializeJson(doc, "// comment"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Just a block comment") { - JsonError err = deserializeJson(doc, "/*comment*/"); + DeserializationError err = deserializeJson(doc, "/*comment*/"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("Just a slash") { - JsonError err = deserializeJson(doc, "/"); + DeserializationError err = deserializeJson(doc, "/"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("Garbage") { - JsonError err = deserializeJson(doc, "%*$£¤"); + DeserializationError err = deserializeJson(doc, "%*$£¤"); - REQUIRE(err == JsonError::InvalidInput); + REQUIRE(err == DeserializationError::InvalidInput); } SECTION("Premature null-terminator") { SECTION("In escape sequence") { - JsonError err = deserializeJson(doc, "\"\\"); + DeserializationError err = deserializeJson(doc, "\"\\"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In block comment") { - JsonError err = deserializeJson(doc, "/* comment"); + DeserializationError err = deserializeJson(doc, "/* comment"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In double quoted string") { - JsonError err = deserializeJson(doc, "\"hello"); + DeserializationError err = deserializeJson(doc, "\"hello"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In single quoted string") { - JsonError err = deserializeJson(doc, "'hello"); + DeserializationError err = deserializeJson(doc, "'hello"); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Premature end of input") { SECTION("In escape sequence") { - JsonError err = deserializeJson(doc, "\"\\n\"", 2); + DeserializationError err = deserializeJson(doc, "\"\\n\"", 2); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In block comment") { - JsonError err = deserializeJson(doc, "/* comment */", 10); + DeserializationError err = deserializeJson(doc, "/* comment */", 10); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In double quoted string") { - JsonError err = deserializeJson(doc, "\"hello\"", 6); + DeserializationError err = deserializeJson(doc, "\"hello\"", 6); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In single quoted string") { - JsonError err = deserializeJson(doc, "'hello'", 6); + DeserializationError err = deserializeJson(doc, "'hello'", 6); - REQUIRE(err == JsonError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } } diff --git a/test/JsonDeserializer/nestingLimit.cpp b/test/JsonDeserializer/nestingLimit.cpp index d2c41d5b..fb116762 100644 --- a/test/JsonDeserializer/nestingLimit.cpp +++ b/test/JsonDeserializer/nestingLimit.cpp @@ -5,8 +5,9 @@ #include #include -#define SHOULD_WORK(expression) REQUIRE(JsonError::Ok == expression); -#define SHOULD_FAIL(expression) REQUIRE(JsonError::TooDeep == expression); +#define SHOULD_WORK(expression) REQUIRE(DeserializationError::Ok == expression); +#define SHOULD_FAIL(expression) \ + REQUIRE(DeserializationError::TooDeep == expression); TEST_CASE("JsonDeserializer nestingLimit") { DynamicJsonDocument doc; diff --git a/test/JsonDeserializer/std_istream.cpp b/test/JsonDeserializer/std_istream.cpp index b1f24218..3e894fe0 100644 --- a/test/JsonDeserializer/std_istream.cpp +++ b/test/JsonDeserializer/std_istream.cpp @@ -12,10 +12,10 @@ TEST_CASE("deserializeJson(std::istream&)") { SECTION("array") { std::istringstream json(" [ 42 /* comment */ ] "); - JsonError err = deserializeJson(doc, json); + DeserializationError err = deserializeJson(doc, json); JsonArray& arr = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == arr.size()); REQUIRE(42 == arr[0]); } @@ -23,10 +23,10 @@ TEST_CASE("deserializeJson(std::istream&)") { SECTION("object") { std::istringstream json(" { hello : world // comment\n }"); - JsonError err = deserializeJson(doc, json); + DeserializationError err = deserializeJson(doc, json); JsonObject& obj = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(1 == obj.size()); REQUIRE(std::string("world") == obj["hello"]); } diff --git a/test/JsonDeserializer/std_string.cpp b/test/JsonDeserializer/std_string.cpp index baa5ee53..bd5e383b 100644 --- a/test/JsonDeserializer/std_string.cpp +++ b/test/JsonDeserializer/std_string.cpp @@ -11,25 +11,25 @@ TEST_CASE("deserializeJson(const std::string&)") { SECTION("should accept const string") { const std::string input("[42]"); - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("should accept temporary string") { - JsonError err = deserializeJson(doc, std::string("[42]")); + DeserializationError err = deserializeJson(doc, std::string("[42]")); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("should duplicate content") { std::string input("[\"hello\"]"); - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); input[2] = 'X'; // alter the string tomake sure we made a copy JsonArray &array = doc.as(); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(std::string("hello") == array[0]); } } diff --git a/test/Misc/unsigned_char.cpp b/test/Misc/unsigned_char.cpp index 4471e676..04b70f82 100644 --- a/test/Misc/unsigned_char.cpp +++ b/test/Misc/unsigned_char.cpp @@ -14,18 +14,18 @@ TEST_CASE("unsigned char[]") { unsigned char input[] = "{\"a\":42}"; StaticJsonDocument doc; - JsonError err = deserializeJson(doc, input); + DeserializationError err = deserializeJson(doc, input); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("deserializeMsgPack()") { unsigned char input[] = "\xDE\x00\x01\xA5Hello\xA5world"; StaticJsonDocument doc; - MsgPackError err = deserializeMsgPack(doc, input); + DeserializationError err = deserializeMsgPack(doc, input); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("JsonVariant") { diff --git a/test/Misc/vla.cpp b/test/Misc/vla.cpp index 89207c89..b7b5929a 100644 --- a/test/Misc/vla.cpp +++ b/test/Misc/vla.cpp @@ -23,9 +23,9 @@ TEST_CASE("Variable Length Array") { strcpy(vla, "{\"a\":42}"); StaticJsonDocument doc; - JsonError err = deserializeJson(doc, vla); + DeserializationError err = deserializeJson(doc, vla); - REQUIRE(err == JsonError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("deserializeMsgPack()") { @@ -34,9 +34,9 @@ TEST_CASE("Variable Length Array") { memcpy(vla, "\xDE\x00\x01\xA5Hello\xA5world", 15); StaticJsonDocument doc; - MsgPackError err = deserializeMsgPack(doc, vla); + DeserializationError err = deserializeMsgPack(doc, vla); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("JsonVariant") { diff --git a/test/MsgPack/CMakeLists.txt b/test/MsgPack/CMakeLists.txt index 4565892b..74b7cb3f 100644 --- a/test/MsgPack/CMakeLists.txt +++ b/test/MsgPack/CMakeLists.txt @@ -3,7 +3,6 @@ # MIT License add_executable(MsgPackTests - MsgPackError.cpp deserializeArray.cpp deserializeObject.cpp deserializeStaticVariant.cpp diff --git a/test/MsgPack/MsgPackError.cpp b/test/MsgPack/MsgPackError.cpp deleted file mode 100644 index eba41434..00000000 --- a/test/MsgPack/MsgPackError.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// ArduinoJson - arduinojson.org -// Copyright Benoit Blanchon 2014-2018 -// MIT License - -#include -#include - -void testStringification(MsgPackError error, std::string expected) { - REQUIRE(error.c_str() == expected); -} - -void testBoolification(MsgPackError error, bool expected) { - CHECK(error == expected); -} - -#define TEST_STRINGIFICATION(symbol) \ - testStringification(MsgPackError::symbol, #symbol) - -#define TEST_BOOLIFICATION(symbol, expected) \ - testBoolification(MsgPackError::symbol, expected) - -TEST_CASE("MsgPackError") { - SECTION("c_str()") { - TEST_STRINGIFICATION(Ok); - TEST_STRINGIFICATION(NotSupported); - TEST_STRINGIFICATION(NoMemory); - TEST_STRINGIFICATION(TooDeep); - TEST_STRINGIFICATION(IncompleteInput); - } - - SECTION("as boolean") { - TEST_BOOLIFICATION(Ok, false); - TEST_BOOLIFICATION(NotSupported, true); - TEST_BOOLIFICATION(NoMemory, true); - TEST_BOOLIFICATION(TooDeep, true); - TEST_BOOLIFICATION(IncompleteInput, true); - } - - SECTION("ostream") { - std::stringstream s; - s << MsgPackError::NotSupported; - REQUIRE(s.str() == "NotSupported"); - } -} diff --git a/test/MsgPack/deserializeArray.cpp b/test/MsgPack/deserializeArray.cpp index c1b8beed..30e2aea8 100644 --- a/test/MsgPack/deserializeArray.cpp +++ b/test/MsgPack/deserializeArray.cpp @@ -12,20 +12,20 @@ TEST_CASE("deserializeMsgPack(JsonArray&)") { SECTION("empty") { const char* input = "\x90"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 0); } SECTION("two integers") { const char* input = "\x92\x01\x02"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 2); REQUIRE(array[0] == 1); REQUIRE(array[1] == 2); @@ -36,20 +36,20 @@ TEST_CASE("deserializeMsgPack(JsonArray&)") { SECTION("empty") { const char* input = "\xDC\x00\x00"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 0); } SECTION("two strings") { const char* input = "\xDC\x00\x02\xA5hello\xA5world"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 2); REQUIRE(array[0] == "hello"); REQUIRE(array[1] == "world"); @@ -60,10 +60,10 @@ TEST_CASE("deserializeMsgPack(JsonArray&)") { SECTION("empty") { const char* input = "\xDD\x00\x00\x00\x00"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 0); } @@ -71,10 +71,10 @@ TEST_CASE("deserializeMsgPack(JsonArray&)") { const char* input = "\xDD\x00\x00\x00\x02\xCA\x00\x00\x00\x00\xCA\x40\x48\xF5\xC3"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonArray& array = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(array.size() == 2); REQUIRE(array[0] == 0.0f); REQUIRE(array[1] == 3.14f); diff --git a/test/MsgPack/deserializeObject.cpp b/test/MsgPack/deserializeObject.cpp index 9557a28e..1530beb7 100644 --- a/test/MsgPack/deserializeObject.cpp +++ b/test/MsgPack/deserializeObject.cpp @@ -12,10 +12,10 @@ TEST_CASE("deserialize MsgPack object") { SECTION("empty") { const char* input = "\x80"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 0); } @@ -23,10 +23,10 @@ TEST_CASE("deserialize MsgPack object") { SECTION("two integers") { const char* input = "\x82\xA3one\x01\xA3two\x02"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["one"] == 1); @@ -38,10 +38,10 @@ TEST_CASE("deserialize MsgPack object") { SECTION("empty") { const char* input = "\xDE\x00\x00"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 0); } @@ -49,10 +49,10 @@ TEST_CASE("deserialize MsgPack object") { SECTION("two strings") { const char* input = "\xDE\x00\x02\xA1H\xA5hello\xA1W\xA5world"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["H"] == "hello"); @@ -64,10 +64,10 @@ TEST_CASE("deserialize MsgPack object") { SECTION("empty") { const char* input = "\xDF\x00\x00\x00\x00"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 0); } @@ -77,10 +77,10 @@ TEST_CASE("deserialize MsgPack object") { "\xDF\x00\x00\x00\x02\xA4zero\xCA\x00\x00\x00\x00\xA2pi\xCA\x40\x48" "\xF5\xC3"; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); JsonObject& obj = doc.as(); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(obj.size() == 2); REQUIRE(obj["zero"] == 0.0f); diff --git a/test/MsgPack/deserializeStaticVariant.cpp b/test/MsgPack/deserializeStaticVariant.cpp index f4eb831c..5944f7c7 100644 --- a/test/MsgPack/deserializeStaticVariant.cpp +++ b/test/MsgPack/deserializeStaticVariant.cpp @@ -8,124 +8,133 @@ static const size_t epsilon = sizeof(void*); template -static void check(const char* input, MsgPackError expected) { +static void check(const char* input, DeserializationError expected) { StaticJsonDocument variant; - MsgPackError error = deserializeMsgPack(variant, input); + DeserializationError error = deserializeMsgPack(variant, input); REQUIRE(error == expected); } TEST_CASE("deserializeMsgPack(StaticJsonDocument&)") { SECTION("single values always fit") { - check<0>("\xc0", MsgPackError::Ok); // nil - check<0>("\xc2", MsgPackError::Ok); // false - check<0>("\xc3", MsgPackError::Ok); // true - check<0>("\xcc\x00", MsgPackError::Ok); // uint 8 - check<0>("\xcd\x30\x39", MsgPackError::Ok); // uint 16 - check<0>("\xCE\x12\x34\x56\x78", MsgPackError::Ok); // uint 32 + check<0>("\xc0", DeserializationError::Ok); // nil + check<0>("\xc2", DeserializationError::Ok); // false + check<0>("\xc3", DeserializationError::Ok); // true + check<0>("\xcc\x00", DeserializationError::Ok); // uint 8 + check<0>("\xcd\x30\x39", DeserializationError::Ok); // uint 16 + check<0>("\xCE\x12\x34\x56\x78", DeserializationError::Ok); // uint 32 } SECTION("fixstr") { - check<0>("\xA0", MsgPackError::Ok); - check<0>("\xA1H", MsgPackError::NoMemory); - check<4>("\xA1H", MsgPackError::Ok); - check<4>("\xA5Hello", MsgPackError::NoMemory); + check<0>("\xA0", DeserializationError::Ok); + check<0>("\xA1H", DeserializationError::NoMemory); + check<4>("\xA1H", DeserializationError::Ok); + check<4>("\xA5Hello", DeserializationError::NoMemory); } SECTION("str 8") { - check<0>("\xD9\x00", MsgPackError::Ok); - check<0>("\xD9\x01H", MsgPackError::NoMemory); - check<4>("\xD9\x01H", MsgPackError::Ok); - check<4>("\xD9\x05Hello", MsgPackError::NoMemory); + check<0>("\xD9\x00", DeserializationError::Ok); + check<0>("\xD9\x01H", DeserializationError::NoMemory); + check<4>("\xD9\x01H", DeserializationError::Ok); + check<4>("\xD9\x05Hello", DeserializationError::NoMemory); } SECTION("str 16") { - check<0>("\xDA\x00\x00", MsgPackError::Ok); - check<0>("\xDA\x00\x01H", MsgPackError::NoMemory); - check<4>("\xDA\x00\x01H", MsgPackError::Ok); - check<4>("\xDA\x00\x05Hello", MsgPackError::NoMemory); + check<0>("\xDA\x00\x00", DeserializationError::Ok); + check<0>("\xDA\x00\x01H", DeserializationError::NoMemory); + check<4>("\xDA\x00\x01H", DeserializationError::Ok); + check<4>("\xDA\x00\x05Hello", DeserializationError::NoMemory); } SECTION("str 32") { - check<0>("\xDB\x00\x00\x00\x00", MsgPackError::Ok); - check<0>("\xDB\x00\x00\x00\x01H", MsgPackError::NoMemory); - check<4>("\xDB\x00\x00\x00\x01H", MsgPackError::Ok); - check<4>("\xDB\x00\x00\x00\x05Hello", MsgPackError::NoMemory); + check<0>("\xDB\x00\x00\x00\x00", DeserializationError::Ok); + check<0>("\xDB\x00\x00\x00\x01H", DeserializationError::NoMemory); + check<4>("\xDB\x00\x00\x00\x01H", DeserializationError::Ok); + check<4>("\xDB\x00\x00\x00\x05Hello", DeserializationError::NoMemory); } SECTION("fixarray") { - check("\x90", MsgPackError::Ok); // [] - check("\x91\x01", MsgPackError::NoMemory); // [1] - check("\x91\x01", MsgPackError::Ok); // [1] - check("\x92\x01\x02", MsgPackError::NoMemory); // [1,2] + check("\x90", DeserializationError::Ok); // [] + check("\x91\x01", + DeserializationError::NoMemory); // [1] + check("\x91\x01", DeserializationError::Ok); // [1] + check("\x92\x01\x02", + DeserializationError::NoMemory); // [1,2] } SECTION("array 16") { - check("\xDC\x00\x00", MsgPackError::Ok); - check("\xDC\x00\x01\x01", MsgPackError::NoMemory); - check("\xDC\x00\x01\x01", MsgPackError::Ok); - check("\xDC\x00\x02\x01\x02", MsgPackError::NoMemory); + check("\xDC\x00\x00", DeserializationError::Ok); + check("\xDC\x00\x01\x01", + DeserializationError::NoMemory); + check("\xDC\x00\x01\x01", DeserializationError::Ok); + check("\xDC\x00\x02\x01\x02", + DeserializationError::NoMemory); } SECTION("array 32") { - check("\xDD\x00\x00\x00\x00", MsgPackError::Ok); + check("\xDD\x00\x00\x00\x00", DeserializationError::Ok); check("\xDD\x00\x00\x00\x01\x01", - MsgPackError::NoMemory); - check("\xDD\x00\x00\x00\x01\x01", MsgPackError::Ok); + DeserializationError::NoMemory); + check("\xDD\x00\x00\x00\x01\x01", + DeserializationError::Ok); check("\xDD\x00\x00\x00\x02\x01\x02", - MsgPackError::NoMemory); + DeserializationError::NoMemory); } SECTION("fixmap") { SECTION("{}") { - check("\x80", MsgPackError::Ok); + check("\x80", DeserializationError::Ok); } SECTION("{H:1}") { - check("\x81\xA1H\x01", MsgPackError::NoMemory); - check("\x81\xA1H\x01", MsgPackError::Ok); + check("\x81\xA1H\x01", + DeserializationError::NoMemory); + check("\x81\xA1H\x01", + DeserializationError::Ok); } SECTION("{H:1,W:2}") { check("\x82\xA1H\x01\xA1W\x02", - MsgPackError::NoMemory); + DeserializationError::NoMemory); check("\x82\xA1H\x01\xA1W\x02", - MsgPackError::Ok); + DeserializationError::Ok); } } SECTION("map 16") { SECTION("{}") { - check("\xDE\x00\x00", MsgPackError::Ok); + check("\xDE\x00\x00", DeserializationError::Ok); } SECTION("{H:1}") { check("\xDE\x00\x01\xA1H\x01", - MsgPackError::NoMemory); + DeserializationError::NoMemory); check("\xDE\x00\x01\xA1H\x01", - MsgPackError::Ok); + DeserializationError::Ok); } SECTION("{H:1,W:2}") { check("\xDE\x00\x02\xA1H\x01\xA1W\x02", - MsgPackError::NoMemory); + DeserializationError::NoMemory); check("\xDE\x00\x02\xA1H\x01\xA1W\x02", - MsgPackError::Ok); + DeserializationError::Ok); } } SECTION("map 32") { SECTION("{}") { - check("\xDF\x00\x00\x00\x00", MsgPackError::Ok); + check("\xDF\x00\x00\x00\x00", + DeserializationError::Ok); } SECTION("{H:1}") { check("\xDF\x00\x00\x00\x01\xA1H\x01", - MsgPackError::NoMemory); + DeserializationError::NoMemory); check("\xDF\x00\x00\x00\x01\xA1H\x01", - MsgPackError::Ok); + DeserializationError::Ok); } SECTION("{H:1,W:2}") { check( - "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", MsgPackError::NoMemory); + "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", + DeserializationError::NoMemory); check( - "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", MsgPackError::Ok); + "\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02", DeserializationError::Ok); } } } diff --git a/test/MsgPack/deserializeVariant.cpp b/test/MsgPack/deserializeVariant.cpp index 25c32c32..11efa490 100644 --- a/test/MsgPack/deserializeVariant.cpp +++ b/test/MsgPack/deserializeVariant.cpp @@ -9,9 +9,9 @@ template static void check(const char* input, U expected) { DynamicJsonDocument variant; - MsgPackError error = deserializeMsgPack(variant, input); + DeserializationError error = deserializeMsgPack(variant, input); - REQUIRE(error == MsgPackError::Ok); + REQUIRE(error == DeserializationError::Ok); REQUIRE(variant.is()); REQUIRE(variant.as() == expected); } diff --git a/test/MsgPack/incompleteInput.cpp b/test/MsgPack/incompleteInput.cpp index 8d1715c8..64a494d6 100644 --- a/test/MsgPack/incompleteInput.cpp +++ b/test/MsgPack/incompleteInput.cpp @@ -5,17 +5,17 @@ #include #include -MsgPackError deserialize(const char* input, size_t len) { +DeserializationError deserialize(const char* input, size_t len) { DynamicJsonDocument doc; return deserializeMsgPack(doc, input, len); } void checkAllSizes(const char* input, size_t len) { - REQUIRE(deserialize(input, len) == MsgPackError::Ok); + REQUIRE(deserialize(input, len) == DeserializationError::Ok); while (--len) { - REQUIRE(deserialize(input, len) == MsgPackError::IncompleteInput); + REQUIRE(deserialize(input, len) == DeserializationError::IncompleteInput); } } diff --git a/test/MsgPack/nestingLimit.cpp b/test/MsgPack/nestingLimit.cpp index a56acc2f..5a4963f7 100644 --- a/test/MsgPack/nestingLimit.cpp +++ b/test/MsgPack/nestingLimit.cpp @@ -5,27 +5,28 @@ #include #include -static void check(const char* input, MsgPackError expected, uint8_t limit) { +static void check(const char* input, DeserializationError expected, + uint8_t limit) { DynamicJsonDocument doc; doc.nestingLimit = limit; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); REQUIRE(error == expected); } TEST_CASE("Errors returned by deserializeMsgPack()") { SECTION("object too deep") { - check("\x80", MsgPackError::TooDeep, 0); // {} - check("\x80", MsgPackError::Ok, 1); // {} - check("\x81\xA1H\x80", MsgPackError::TooDeep, 1); // {H:{}} - check("\x81\xA1H\x80", MsgPackError::Ok, 2); // {H:{}} + check("\x80", DeserializationError::TooDeep, 0); // {} + check("\x80", DeserializationError::Ok, 1); // {} + check("\x81\xA1H\x80", DeserializationError::TooDeep, 1); // {H:{}} + check("\x81\xA1H\x80", DeserializationError::Ok, 2); // {H:{}} } SECTION("array too deep") { - check("\x90", MsgPackError::TooDeep, 0); // [] - check("\x90", MsgPackError::Ok, 1); // [] - check("\x91\x90", MsgPackError::TooDeep, 1); // [[]] - check("\x91\x90", MsgPackError::Ok, 2); // [[]] + check("\x90", DeserializationError::TooDeep, 0); // [] + check("\x90", DeserializationError::Ok, 1); // [] + check("\x91\x90", DeserializationError::TooDeep, 1); // [[]] + check("\x91\x90", DeserializationError::Ok, 2); // [[]] } } diff --git a/test/MsgPack/notSupported.cpp b/test/MsgPack/notSupported.cpp index e6ab6300..a5673b0c 100644 --- a/test/MsgPack/notSupported.cpp +++ b/test/MsgPack/notSupported.cpp @@ -8,9 +8,9 @@ static void checkNotSupported(const char* input) { DynamicJsonDocument doc; - MsgPackError error = deserializeMsgPack(doc, input); + DeserializationError error = deserializeMsgPack(doc, input); - REQUIRE(error == MsgPackError::NotSupported); + REQUIRE(error == DeserializationError::NotSupported); } TEST_CASE("deserializeMsgPack() return NotSupported") { diff --git a/test/MsgPack/std_istream.cpp b/test/MsgPack/std_istream.cpp index d04dc935..dc6eedba 100644 --- a/test/MsgPack/std_istream.cpp +++ b/test/MsgPack/std_istream.cpp @@ -11,9 +11,9 @@ TEST_CASE("deserializeMsgPack(std::istream&)") { SECTION("should accept a zero in input") { std::istringstream input(std::string("\x92\x00\x02", 3)); - MsgPackError err = deserializeMsgPack(doc, input); + DeserializationError err = deserializeMsgPack(doc, input); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); JsonArray& arr = doc.as(); REQUIRE(arr[0] == 0); REQUIRE(arr[1] == 2); @@ -22,8 +22,8 @@ TEST_CASE("deserializeMsgPack(std::istream&)") { SECTION("should detect incomplete input") { std::istringstream input("\x92\x00\x02"); - MsgPackError err = deserializeMsgPack(doc, input); + DeserializationError err = deserializeMsgPack(doc, input); - REQUIRE(err == MsgPackError::IncompleteInput); + REQUIRE(err == DeserializationError::IncompleteInput); } } diff --git a/test/MsgPack/std_string.cpp b/test/MsgPack/std_string.cpp index bc374719..7b03e51d 100644 --- a/test/MsgPack/std_string.cpp +++ b/test/MsgPack/std_string.cpp @@ -11,32 +11,34 @@ TEST_CASE("deserializeMsgPack(const std::string&)") { SECTION("should accept const string") { const std::string input("\x92\x01\x02"); - MsgPackError err = deserializeMsgPack(doc, input); + DeserializationError err = deserializeMsgPack(doc, input); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("should accept temporary string") { - MsgPackError err = deserializeMsgPack(doc, std::string("\x92\x01\x02")); + DeserializationError err = + deserializeMsgPack(doc, std::string("\x92\x01\x02")); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); } SECTION("should duplicate content") { std::string input("\x91\xA5hello"); - MsgPackError err = deserializeMsgPack(doc, input); + DeserializationError err = deserializeMsgPack(doc, input); input[2] = 'X'; // alter the string tomake sure we made a copy JsonArray& array = doc.as(); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); REQUIRE(std::string("hello") == array[0]); } SECTION("should accept a zero in input") { - MsgPackError err = deserializeMsgPack(doc, std::string("\x92\x00\x02", 3)); + DeserializationError err = + deserializeMsgPack(doc, std::string("\x92\x00\x02", 3)); - REQUIRE(err == MsgPackError::Ok); + REQUIRE(err == DeserializationError::Ok); JsonArray& arr = doc.as(); REQUIRE(arr[0] == 0); REQUIRE(arr[1] == 2);