Add more tests for JsonArrayConst

This commit is contained in:
Benoit Blanchon
2024-01-08 19:10:29 +01:00
parent 08cac13c43
commit ca0dda7ac1
13 changed files with 250 additions and 86 deletions

View File

@ -16,6 +16,7 @@ add_subdirectory(Deprecated)
add_subdirectory(FailingBuilds) add_subdirectory(FailingBuilds)
add_subdirectory(IntegrationTests) add_subdirectory(IntegrationTests)
add_subdirectory(JsonArray) add_subdirectory(JsonArray)
add_subdirectory(JsonArrayConst)
add_subdirectory(JsonDeserializer) add_subdirectory(JsonDeserializer)
add_subdirectory(JsonDocument) add_subdirectory(JsonDocument)
add_subdirectory(JsonObject) add_subdirectory(JsonObject)

View File

@ -8,18 +8,15 @@
TEST_CASE("JsonArray::operator==()") { TEST_CASE("JsonArray::operator==()") {
JsonDocument doc1; JsonDocument doc1;
JsonArray array1 = doc1.to<JsonArray>(); JsonArray array1 = doc1.to<JsonArray>();
JsonArrayConst array1c = array1;
JsonDocument doc2; JsonDocument doc2;
JsonArray array2 = doc2.to<JsonArray>(); JsonArray array2 = doc2.to<JsonArray>();
JsonArrayConst array2c = array2;
SECTION("should return false when arrays differ") { SECTION("should return false when arrays differ") {
array1.add("coucou"); array1.add("coucou");
array2.add(1); array2.add(1);
REQUIRE_FALSE(array1 == array2); REQUIRE_FALSE(array1 == array2);
REQUIRE_FALSE(array1c == array2c);
} }
SECTION("should return false when LHS has more elements") { SECTION("should return false when LHS has more elements") {
@ -28,7 +25,6 @@ TEST_CASE("JsonArray::operator==()") {
array2.add(1); array2.add(1);
REQUIRE_FALSE(array1 == array2); REQUIRE_FALSE(array1 == array2);
REQUIRE_FALSE(array1c == array2c);
} }
SECTION("should return false when RHS has more elements") { SECTION("should return false when RHS has more elements") {
@ -37,7 +33,6 @@ TEST_CASE("JsonArray::operator==()") {
array2.add(2); array2.add(2);
REQUIRE_FALSE(array1 == array2); REQUIRE_FALSE(array1 == array2);
REQUIRE_FALSE(array1c == array2c);
} }
SECTION("should return true when arrays equal") { SECTION("should return true when arrays equal") {
@ -45,7 +40,6 @@ TEST_CASE("JsonArray::operator==()") {
array2.add("coucou"); array2.add("coucou");
REQUIRE(array1 == array2); REQUIRE(array1 == array2);
REQUIRE(array1c == array2c);
} }
SECTION("should return false when RHS is null") { SECTION("should return false when RHS is null") {

View File

@ -18,19 +18,6 @@ TEST_CASE("JsonArray::isNull()") {
} }
} }
TEST_CASE("JsonArrayConst::isNull()") {
SECTION("returns true") {
JsonArrayConst arr;
REQUIRE(arr.isNull() == true);
}
SECTION("returns false") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
REQUIRE(arr.isNull() == false);
}
}
TEST_CASE("JsonArray::operator bool()") { TEST_CASE("JsonArray::operator bool()") {
SECTION("returns false") { SECTION("returns false") {
JsonArray arr; JsonArray arr;
@ -43,16 +30,3 @@ TEST_CASE("JsonArray::operator bool()") {
REQUIRE(static_cast<bool>(arr) == true); REQUIRE(static_cast<bool>(arr) == true);
} }
} }
TEST_CASE("JsonArrayConst::operator bool()") {
SECTION("returns false") {
JsonArrayConst arr;
REQUIRE(static_cast<bool>(arr) == false);
}
SECTION("returns true") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
REQUIRE(static_cast<bool>(arr) == true);
}
}

View File

@ -5,31 +5,25 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <catch.hpp> #include <catch.hpp>
template <typename TArray> TEST_CASE("JsonArray::begin()/end()") {
static void run_iterator_test() { SECTION("Non null JsonArray") {
JsonDocument doc; JsonDocument doc;
JsonArray tmp = doc.to<JsonArray>(); JsonArray array = doc.to<JsonArray>();
tmp.add(12); array.add(12);
tmp.add(34); array.add(34);
TArray array = tmp; auto it = array.begin();
typename TArray::iterator it = array.begin(); auto end = array.end();
typename TArray::iterator end = array.end();
REQUIRE(end != it); REQUIRE(end != it);
REQUIRE(12 == it->template as<int>()); REQUIRE(12 == it->as<int>());
REQUIRE(12 == static_cast<int>(*it)); REQUIRE(12 == static_cast<int>(*it));
++it; ++it;
REQUIRE(end != it); REQUIRE(end != it);
REQUIRE(34 == it->template as<int>()); REQUIRE(34 == it->as<int>());
REQUIRE(34 == static_cast<int>(*it)); REQUIRE(34 == static_cast<int>(*it));
++it; ++it;
REQUIRE(end == it); REQUIRE(end == it);
}
TEST_CASE("JsonArray::begin()/end()") {
SECTION("Non null JsonArray") {
run_iterator_test<JsonArray>();
} }
SECTION("Null JsonArray") { SECTION("Null JsonArray") {
@ -38,15 +32,3 @@ TEST_CASE("JsonArray::begin()/end()") {
REQUIRE(array.begin() == array.end()); REQUIRE(array.begin() == array.end());
} }
} }
TEST_CASE("JsonArrayConst::begin()/end()") {
SECTION("Non null JsonArrayConst") {
run_iterator_test<JsonArrayConst>();
}
SECTION("Null JsonArrayConst") {
JsonArrayConst array;
REQUIRE(array.begin() == array.end());
}
}

View File

@ -8,8 +8,6 @@
#include "Allocators.hpp" #include "Allocators.hpp"
using ArduinoJson::detail::sizeofArray;
TEST_CASE("JsonArray::operator[]") { TEST_CASE("JsonArray::operator[]") {
SpyingAllocator spy; SpyingAllocator spy;
JsonDocument doc(&spy); JsonDocument doc(&spy);
@ -167,18 +165,3 @@ TEST_CASE("JsonArray::operator[]") {
} }
#endif #endif
} }
TEST_CASE("JsonArrayConst::operator[]") {
JsonDocument doc;
JsonArray array = doc.to<JsonArray>();
array.add(0);
SECTION("int") {
array[0] = 123;
JsonArrayConst carr = array;
REQUIRE(123 == carr[0].as<int>());
REQUIRE(true == carr[0].is<int>());
REQUIRE(false == carr[0].is<bool>());
}
}

View File

@ -0,0 +1,19 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2024, Benoit BLANCHON
# MIT License
add_executable(JsonArrayConstTests
equals.cpp
isNull.cpp
iterator.cpp
nesting.cpp
size.cpp
subscript.cpp
)
add_test(JsonArrayConst JsonArrayConstTests)
set_tests_properties(JsonArrayConst
PROPERTIES
LABELS "Catch"
)

View File

@ -0,0 +1,63 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::operator==()") {
JsonDocument doc1;
JsonArrayConst array1 = doc1.to<JsonArray>();
JsonDocument doc2;
JsonArrayConst array2 = doc2.to<JsonArray>();
SECTION("should return false when arrays differ") {
doc1.add("coucou");
doc2.add(1);
REQUIRE_FALSE(array1 == array2);
}
SECTION("should return false when LHS has more elements") {
doc1.add(1);
doc1.add(2);
doc2.add(1);
REQUIRE_FALSE(array1 == array2);
}
SECTION("should return false when RHS has more elements") {
doc1.add(1);
doc2.add(1);
doc2.add(2);
REQUIRE_FALSE(array1 == array2);
}
SECTION("should return true when arrays equal") {
doc1.add("coucou");
doc2.add("coucou");
REQUIRE(array1 == array2);
}
SECTION("should return false when RHS is null") {
JsonArrayConst null;
REQUIRE_FALSE(array1 == null);
}
SECTION("should return false when LHS is null") {
JsonArrayConst null;
REQUIRE_FALSE(null == array1);
}
SECTION("should return true when both are null") {
JsonArrayConst null1;
JsonArrayConst null2;
REQUIRE(null1 == null2);
}
}

View File

@ -0,0 +1,32 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::isNull()") {
SECTION("returns true") {
JsonArrayConst arr;
REQUIRE(arr.isNull() == true);
}
SECTION("returns false") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
REQUIRE(arr.isNull() == false);
}
}
TEST_CASE("JsonArrayConst::operator bool()") {
SECTION("returns false") {
JsonArrayConst arr;
REQUIRE(static_cast<bool>(arr) == false);
}
SECTION("returns true") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
REQUIRE(static_cast<bool>(arr) == true);
}
}

