2018-11-03 20:21:33 +00:00
|
|
|
// ArduinoJson - arduinojson.org
|
|
|
|
// Copyright Benoit Blanchon 2014-2018
|
|
|
|
// MIT License
|
|
|
|
|
|
|
|
#include <ArduinoJson.h>
|
|
|
|
#include <catch.hpp>
|
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
template <typename TVariant>
|
|
|
|
void checkIsArray(TVariant var) {
|
|
|
|
REQUIRE(var.template is<JsonArray>());
|
|
|
|
|
|
|
|
REQUIRE_FALSE(var.template is<bool>());
|
|
|
|
REQUIRE_FALSE(var.template is<double>());
|
|
|
|
REQUIRE_FALSE(var.template is<float>());
|
|
|
|
REQUIRE_FALSE(var.template is<int>());
|
|
|
|
REQUIRE_FALSE(var.template is<long>());
|
|
|
|
REQUIRE_FALSE(var.template is<const char *>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonObject>());
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
void testArray(JsonArray value) {
|
|
|
|
DynamicJsonDocument doc;
|
2018-11-03 20:21:33 +00:00
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
|
var.set(value);
|
|
|
|
|
|
|
|
checkIsArray(var);
|
|
|
|
|
|
|
|
JsonVariantConst cvar = var;
|
|
|
|
checkIsArray(cvar);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename TVariant>
|
|
|
|
void checkIsBool(TVariant var) {
|
|
|
|
REQUIRE(var.template is<bool>());
|
|
|
|
|
|
|
|
REQUIRE_FALSE(var.template is<double>());
|
|
|
|
REQUIRE_FALSE(var.template is<float>());
|
|
|
|
REQUIRE_FALSE(var.template is<int>());
|
|
|
|
REQUIRE_FALSE(var.template is<long>());
|
|
|
|
REQUIRE_FALSE(var.template is<const char *>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonArray>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonObject>());
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
void testBool(bool value) {
|
|
|
|
DynamicJsonDocument doc;
|
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
|
var.set(value);
|
2018-11-03 20:21:33 +00:00
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
checkIsBool(var);
|
|
|
|
checkIsBool(JsonVariantConst(var));
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
template <typename TVariant>
|
|
|
|
void checkIsFloat(TVariant var) {
|
|
|
|
REQUIRE(var.template is<double>());
|
|
|
|
REQUIRE(var.template is<float>());
|
|
|
|
|
|
|
|
REQUIRE_FALSE(var.template is<bool>());
|
|
|
|
REQUIRE_FALSE(var.template is<int>());
|
|
|
|
REQUIRE_FALSE(var.template is<long>());
|
|
|
|
REQUIRE_FALSE(var.template is<const char *>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonArray>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonObject>());
|
|
|
|
}
|
|
|
|
|
|
|
|
void testFloat(double value) {
|
|
|
|
DynamicJsonDocument doc;
|
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
|
var.set(value);
|
|
|
|
|
|
|
|
checkIsFloat(var);
|
|
|
|
checkIsFloat(JsonVariantConst(var));
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename TVariant>
|
|
|
|
void checkIsInteger(TVariant var) {
|
|
|
|
REQUIRE(var.template is<long>());
|
|
|
|
REQUIRE(var.template is<int>());
|
|
|
|
REQUIRE(var.template is<float>());
|
|
|
|
REQUIRE(var.template is<double>());
|
|
|
|
|
|
|
|
REQUIRE_FALSE(var.template is<bool>());
|
|
|
|
REQUIRE_FALSE(var.template is<const char *>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonArray>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonObject>());
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
void testInteger(T value) {
|
|
|
|
DynamicJsonDocument doc;
|
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
|
var.set(value);
|
|
|
|
|
|
|
|
checkIsInteger(var);
|
|
|
|
checkIsInteger(JsonVariantConst(var));
|
|
|
|
}
|
2018-11-03 20:21:33 +00:00
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
template <typename TVariant>
|
|
|
|
void checkIsString(TVariant var) {
|
|
|
|
REQUIRE(var.template is<const char *>());
|
|
|
|
REQUIRE(var.template is<std::string>());
|
|
|
|
|
|
|
|
REQUIRE_FALSE(var.template is<bool>());
|
|
|
|
REQUIRE_FALSE(var.template is<int>());
|
|
|
|
REQUIRE_FALSE(var.template is<double>());
|
|
|
|
REQUIRE_FALSE(var.template is<float>());
|
|
|
|
REQUIRE_FALSE(var.template is<long>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonArray>());
|
|
|
|
REQUIRE_FALSE(var.template is<JsonObject>());
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
void testString(const char *value) {
|
|
|
|
DynamicJsonDocument doc;
|
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
|
var.set(value);
|
2018-11-03 20:21:33 +00:00
|
|
|
|
2018-11-13 14:50:48 +00:00
|
|
|
checkIsString(var);
|
|
|
|
checkIsString(JsonVariantConst(var));
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("JsonVariant::is()") {
|
|
|
|
SECTION("JsonArray") {
|
|
|
|
DynamicJsonDocument doc;
|
|
|
|
JsonArray array = doc.to<JsonArray>();
|
2018-11-13 14:50:48 +00:00
|
|
|
testArray(array);
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("bool") {
|
2018-11-13 14:50:48 +00:00
|
|
|
testBool(true);
|
|
|
|
testBool(false);
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("double") {
|
2018-11-13 14:50:48 +00:00
|
|
|
testFloat(4.2);
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("int") {
|
2018-11-13 14:50:48 +00:00
|
|
|
testInteger(42);
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("long") {
|
2018-11-13 14:50:48 +00:00
|
|
|
testInteger(42L);
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("string") {
|
2018-11-13 14:50:48 +00:00
|
|
|
testString("42");
|
2018-11-03 20:21:33 +00:00
|
|
|
}
|
|
|
|
}
|