Implemented reference semantics for JsonVariant

This commit is contained in:
Benoit Blanchon
2018-08-21 17:56:16 +02:00
parent 0454bd1ef6
commit 9cbc891816
53 changed files with 1196 additions and 839 deletions

View File

@ -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);
}