View File

@ -0,0 +1,34 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::begin()/end()") {
SECTION("Non null JsonArrayConst") {
JsonDocument doc;
JsonArrayConst array = doc.to<JsonArray>();
doc.add(12);
doc.add(34);
auto it = array.begin();
auto end = array.end();
REQUIRE(end != it);
REQUIRE(12 == it->as<int>());
REQUIRE(12 == static_cast<int>(*it));
++it;
REQUIRE(end != it);
REQUIRE(34 == it->as<int>());
REQUIRE(34 == static_cast<int>(*it));
++it;
REQUIRE(end == it);
}
SECTION("Null JsonArrayConst") {
JsonArrayConst array;
REQUIRE(array.begin() == array.end());
}
}

View File

@ -0,0 +1,35 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::nesting()") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
SECTION("return 0 if unbound") {
JsonArrayConst unbound;
REQUIRE(unbound.nesting() == 0);
}
SECTION("returns 1 for empty array") {
REQUIRE(arr.nesting() == 1);
}
SECTION("returns 1 for flat array") {
doc.add("hello");
REQUIRE(arr.nesting() == 1);
}
SECTION("returns 2 with nested array") {
doc.add<JsonArray>();
REQUIRE(arr.nesting() == 2);
}
SECTION("returns 2 with nested object") {
doc.add<JsonObject>();
REQUIRE(arr.nesting() == 2);
}
}

