arduino/libraries/ArduinoJson/test/JsonVariant/is.cpp

151 lines
3.5 KiB
C++
Raw Normal View History

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
}
}