Increased test coverage

This commit is contained in:
Benoit Blanchon
2021-09-10 08:40:02 +02:00
parent 6a71f31820
commit e0cd5b6405
9 changed files with 147 additions and 49 deletions

View File

@ -29,6 +29,14 @@ TEST_CASE("nullptr") {
REQUIRE(variant.isNull());
}
SECTION("JsonVariant.set(nullptr) with unbound reference") {
JsonVariant unboundReference;
unboundReference.set(nullptr);
REQUIRE(variant.isNull());
}
SECTION("JsonVariant.is<nullptr_t>()") {
variant.set(42);
REQUIRE(variant.is<std::nullptr_t>() == false);

View File

@ -7,73 +7,83 @@
TEST_CASE("JsonArray::remove()") {
DynamicJsonDocument doc(4096);
JsonArray _array = doc.to<JsonArray>();
_array.add(1);
_array.add(2);
_array.add(3);
JsonArray array = doc.to<JsonArray>();
array.add(1);
array.add(2);
array.add(3);
SECTION("RemoveFirstByIndex") {
_array.remove(0);
SECTION("remove first by index") {
array.remove(0);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 2);
REQUIRE(_array[1] == 3);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 2);
REQUIRE(array[1] == 3);
}
SECTION("RemoveMiddleByIndex") {
_array.remove(1);
SECTION("remove middle by index") {
array.remove(1);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 1);
REQUIRE(_array[1] == 3);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 1);
REQUIRE(array[1] == 3);
}
SECTION("RemoveLastByIndex") {
_array.remove(2);
SECTION("remove last by index") {
array.remove(2);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 1);
REQUIRE(_array[1] == 2);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 1);
REQUIRE(array[1] == 2);
}
SECTION("RemoveFirstByIterator") {
JsonArray::iterator it = _array.begin();
_array.remove(it);
SECTION("remove first by iterator") {
JsonArray::iterator it = array.begin();
array.remove(it);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 2);
REQUIRE(_array[1] == 3);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 2);
REQUIRE(array[1] == 3);
}
SECTION("RemoveMiddleByIterator") {
JsonArray::iterator it = _array.begin();
SECTION("remove middle by iterator") {
JsonArray::iterator it = array.begin();
++it;
_array.remove(it);
array.remove(it);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 1);
REQUIRE(_array[1] == 3);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 1);
REQUIRE(array[1] == 3);
}
SECTION("RemoveLastByIterator") {
JsonArray::iterator it = _array.begin();
SECTION("remove last bty iterator") {
JsonArray::iterator it = array.begin();
++it;
++it;
_array.remove(it);
array.remove(it);
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 1);
REQUIRE(_array[1] == 2);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 1);
REQUIRE(array[1] == 2);
}
SECTION("In a loop") {
for (JsonArray::iterator it = _array.begin(); it != _array.end(); ++it) {
for (JsonArray::iterator it = array.begin(); it != array.end(); ++it) {
if (*it == 2)
_array.remove(it);
array.remove(it);
}
REQUIRE(2 == _array.size());
REQUIRE(_array[0] == 1);
REQUIRE(_array[1] == 3);
REQUIRE(2 == array.size());
REQUIRE(array[0] == 1);
REQUIRE(array[1] == 3);
}
SECTION("remove by index on unbound reference") {
JsonArray unboundArray;
unboundArray.remove(20);
}
SECTION("remove by iterator on unbound reference") {
JsonArray unboundArray;
unboundArray.remove(unboundArray.begin());
}
}

View File

@ -70,8 +70,13 @@ TEST_CASE("JsonObject::remove()") {
}
#endif
SECTION("should work on null object") {
JsonObject null;
null.remove("key");
SECTION("remove by key on unbound reference") {
JsonObject unboundObject;
unboundObject.remove("key");
}
SECTION("remove by iterator on unbound reference") {
JsonObject unboundObject;
unboundObject.remove(unboundObject.begin());
}
}

View File

