forked from bblanchon/ArduinoJson
Implemented reference semantics for JsonVariant
This commit is contained in:
@ -68,6 +68,7 @@ add_subdirectory(DynamicJsonBuffer)
|
||||
add_subdirectory(IntegrationTests)
|
||||
add_subdirectory(JsonArray)
|
||||
add_subdirectory(JsonDeserializer)
|
||||
add_subdirectory(JsonDocument)
|
||||
add_subdirectory(JsonObject)
|
||||
add_subdirectory(JsonSerializer)
|
||||
add_subdirectory(JsonVariant)
|
||||
|
@ -30,8 +30,4 @@ TEST_CASE("JsonArray::begin()/end()") {
|
||||
SECTION("Mutable") {
|
||||
run_iterator_test<JsonArray::iterator>();
|
||||
}
|
||||
|
||||
SECTION("Const") {
|
||||
run_iterator_test<JsonArray::const_iterator>();
|
||||
}
|
||||
}
|
||||
|
11
test/JsonDocument/CMakeLists.txt
Normal file
11
test/JsonDocument/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# ArduinoJson - arduinojson.org
|
||||
# Copyright Benoit Blanchon 2014-2018
|
||||
# MIT License
|
||||
|
||||
add_executable(JsonDocumentTests
|
||||
DynamicJsonDocument.cpp
|
||||
StaticJsonDocument.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(JsonDocumentTests catch)
|
||||
add_test(JsonDocument JsonDocumentTests)
|
20
test/JsonDocument/DynamicJsonDocument.cpp
Normal file
20
test/JsonDocument/DynamicJsonDocument.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
// ArduinoJson - arduinojson.org
|
||||
// Copyright Benoit Blanchon 2014-2018
|
||||
// MIT License
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("DynamicJsonDocument") {
|
||||
DynamicJsonDocument doc;
|
||||
|
||||
SECTION("serializeJson()") {
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
obj["hello"] = "world";
|
||||
|
||||
std::string json;
|
||||
serializeJson(doc, json);
|
||||
|
||||
REQUIRE(json == "{\"hello\":\"world\"}");
|
||||
}
|
||||
}
|
20
test/JsonDocument/StaticJsonDocument.cpp
Normal file
20
test/JsonDocument/StaticJsonDocument.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
// ArduinoJson - arduinojson.org
|
||||
// Copyright Benoit Blanchon 2014-2018
|
||||
// MIT License
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("StaticJsonDocument") {
|
||||
StaticJsonDocument<200> doc;
|
||||
|
||||
SECTION("serializeJson()") {
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
obj["hello"] = "world";
|
||||
|
||||
std::string json;
|
||||
serializeJson(doc, json);
|
||||
|
||||
REQUIRE(json == "{\"hello\":\"world\"}");
|
||||
}
|
||||
}
|
@ -16,36 +16,28 @@ TEST_CASE("JsonObject::begin()/end()") {
|
||||
SECTION("NonConstIterator") {
|
||||
JsonObject::iterator it = obj.begin();
|
||||
REQUIRE(obj.end() != it);
|
||||
REQUIRE_THAT(it->key, Equals("ab"));
|
||||
REQUIRE(12 == it->value);
|
||||
it->key = "a.b";
|
||||
it->value = 1.2;
|
||||
REQUIRE_THAT(it->key(), Equals("ab"));
|
||||
REQUIRE(12 == it->value());
|
||||
++it;
|
||||
REQUIRE(obj.end() != it);
|
||||
REQUIRE_THAT(it->key, Equals("cd"));
|
||||
REQUIRE(34 == it->value);
|
||||
it->key = "c.d";
|
||||
it->value = 3.4;
|
||||
REQUIRE_THAT(it->key(), Equals("cd"));
|
||||
REQUIRE(34 == it->value());
|
||||
++it;
|
||||
REQUIRE(obj.end() == it);
|
||||
|
||||
REQUIRE(2 == obj.size());
|
||||
REQUIRE(1.2 == obj["a.b"]);
|
||||
REQUIRE(3.4 == obj["c.d"]);
|
||||
}
|
||||
|
||||
SECTION("ConstIterator") {
|
||||
const JsonObject const_object = obj;
|
||||
JsonObject::const_iterator it = const_object.begin();
|
||||
// SECTION("ConstIterator") {
|
||||
// const JsonObject const_object = obj;
|
||||
// JsonObject::iterator it = const_object.begin();
|
||||
|
||||
REQUIRE(const_object.end() != it);
|
||||
REQUIRE_THAT(it->key, Equals("ab"));
|
||||
REQUIRE(12 == it->value);
|
||||
++it;
|
||||
REQUIRE(const_object.end() != it);
|
||||
REQUIRE_THAT(it->key, Equals("cd"));
|
||||
REQUIRE(34 == it->value);
|
||||
++it;
|
||||
REQUIRE(const_object.end() == it);
|
||||
}
|
||||
// REQUIRE(const_object.end() != it);
|
||||
// REQUIRE_THAT(it->key(), Equals("ab"));
|
||||
// REQUIRE(12 == it->value());
|
||||
// ++it;
|
||||
// REQUIRE(const_object.end() != it);
|
||||
// REQUIRE_THAT(it->key(), Equals("cd"));
|
||||
// REQUIRE(34 == it->value());
|
||||
// ++it;
|
||||
// REQUIRE(const_object.end() == it);
|
||||
// }
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ TEST_CASE("JsonObject::remove()") {
|
||||
obj["c"] = 2;
|
||||
|
||||
for (JsonObject::iterator it = obj.begin(); it != obj.end(); ++it) {
|
||||
if (it->value == 1) obj.remove(it);
|
||||
if (it->value() == 1) obj.remove(it);
|
||||
}
|
||||
|
||||
std::string result;
|
||||
|
@ -6,9 +6,12 @@
|
||||
#include <catch.hpp>
|
||||
#include <limits>
|
||||
|
||||
void check(JsonVariant variant, const std::string &expected) {
|
||||
template <typename T>
|
||||
void check(T value, const std::string &expected) {
|
||||
DynamicJsonDocument doc;
|
||||
doc.to<JsonVariant>().set(value);
|
||||
char buffer[256] = "";
|
||||
size_t returnValue = serializeJson(variant, buffer, sizeof(buffer));
|
||||
size_t returnValue = serializeJson(doc, buffer, sizeof(buffer));
|
||||
REQUIRE(expected == buffer);
|
||||
REQUIRE(expected.size() == returnValue);
|
||||
}
|
||||
@ -22,10 +25,22 @@ TEST_CASE("serializeJson(JsonVariant)") {
|
||||
check(static_cast<char *>(0), "null");
|
||||
}
|
||||
|
||||
SECTION("String") {
|
||||
SECTION("const char*") {
|
||||
check("hello", "\"hello\"");
|
||||
}
|
||||
|
||||
SECTION("string") {
|
||||
check(std::string("hello"), "\"hello\"");
|
||||
}
|
||||
|
||||
SECTION("SerializedValue<const char*>") {
|
||||
check(serialized("[1,2]"), "[1,2]");
|
||||
}
|
||||
|
||||
SECTION("SerializedValue<std::string>") {
|
||||
check(serialized(std::string("[1,2]")), "[1,2]");
|
||||
}
|
||||
|
||||
SECTION("Double") {
|
||||
check(3.1415927, "3.1415927");
|
||||
}
|
||||
|
@ -11,16 +11,18 @@ TEST_CASE("operator<<(std::ostream)") {
|
||||
std::ostringstream os;
|
||||
|
||||
SECTION("JsonVariant containing false") {
|
||||
JsonVariant variant = false;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
variant.set(false);
|
||||
os << variant;
|
||||
|
||||
REQUIRE("false" == os.str());
|
||||
}
|
||||
|
||||
SECTION("JsonVariant containing string") {
|
||||
JsonVariant variant = "coucou";
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
variant.set("coucou");
|
||||
os << variant;
|
||||
|
||||
REQUIRE("\"coucou\"" == os.str());
|
||||
|
@ -5,7 +5,6 @@
|
||||
add_executable(JsonVariantTests
|
||||
as.cpp
|
||||
compare.cpp
|
||||
copy.cpp
|
||||
is.cpp
|
||||
isnull.cpp
|
||||
or.cpp
|
||||
|
@ -9,222 +9,225 @@
|
||||
static const char* null = 0;
|
||||
|
||||
TEST_CASE("JsonVariant::as()") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
SECTION("DoubleAsBool") {
|
||||
JsonVariant variant = 4.2;
|
||||
variant.set(4.2);
|
||||
REQUIRE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("DoubleAsCstr") {
|
||||
JsonVariant variant = 4.2;
|
||||
variant.set(4.2);
|
||||
REQUIRE_FALSE(variant.as<const char*>());
|
||||
}
|
||||
|
||||
SECTION("DoubleAsString") {
|
||||
JsonVariant variant = 4.2;
|
||||
variant.set(4.2);
|
||||
REQUIRE(std::string("4.2") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("DoubleAsLong") {
|
||||
JsonVariant variant = 4.2;
|
||||
variant.set(4.2);
|
||||
REQUIRE(4L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("DoubleAsUnsigned") {
|
||||
JsonVariant variant = 4.2;
|
||||
variant.set(4.2);
|
||||
REQUIRE(4U == variant.as<unsigned>());
|
||||
}
|
||||
|
||||
SECTION("DoubleZeroAsBool") {
|
||||
JsonVariant variant = 0.0;
|
||||
variant.set(0.0);
|
||||
REQUIRE_FALSE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("DoubleZeroAsLong") {
|
||||
JsonVariant variant = 0.0;
|
||||
variant.set(0.0);
|
||||
REQUIRE(0L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("FalseAsBool") {
|
||||
JsonVariant variant = false;
|
||||
variant.set(false);
|
||||
REQUIRE_FALSE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("FalseAsDouble") {
|
||||
JsonVariant variant = false;
|
||||
variant.set(false);
|
||||
REQUIRE(0.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("FalseAsLong") {
|
||||
JsonVariant variant = false;
|
||||
variant.set(false);
|
||||
REQUIRE(0L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("FalseAsString") {
|
||||
JsonVariant variant = false;
|
||||
variant.set(false);
|
||||
REQUIRE(std::string("false") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("TrueAsBool") {
|
||||
JsonVariant variant = true;
|
||||
variant.set(true);
|
||||
REQUIRE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("TrueAsDouble") {
|
||||
JsonVariant variant = true;
|
||||
variant.set(true);
|
||||
REQUIRE(1.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("TrueAsLong") {
|
||||
JsonVariant variant = true;
|
||||
variant.set(true);
|
||||
REQUIRE(1L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("TrueAsString") {
|
||||
JsonVariant variant = true;
|
||||
variant.set(true);
|
||||
REQUIRE(std::string("true") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("LongAsBool") {
|
||||
JsonVariant variant = 42L;
|
||||
variant.set(42L);
|
||||
REQUIRE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("LongZeroAsBool") {
|
||||
JsonVariant variant = 0L;
|
||||
variant.set(0L);
|
||||
REQUIRE_FALSE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("PositiveLongAsDouble") {
|
||||
JsonVariant variant = 42L;
|
||||
variant.set(42L);
|
||||
REQUIRE(42.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("NegativeLongAsDouble") {
|
||||
JsonVariant variant = -42L;
|
||||
variant.set(-42L);
|
||||
REQUIRE(-42.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("LongAsString") {
|
||||
JsonVariant variant = 42L;
|
||||
variant.set(42L);
|
||||
REQUIRE(std::string("42") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("LongZeroAsDouble") {
|
||||
JsonVariant variant = 0L;
|
||||
variant.set(0L);
|
||||
REQUIRE(0.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("NullAsBool") {
|
||||
JsonVariant variant = null;
|
||||
variant.set(null);
|
||||
REQUIRE_FALSE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("NullAsDouble") {
|
||||
JsonVariant variant = null;
|
||||
variant.set(null);
|
||||
REQUIRE(0.0 == variant.as<double>());
|
||||
}
|
||||
|
||||
SECTION("NullAsLong") {
|
||||
JsonVariant variant = null;
|
||||
variant.set(null);
|
||||
REQUIRE(0L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("NullAsString") {
|
||||
JsonVariant variant = null;
|
||||
variant.set(null);
|
||||
REQUIRE(std::string("null") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("NumberStringAsBool") {
|
||||
JsonVariant variant = "42";
|
||||
variant.set("42");
|
||||
REQUIRE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("NumberStringAsLong") {
|
||||
JsonVariant variant = "42";
|
||||
variant.set("42");
|
||||
REQUIRE(42L == variant.as<long>());
|
||||
}
|
||||
|
||||
#if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64
|
||||
SECTION("NumberStringAsInt64Negative") {
|
||||
JsonVariant variant = "-9223372036854775808";
|
||||
variant.set("-9223372036854775808");
|
||||
REQUIRE(-9223372036854775807 - 1 == variant.as<long long>());
|
||||
}
|
||||
|
||||
SECTION("NumberStringAsInt64Positive") {
|
||||
JsonVariant variant = "9223372036854775807";
|
||||
variant.set("9223372036854775807");
|
||||
REQUIRE(9223372036854775807 == variant.as<long long>());
|
||||
}
|
||||
#endif
|
||||
|
||||
SECTION("RandomStringAsBool") {
|
||||
JsonVariant variant = "hello";
|
||||
variant.set("hello");
|
||||
REQUIRE_FALSE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("RandomStringAsLong") {
|
||||
JsonVariant variant = "hello";
|
||||
variant.set("hello");
|
||||
REQUIRE(0L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("RandomStringAsConstCharPtr") {
|
||||
JsonVariant variant = "hello";
|
||||
variant.set("hello");
|
||||
REQUIRE(std::string("hello") == variant.as<const char*>());
|
||||
}
|
||||
|
||||
SECTION("RandomStringAsCharPtr") {
|
||||
JsonVariant variant = "hello";
|
||||
variant.set("hello");
|
||||
REQUIRE(std::string("hello") == variant.as<char*>());
|
||||
}
|
||||
|
||||
SECTION("RandomStringAsString") {
|
||||
JsonVariant variant = "hello";
|
||||
variant.set("hello");
|
||||
REQUIRE(std::string("hello") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("TrueStringAsBool") {
|
||||
JsonVariant variant = "true";
|
||||
variant.set("true");
|
||||
REQUIRE(variant.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("TrueStringAsLong") {
|
||||
JsonVariant variant = "true";
|
||||
variant.set("true");
|
||||
REQUIRE(1L == variant.as<long>());
|
||||
}
|
||||
|
||||
SECTION("ObjectAsString") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject obj = doc2.to<JsonObject>();
|
||||
|
||||
obj["key"] = "value";
|
||||
|
||||
JsonVariant variant = obj;
|
||||
variant.set(obj);
|
||||
REQUIRE(std::string("{\"key\":\"value\"}") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("ArrayAsString") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray arr = doc2.to<JsonArray>();
|
||||
arr.add(4);
|
||||
arr.add(2);
|
||||
|
||||
JsonVariant variant = arr;
|
||||
variant.set(arr);
|
||||
REQUIRE(std::string("[4,2]") == variant.as<std::string>());
|
||||
}
|
||||
|
||||
SECTION("ArrayAsJsonArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray arr = doc2.to<JsonArray>();
|
||||
|
||||
JsonVariant variant = arr;
|
||||
variant.set(arr);
|
||||
REQUIRE(arr == variant.as<JsonArray>());
|
||||
REQUIRE(arr == variant.as<JsonArray>()); // <- shorthand
|
||||
}
|
||||
|
||||
SECTION("ObjectAsJsonObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject obj = doc2.to<JsonObject>();
|
||||
|
||||
JsonVariant variant = obj;
|
||||
variant.set(obj);
|
||||
REQUIRE(obj == variant.as<JsonObject>());
|
||||
REQUIRE(obj == variant.as<JsonObject>()); // <- shorthand
|
||||
}
|
||||
|
@ -8,46 +8,58 @@
|
||||
static const char* null = 0;
|
||||
|
||||
template <typename T>
|
||||
void checkEquals(JsonVariant a, T b) {
|
||||
REQUIRE(b == a);
|
||||
REQUIRE(a == b);
|
||||
REQUIRE(b <= a);
|
||||
REQUIRE(a <= b);
|
||||
REQUIRE(b >= a);
|
||||
REQUIRE(a >= b);
|
||||
void checkEquals(T a, T b) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(a);
|
||||
|
||||
REQUIRE_FALSE(b != a);
|
||||
REQUIRE_FALSE(a != b);
|
||||
REQUIRE_FALSE(b > a);
|
||||
REQUIRE_FALSE(a > b);
|
||||
REQUIRE_FALSE(b < a);
|
||||
REQUIRE_FALSE(a < b);
|
||||
REQUIRE(b == variant);
|
||||
REQUIRE(variant == b);
|
||||
REQUIRE(b <= variant);
|
||||
REQUIRE(variant <= b);
|
||||
REQUIRE(b >= variant);
|
||||
REQUIRE(variant >= b);
|
||||
|
||||
REQUIRE_FALSE(b != variant);
|
||||
REQUIRE_FALSE(variant != b);
|
||||
REQUIRE_FALSE(b > variant);
|
||||
REQUIRE_FALSE(variant > b);
|
||||
REQUIRE_FALSE(b < variant);
|
||||
REQUIRE_FALSE(variant < b);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void checkGreater(JsonVariant a, T b) {
|
||||
REQUIRE(a > b);
|
||||
REQUIRE(b < a);
|
||||
REQUIRE(a != b);
|
||||
REQUIRE(b != a);
|
||||
void checkGreater(T a, T b) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(a);
|
||||
|
||||
REQUIRE_FALSE(a < b);
|
||||
REQUIRE_FALSE(b > a);
|
||||
REQUIRE_FALSE(a == b);
|
||||
REQUIRE_FALSE(b == a);
|
||||
REQUIRE(variant > b);
|
||||
REQUIRE(b < variant);
|
||||
REQUIRE(variant != b);
|
||||
REQUIRE(b != variant);
|
||||
|
||||
REQUIRE_FALSE(variant < b);
|
||||
REQUIRE_FALSE(b > variant);
|
||||
REQUIRE_FALSE(variant == b);
|
||||
REQUIRE_FALSE(b == variant);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void checkLower(JsonVariant a, T b) {
|
||||
REQUIRE(a < b);
|
||||
REQUIRE(b > a);
|
||||
REQUIRE(a != b);
|
||||
REQUIRE(b != a);
|
||||
void checkLower(T a, T b) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(a);
|
||||
|
||||
REQUIRE_FALSE(a > b);
|
||||
REQUIRE_FALSE(b < a);
|
||||
REQUIRE_FALSE(a == b);
|
||||
REQUIRE_FALSE(b == a);
|
||||
REQUIRE(variant < b);
|
||||
REQUIRE(b > variant);
|
||||
REQUIRE(variant != b);
|
||||
REQUIRE(b != variant);
|
||||
|
||||
REQUIRE_FALSE(variant > b);
|
||||
REQUIRE_FALSE(b < variant);
|
||||
REQUIRE_FALSE(variant == b);
|
||||
REQUIRE_FALSE(b == variant);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@ -99,7 +111,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("null") {
|
||||
JsonVariant variant = null;
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(null);
|
||||
|
||||
REQUIRE(variant == variant);
|
||||
REQUIRE_FALSE(variant != variant);
|
||||
@ -139,7 +153,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("String") {
|
||||
JsonVariant variant = "hello";
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set("hello");
|
||||
|
||||
REQUIRE(variant == variant);
|
||||
REQUIRE_FALSE(variant != variant);
|
||||
@ -163,10 +179,15 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
REQUIRE_FALSE(null == variant);
|
||||
}
|
||||
|
||||
DynamicJsonDocument doc1, doc2, doc3;
|
||||
JsonVariant variant1 = doc1.to<JsonVariant>();
|
||||
JsonVariant variant2 = doc2.to<JsonVariant>();
|
||||
JsonVariant variant3 = doc3.to<JsonVariant>();
|
||||
|
||||
SECTION("IntegerInVariant") {
|
||||
JsonVariant variant1 = 42;
|
||||
JsonVariant variant2 = 42;
|
||||
JsonVariant variant3 = 666;
|
||||
variant1.set(42);
|
||||
variant2.set(42);
|
||||
variant3.set(666);
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -176,9 +197,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("StringInVariant") {
|
||||
JsonVariant variant1 = "0hello" + 1; // make sure they have
|
||||
JsonVariant variant2 = "1hello" + 1; // different addresses
|
||||
JsonVariant variant3 = "world";
|
||||
variant1.set("0hello" + 1); // make sure they have
|
||||
variant2.set("1hello" + 1); // different addresses
|
||||
variant3.set("world");
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -188,9 +209,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("DoubleInVariant") {
|
||||
JsonVariant variant1 = 42.0;
|
||||
JsonVariant variant2 = 42.0;
|
||||
JsonVariant variant3 = 666.0;
|
||||
variant1.set(42.0);
|
||||
variant2.set(42.0);
|
||||
variant3.set(666.0);
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -200,9 +221,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("BoolInVariant") {
|
||||
JsonVariant variant1 = true;
|
||||
JsonVariant variant2 = true;
|
||||
JsonVariant variant3 = false;
|
||||
variant1.set(true);
|
||||
variant2.set(true);
|
||||
variant3.set(false);
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -212,14 +233,13 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("ArrayInVariant") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonArray array1 = doc1.to<JsonArray>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray array2 = doc2.to<JsonArray>();
|
||||
DynamicJsonDocument docArr1, docArr2;
|
||||
JsonArray array1 = docArr1.to<JsonArray>();
|
||||
JsonArray array2 = docArr2.to<JsonArray>();
|
||||
|
||||
JsonVariant variant1 = array1;
|
||||
JsonVariant variant2 = array1;
|
||||
JsonVariant variant3 = array2;
|
||||
variant1.set(array1);
|
||||
variant2.set(array1);
|
||||
variant3.set(array2);
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -229,14 +249,13 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
}
|
||||
|
||||
SECTION("ObjectInVariant") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonObject obj1 = doc1.to<JsonObject>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject obj2 = doc2.to<JsonObject>();
|
||||
DynamicJsonDocument docObj1, docObj2;
|
||||
JsonObject obj1 = docObj1.to<JsonObject>();
|
||||
JsonObject obj2 = docObj2.to<JsonObject>();
|
||||
|
||||
JsonVariant variant1 = obj1;
|
||||
JsonVariant variant2 = obj1;
|
||||
JsonVariant variant3 = obj2;
|
||||
variant1.set(obj1);
|
||||
variant2.set(obj1);
|
||||
variant3.set(obj2);
|
||||
|
||||
REQUIRE(variant1 == variant2);
|
||||
REQUIRE_FALSE(variant1 != variant2);
|
||||
@ -245,22 +264,22 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
REQUIRE_FALSE(variant1 == variant3);
|
||||
}
|
||||
|
||||
SECTION("VariantsOfDifferentTypes") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonObject obj = doc1.to<JsonObject>();
|
||||
// SECTION("VariantsOfDifferentTypes") {
|
||||
// DynamicJsonDocument doc1;
|
||||
// JsonObject obj = doc1.to<JsonObject>();
|
||||
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray arr = doc2.to<JsonArray>();
|
||||
JsonVariant variants[] = {
|
||||
true, 42, 666.667, "hello", arr, obj,
|
||||
};
|
||||
size_t n = sizeof(variants) / sizeof(variants[0]);
|
||||
// DynamicJsonDocument doc2;
|
||||
// JsonArray arr = doc2.to<JsonArray>();
|
||||
// JsonVariant variants[] = {
|
||||
// true, 42, 666.667, "hello", arr, obj,
|
||||
// };
|
||||
// size_t n = sizeof(variants) / sizeof(variants[0]);
|
||||
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
for (size_t j = i + 1; j < n; j++) {
|
||||
REQUIRE(variants[i] != variants[j]);
|
||||
REQUIRE_FALSE(variants[i] == variants[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// for (size_t i = 0; i < n; i++) {
|
||||
// for (size_t j = i + 1; j < n; j++) {
|
||||
// REQUIRE(variants[i] != variants[j]);
|
||||
// REQUIRE_FALSE(variants[i] == variants[j]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
@ -1,65 +0,0 @@
|
||||
// ArduinoJson - arduinojson.org
|
||||
// Copyright Benoit Blanchon 2014-2018
|
||||
// MIT License
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("JsonVariant copy") {
|
||||
JsonVariant _variant1;
|
||||
JsonVariant _variant2;
|
||||
|
||||
SECTION("IntegersAreCopiedByValue") {
|
||||
_variant1 = 123;
|
||||
_variant2 = _variant1;
|
||||
_variant1 = 456;
|
||||
|
||||
REQUIRE(123 == _variant2.as<int>());
|
||||
}
|
||||
|
||||
SECTION("DoublesAreCopiedByValue") {
|
||||
_variant1 = 123.45;
|
||||
_variant2 = _variant1;
|
||||
_variant1 = 456.78;
|
||||
|
||||
REQUIRE(123.45 == _variant2.as<double>());
|
||||
}
|
||||
|
||||
SECTION("BooleansAreCopiedByValue") {
|
||||
_variant1 = true;
|
||||
_variant2 = _variant1;
|
||||
_variant1 = false;
|
||||
|
||||
REQUIRE(_variant2.as<bool>());
|
||||
}
|
||||
|
||||
SECTION("StringsAreCopiedByValue") {
|
||||
_variant1 = "hello";
|
||||
_variant2 = _variant1;
|
||||
_variant1 = "world";
|
||||
|
||||
REQUIRE(std::string("hello") == _variant2.as<const char*>());
|
||||
}
|
||||
|
||||
SECTION("ObjectsAreCopiedByReference") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject object = doc.to<JsonObject>();
|
||||
|
||||
_variant1 = object;
|
||||
|
||||
object["hello"] = "world";
|
||||
|
||||
REQUIRE(1 == _variant1.as<JsonObject>().size());
|
||||
}
|
||||
|
||||
SECTION("ArraysAreCopiedByReference") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
|
||||
_variant1 = array;
|
||||
|
||||
array.add("world");
|
||||
|
||||
REQUIRE(1 == _variant1.as<JsonArray>().size());
|
||||
}
|
||||
}
|
@ -5,7 +5,11 @@
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
void checkIsArray(JsonVariant var) {
|
||||
void checkIsArray(JsonArray value) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
var.set(value);
|
||||
|
||||
REQUIRE(var.is<JsonArray>());
|
||||
REQUIRE(var.is<JsonArray>());
|
||||
REQUIRE(var.is<const JsonArray>());
|
||||
@ -16,48 +20,65 @@ void checkIsArray(JsonVariant var) {
|
||||
REQUIRE_FALSE(var.is<float>());
|
||||
REQUIRE_FALSE(var.is<int>());
|
||||
REQUIRE_FALSE(var.is<long>());
|
||||
REQUIRE_FALSE(var.is<const char*>());
|
||||
REQUIRE_FALSE(var.is<const char *>());
|
||||
REQUIRE_FALSE(var.is<JsonObject>());
|
||||
}
|
||||
|
||||
void checkIsBool(JsonVariant var) {
|
||||
void checkIsBool(bool value) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
var.set(value);
|
||||
|
||||
REQUIRE(var.is<bool>());
|
||||
|
||||
REQUIRE_FALSE(var.is<double>());
|
||||
REQUIRE_FALSE(var.is<float>());
|
||||
REQUIRE_FALSE(var.is<int>());
|
||||
REQUIRE_FALSE(var.is<long>());
|
||||
REQUIRE_FALSE(var.is<const char*>());
|
||||
REQUIRE_FALSE(var.is<const char *>());
|
||||
REQUIRE_FALSE(var.is<JsonArray>());
|
||||
REQUIRE_FALSE(var.is<JsonObject>());
|
||||
}
|
||||
|
||||
void checkIsFloat(JsonVariant var) {
|
||||
void checkIsFloat(double value) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
var.set(value);
|
||||
|
||||
REQUIRE(var.is<double>());
|
||||
REQUIRE(var.is<float>());
|
||||
|
||||
REQUIRE_FALSE(var.is<bool>());
|
||||
REQUIRE_FALSE(var.is<int>());
|
||||
REQUIRE_FALSE(var.is<long>());
|
||||
REQUIRE_FALSE(var.is<const char*>());
|
||||
REQUIRE_FALSE(var.is<const char *>());
|
||||
REQUIRE_FALSE(var.is<JsonArray>());
|
||||
REQUIRE_FALSE(var.is<JsonObject>());
|
||||
}
|
||||
|
||||
void checkIsInteger(JsonVariant var) {
|
||||
template <typename T>
|
||||
void checkIsInteger(T value) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
var.set(value);
|
||||
|
||||
REQUIRE(var.is<long>());
|
||||
REQUIRE(var.is<int>());
|
||||
REQUIRE(var.is<float>());
|
||||
REQUIRE(var.is<double>());
|
||||
|
||||
REQUIRE_FALSE(var.is<bool>());
|
||||
REQUIRE_FALSE(var.is<const char*>());
|
||||
REQUIRE_FALSE(var.is<const char *>());
|
||||
REQUIRE_FALSE(var.is<JsonArray>());
|
||||
REQUIRE_FALSE(var.is<JsonObject>());
|
||||
}
|
||||
|
||||
void checkIsString(JsonVariant var) {
|
||||
REQUIRE(var.is<const char*>());
|
||||
void checkIsString(const char *value) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
var.set(value);
|
||||
|
||||
REQUIRE(var.is<const char *>());
|
||||
|
||||
REQUIRE_FALSE(var.is<bool>());
|
||||
REQUIRE_FALSE(var.is<int>());
|
||||
|
@ -6,39 +6,42 @@
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("JsonVariant::isNull()") {
|
||||
SECTION("ReturnsFalse_WhenUndefined") {
|
||||
JsonVariant variant;
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
SECTION("return true when Undefined") {
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenInteger") {
|
||||
JsonVariant variant = 0;
|
||||
SECTION("return false when Integer") {
|
||||
variant.set(42);
|
||||
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenEmptyArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
SECTION("return false when EmptyArray") {
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray array = doc2.to<JsonArray>();
|
||||
|
||||
JsonVariant variant = array;
|
||||
variant.set(array);
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenEmptyObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
SECTION("return false when EmptyObject") {
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject obj = doc2.to<JsonObject>();
|
||||
|
||||
JsonVariant variant = obj;
|
||||
variant.set(obj);
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsFalse_WhenInvalidArray") {
|
||||
JsonVariant variant = JsonArray();
|
||||
SECTION("return true when InvalidArray") {
|
||||
variant.set(JsonArray());
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
|
||||
SECTION("ReturnsFalse_WhenInvalidObject") {
|
||||
JsonVariant variant = JsonObject();
|
||||
SECTION("return true when InvalidObject") {
|
||||
variant.set(JsonObject());
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
}
|
||||
|
@ -5,78 +5,84 @@
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
static const JsonVariant undefined;
|
||||
static const JsonVariant null = static_cast<const char*>(0);
|
||||
|
||||
TEST_CASE("JsonVariant::operator|()") {
|
||||
SECTION("undefined | const char*") {
|
||||
std::string result = undefined | "default";
|
||||
REQUIRE(result == "default");
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
SECTION("undefined") {
|
||||
SECTION("undefined | const char*") {
|
||||
std::string result = variant | "default";
|
||||
REQUIRE(result == "default");
|
||||
}
|
||||
|
||||
SECTION("undefined | int") {
|
||||
int result = variant | 42;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
|
||||
SECTION("undefined | bool") {
|
||||
bool result = variant | true;
|
||||
REQUIRE(result == true);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("undefined | int") {
|
||||
int result = undefined | 42;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
SECTION("null") {
|
||||
variant.set(static_cast<const char*>(0));
|
||||
|
||||
SECTION("undefined | bool") {
|
||||
bool result = undefined | true;
|
||||
REQUIRE(result == true);
|
||||
}
|
||||
SECTION("null | const char*") {
|
||||
std::string result = variant | "default";
|
||||
REQUIRE(result == "default");
|
||||
}
|
||||
|
||||
SECTION("null | const char*") {
|
||||
std::string result = null | "default";
|
||||
REQUIRE(result == "default");
|
||||
}
|
||||
SECTION("null | int") {
|
||||
int result = variant | 42;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
|
||||
SECTION("null | int") {
|
||||
int result = null | 42;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
|
||||
SECTION("null | bool") {
|
||||
bool result = null | true;
|
||||
REQUIRE(result == true);
|
||||
SECTION("null | bool") {
|
||||
bool result = variant | true;
|
||||
REQUIRE(result == true);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("int | const char*") {
|
||||
JsonVariant variant = 42;
|
||||
variant.set(42);
|
||||
std::string result = variant | "default";
|
||||
REQUIRE(result == "default");
|
||||
}
|
||||
|
||||
SECTION("int | int") {
|
||||
JsonVariant variant = 0;
|
||||
variant.set(0);
|
||||
int result = variant | 666;
|
||||
REQUIRE(result == 0);
|
||||
}
|
||||
|
||||
SECTION("double | int") {
|
||||
JsonVariant variant = 42.0;
|
||||
variant.set(42.0);
|
||||
int result = variant | 666;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
|
||||
SECTION("bool | bool") {
|
||||
JsonVariant variant = false;
|
||||
variant.set(false);
|
||||
bool result = variant | true;
|
||||
REQUIRE(result == false);
|
||||
}
|
||||
|
||||
SECTION("int | bool") {
|
||||
JsonVariant variant = 0;
|
||||
variant.set(0);
|
||||
bool result = variant | true;
|
||||
REQUIRE(result == true);
|
||||
}
|
||||
|
||||
SECTION("const char* | const char*") {
|
||||
JsonVariant variant = "not default";
|
||||
variant.set("not default");
|
||||
std::string result = variant | "default";
|
||||
REQUIRE(result == "not default");
|
||||
}
|
||||
|
||||
SECTION("const char* | int") {
|
||||
JsonVariant variant = "not default";
|
||||
variant.set("not default");
|
||||
int result = variant | 42;
|
||||
REQUIRE(result == 42);
|
||||
}
|
||||
|
@ -9,7 +9,10 @@
|
||||
|
||||
template <typename T>
|
||||
void checkValue(T expected) {
|
||||
JsonVariant variant = expected;
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
|
||||
variant.set(expected);
|
||||
REQUIRE(expected == variant.as<T>());
|
||||
}
|
||||
|
||||
@ -21,11 +24,15 @@ void checkReference(T &expected) {
|
||||
|
||||
template <typename T>
|
||||
void checkNumericType() {
|
||||
DynamicJsonDocument docMin, docMax;
|
||||
JsonVariant variantMin = docMin.to<JsonVariant>();
|
||||
JsonVariant variantMax = docMax.to<JsonVariant>();
|
||||
|
||||
T min = std::numeric_limits<T>::min();
|
||||
T max = std::numeric_limits<T>::max();
|
||||
|
||||
JsonVariant variantMin(min);
|
||||
JsonVariant variantMax(max);
|
||||
variantMin.set(min);
|
||||
variantMax.set(max);
|
||||
|
||||
REQUIRE(min == variantMin.as<T>());
|
||||
REQUIRE(max == variantMax.as<T>());
|
||||
@ -41,9 +48,12 @@ TEST_CASE("JsonVariant set()/get()") {
|
||||
SECTION("Null") {
|
||||
checkValue<const char *>(NULL);
|
||||
}
|
||||
SECTION("String") {
|
||||
SECTION("const char*") {
|
||||
checkValue<const char *>("hello");
|
||||
}
|
||||
SECTION("std::string") {
|
||||
checkValue<std::string>("hello");
|
||||
}
|
||||
|
||||
SECTION("False") {
|
||||
checkValue<bool>(false);
|
||||
|
@ -6,24 +6,26 @@
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("JsonVariant::operator[]") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant var = doc.to<JsonVariant>();
|
||||
|
||||
SECTION("The JsonVariant is undefined") {
|
||||
JsonVariant var = JsonVariant();
|
||||
REQUIRE(0 == var.size());
|
||||
REQUIRE(var["0"].isNull());
|
||||
REQUIRE(var[0].isNull());
|
||||
}
|
||||
|
||||
SECTION("The JsonVariant is a string") {
|
||||
JsonVariant var = "hello world";
|
||||
var.set("hello world");
|
||||
REQUIRE(0 == var.size());
|
||||
REQUIRE(var["0"].isNull());
|
||||
REQUIRE(var[0].isNull());
|
||||
}
|
||||
|
||||
SECTION("The JsonVariant is a JsonArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
JsonVariant var = array;
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray array = doc2.to<JsonArray>();
|
||||
var.set(array);
|
||||
|
||||
SECTION("get value") {
|
||||
array.add("element at index 0");
|
||||
@ -60,9 +62,9 @@ TEST_CASE("JsonVariant::operator[]") {
|
||||
}
|
||||
|
||||
SECTION("The JsonVariant is a JsonObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject object = doc.to<JsonObject>();
|
||||
JsonVariant var = object;
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject object = doc2.to<JsonObject>();
|
||||
var.set(object);
|
||||
|
||||
SECTION("get value") {
|
||||
object["a"] = "element at key \"a\"";
|
||||
|
@ -29,19 +29,13 @@ TEST_CASE("unsigned char[]") {
|
||||
}
|
||||
|
||||
SECTION("JsonVariant") {
|
||||
SECTION("constructor") {
|
||||
DynamicJsonDocument doc;
|
||||
|
||||
SECTION("set") {
|
||||
unsigned char value[] = "42";
|
||||
|
||||
JsonVariant variant(value);
|
||||
|
||||
REQUIRE(42 == variant.as<int>());
|
||||
}
|
||||
|
||||
SECTION("operator=") {
|
||||
unsigned char value[] = "42";
|
||||
|
||||
JsonVariant variant(666);
|
||||
variant = value;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(value);
|
||||
|
||||
REQUIRE(42 == variant.as<int>());
|
||||
}
|
||||
@ -50,7 +44,6 @@ TEST_CASE("unsigned char[]") {
|
||||
SECTION("operator[]") {
|
||||
unsigned char key[] = "hello";
|
||||
|
||||
DynamicJsonDocument doc;
|
||||
deserializeJson(doc, "{\"hello\":\"world\"}");
|
||||
JsonVariant variant = doc.as<JsonVariant>();
|
||||
|
||||
@ -62,7 +55,6 @@ TEST_CASE("unsigned char[]") {
|
||||
SECTION("operator[] const") {
|
||||
unsigned char key[] = "hello";
|
||||
|
||||
DynamicJsonDocument doc;
|
||||
deserializeJson(doc, "{\"hello\":\"world\"}");
|
||||
const JsonVariant variant = doc.as<JsonVariant>();
|
||||
|
||||
@ -73,8 +65,8 @@ TEST_CASE("unsigned char[]") {
|
||||
SECTION("operator==") {
|
||||
unsigned char comparand[] = "hello";
|
||||
|
||||
JsonVariant variant;
|
||||
variant = "hello";
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set("hello");
|
||||
|
||||
REQUIRE(comparand == variant);
|
||||
REQUIRE(variant == comparand);
|
||||
@ -85,8 +77,8 @@ TEST_CASE("unsigned char[]") {
|
||||
SECTION("operator!=") {
|
||||
unsigned char comparand[] = "hello";
|
||||
|
||||
JsonVariant variant;
|
||||
variant = "world";
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set("world");
|
||||
|
||||
REQUIRE(comparand != variant);
|
||||
REQUIRE(variant != comparand);
|
||||
|
@ -40,23 +40,15 @@ TEST_CASE("Variable Length Array") {
|
||||
}
|
||||
|
||||
SECTION("JsonVariant") {
|
||||
SECTION("constructor") {
|
||||
DynamicJsonDocument doc;
|
||||
|
||||
SECTION("set()") {
|
||||
int i = 16;
|
||||
char vla[i];
|
||||
strcpy(vla, "42");
|
||||
|
||||
JsonVariant variant(vla);
|
||||
|
||||
REQUIRE(42 == variant.as<int>());
|
||||
}
|
||||
|
||||
SECTION("operator=") {
|
||||
int i = 16;
|
||||
char vla[i];
|
||||
strcpy(vla, "42");
|
||||
|
||||
JsonVariant variant(666);
|
||||
variant = vla;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(vla);
|
||||
|
||||
REQUIRE(42 == variant.as<int>());
|
||||
}
|
||||
@ -67,7 +59,6 @@ TEST_CASE("Variable Length Array") {
|
||||
char vla[i];
|
||||
strcpy(vla, "hello");
|
||||
|
||||
DynamicJsonDocument doc;
|
||||
deserializeJson(doc, "{\"hello\":\"world\"}");
|
||||
JsonVariant variant = doc.as<JsonVariant>();
|
||||
|
||||
@ -81,7 +72,6 @@ TEST_CASE("Variable Length Array") {
|
||||
char vla[i];
|
||||
strcpy(vla, "hello");
|
||||
|
||||
DynamicJsonDocument doc;
|
||||
deserializeJson(doc, "{\"hello\":\"world\"}");
|
||||
const JsonVariant variant = doc.as<JsonVariant>();
|
||||
|
||||
@ -94,8 +84,8 @@ TEST_CASE("Variable Length Array") {
|
||||
char vla[i];
|
||||
strcpy(vla, "hello");
|
||||
|
||||
JsonVariant variant;
|
||||
variant = "hello";
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set("hello");
|
||||
|
||||
REQUIRE((vla == variant));
|
||||
REQUIRE((variant == vla));
|
||||
@ -109,7 +99,7 @@ TEST_CASE("Variable Length Array") {
|
||||
strcpy(vla, "hello");
|
||||
|
||||
JsonVariant variant;
|
||||
variant = "world";
|
||||
variant.set("world");
|
||||
|
||||
REQUIRE((vla != variant));
|
||||
REQUIRE((variant != vla));
|
||||
|
@ -16,10 +16,18 @@ static void check(const char* input, U expected) {
|
||||
REQUIRE(variant.as<T>() == expected);
|
||||
}
|
||||
|
||||
static void checkIsNull(const char* input) {
|
||||
DynamicJsonDocument variant;
|
||||
|
||||
DeserializationError error = deserializeMsgPack(variant, input);
|
||||
|
||||
REQUIRE(error == DeserializationError::Ok);
|
||||
REQUIRE(variant.as<JsonVariant>().isNull());
|
||||
}
|
||||
|
||||
TEST_CASE("deserialize MsgPack value") {
|
||||
SECTION("nil") {
|
||||
const char* nil = 0; // ArduinoJson uses a string for null
|
||||
check<const char*>("\xc0", nil);
|
||||
checkIsNull("\xc0");
|
||||
}
|
||||
|
||||
SECTION("bool") {
|
||||
|
@ -5,8 +5,11 @@
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
void check(JsonVariant variant, const char* expected_data,
|
||||
size_t expected_len) {
|
||||
template <typename T>
|
||||
void check(T value, const char* expected_data, size_t expected_len) {
|
||||
DynamicJsonDocument doc;
|
||||
JsonVariant variant = doc.to<JsonVariant>();
|
||||
variant.set(value);
|
||||
std::string expected(expected_data, expected_data + expected_len);
|
||||
std::string actual;
|
||||
size_t len = serializeMsgPack(variant, actual);
|
||||
@ -15,14 +18,15 @@ void check(JsonVariant variant, const char* expected_data,
|
||||
REQUIRE(actual == expected);
|
||||
}
|
||||
|
||||
template <size_t N>
|
||||
void check(JsonVariant variant, const char (&expected_data)[N]) {
|
||||
template <typename T, size_t N>
|
||||
void check(T value, const char (&expected_data)[N]) {
|
||||
const size_t expected_len = N - 1;
|
||||
check(variant, expected_data, expected_len);
|
||||
check(value, expected_data, expected_len);
|
||||
}
|
||||
|
||||
void check(JsonVariant variant, const std::string& expected) {
|
||||
check(variant, expected.data(), expected.length());
|
||||
template <typename T>
|
||||
void check(T value, const std::string& expected) {
|
||||
check(value, expected.data(), expected.length());
|
||||
}
|
||||
|
||||
TEST_CASE("serialize MsgPack value") {
|
||||
|
Reference in New Issue
Block a user