View File

@ -0,0 +1,27 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::size()") {
JsonDocument doc;
JsonArrayConst array = doc.to<JsonArray>();
SECTION("returns 0 if unbound") {
JsonArrayConst unbound;
REQUIRE(0U == unbound.size());
}
SECTION("returns 0 is empty") {
REQUIRE(0U == array.size());
}
SECTION("return number of elements") {
doc.add("hello");
doc.add("world");
REQUIRE(2U == array.size());
}
}

View File

@ -0,0 +1,20 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <stdint.h>
#include <catch.hpp>
TEST_CASE("JsonArrayConst::operator[]") {
JsonDocument doc;
JsonArrayConst arr = doc.to<JsonArray>();
doc.add(1);
doc.add(2);
doc.add(3);
REQUIRE(1 == arr[0].as<int>());
REQUIRE(2 == arr[1].as<int>());
REQUIRE(3 == arr[2].as<int>());
REQUIRE(0 == arr[3].as<int>());
}

View File

@ -51,7 +51,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
} }
operator JsonVariantConst() const { operator JsonVariantConst() const {
return JsonVariantConst(collectionToVariant(data_), resources_); return JsonVariantConst(getData(), resources_);
} }
// Returns true if the reference is unbound. // Returns true if the reference is unbound.
@ -69,7 +69,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
// Returns the depth (nesting level) of the array. // Returns the depth (nesting level) of the array.
// https://arduinojson.org/v7/api/jsonarrayconst/nesting/ // https://arduinojson.org/v7/api/jsonarrayconst/nesting/
FORCE_INLINE size_t nesting() const { FORCE_INLINE size_t nesting() const {
return detail::VariantData::nesting(collectionToVariant(data_), resources_); return detail::VariantData::nesting(getData(), resources_);
} }
// Returns the number of elements in the array. // Returns the number of elements in the array.