@ -10,21 +10,37 @@ TEST_CASE("JsonVariant::add()") {
DynamicJsonDocument doc(4096);
JsonVariant var = doc.to<JsonVariant>();
SECTION("integer") {
SECTION("add integer to new variant") {
var.add(42);
REQUIRE(var.as<std::string>() == "[42]");
}
SECTION("const char*") {
SECTION("add const char* to new variant") {
var.add("hello");
REQUIRE(var.as<std::string>() == "[\"hello\"]");
}
SECTION("std::string") {
SECTION("add std::string to new variant") {
var.add(std::string("hello"));
REQUIRE(var.as<std::string>() == "[\"hello\"]");
}
SECTION("add integer to integer") {
var.set(123);
var.add(456); // no-op
REQUIRE(var.as<std::string>() == "123");
}
SECTION("add integer to object") {
var["val"] = 123;
var.add(456); // no-op
REQUIRE(var.as<std::string>() == "{\"val\":123}");
}
}

View File

@ -158,6 +158,18 @@ TEST_CASE("Compare JsonVariant with JsonVariant") {
CHECK_FALSE(a > b);
}
SECTION("42 vs 42U") {
a.set(42);
b.set(42U);
CHECK(a == b);
CHECK(a <= b);
CHECK(a >= b);
CHECK_FALSE(a != b);
CHECK_FALSE(a < b);
CHECK_FALSE(a > b);
}
SECTION("42 vs 42.0") {
a.set(42);
b.set(42.0);
@ -230,6 +242,30 @@ TEST_CASE("Compare JsonVariant with JsonVariant") {
CHECK_FALSE(a == b);
}
SECTION("42U vs 42U") {
a.set(42U);
b.set(42U);
CHECK(a == b);
CHECK(a <= b);
CHECK(a >= b);
CHECK_FALSE(a != b);
CHECK_FALSE(a < b);
CHECK_FALSE(a > b);
}
SECTION("42U vs 42") {
a.set(42U);
b.set(42);
CHECK(a == b);
CHECK(a <= b);
CHECK(a >= b);
CHECK_FALSE(a != b);
CHECK_FALSE(a < b);
CHECK_FALSE(a > b);
}
SECTION("[1] vs [1]") {
a.add(1);
b.add(1);

View File

@ -83,4 +83,13 @@ TEST_CASE("JsonVariant::set(JsonVariant)") {
REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(7));
REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(7));
}
SECTION("destination is unbound") {
JsonVariant unboundVariant;
unboundVariant.set(var1);
REQUIRE(unboundVariant.isUndefined());
REQUIRE(unboundVariant.isNull());
}
}

View File

@ -58,6 +58,15 @@ TEST_CASE("JsonVariant::operator[]") {
REQUIRE(1 == var[0].size());
REQUIRE(std::string("world") == var[0]["hello"]);
}
SECTION("variant[0] when variant contains an integer") {
var.set(123);
var[0] = 345; // no-op
REQUIRE(var.is<int>());
REQUIRE(var.as<int>() == 123);
}
}
SECTION("The JsonVariant is a JsonObject") {

View File

@ -15,6 +15,11 @@ static size_t print(StringWriter& writer, const char* s) {
return writer.write(reinterpret_cast<const uint8_t*>(s), strlen(s));
}
template <typename StringWriter>
static size_t print(StringWriter& writer, char c) {
return writer.write(static_cast<uint8_t>(c));
}
template <typename StringWriter, typename String>
void common_tests(StringWriter& writer, const String& output) {
SECTION("InitialState") {
@ -47,6 +52,7 @@ TEST_CASE("StaticStringWriter") {
SECTION("OverCapacity") {
REQUIRE(20 == print(writer, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
REQUIRE(0 == print(writer, "ABC"));
REQUIRE(0 == print(writer, 'D'));
REQUIRE("ABCDEFGHIJKLMNOPQRST" == std::string(output, 20));
}
}

View File

@ -12,7 +12,6 @@
namespace ARDUINOJSON_NAMESPACE {
//
enum {
VALUE_MASK = 0x7F,