Test array subscript

This commit is contained in:
Benoit Blanchon
2022-03-10 19:00:24 +01:00
parent b04471c7a8
commit e80c604843
2 changed files with 36 additions and 9 deletions

View File

@@ -131,7 +131,7 @@ TEST_CASE("JsonVariant::operator[]") {
#endif #endif
SECTION("get value from linked object") { SECTION("get value from linked object") {
StaticJsonDocument<1024> doc1, doc2; StaticJsonDocument<1024> doc2;
doc2["hello"] = "world"; doc2["hello"] = "world";
var.link(doc2); var.link(doc2);
@@ -139,7 +139,7 @@ TEST_CASE("JsonVariant::operator[]") {
} }
SECTION("set value to linked object") { SECTION("set value to linked object") {
StaticJsonDocument<1024> doc1, doc2; StaticJsonDocument<1024> doc2;
doc2["hello"] = "world"; doc2["hello"] = "world";
var.link(doc2); var.link(doc2);
@@ -148,6 +148,25 @@ TEST_CASE("JsonVariant::operator[]") {
CHECK(doc.as<std::string>() == "{\"hello\":\"world\"}"); CHECK(doc.as<std::string>() == "{\"hello\":\"world\"}");
CHECK(doc2.as<std::string>() == "{\"hello\":\"world\"}"); CHECK(doc2.as<std::string>() == "{\"hello\":\"world\"}");
} }
SECTION("get value from linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
CHECK(var[0].as<int>() == 42);
}
SECTION("set value to linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
var[0] = 666; // no-op
CHECK(doc.as<std::string>() == "[42]");
CHECK(doc2.as<std::string>() == "[42]");
}
} }
TEST_CASE("JsonVariantConst::operator[]") { TEST_CASE("JsonVariantConst::operator[]") {
@@ -222,10 +241,18 @@ TEST_CASE("JsonVariantConst::operator[]") {
} }
SECTION("get value from linked object") { SECTION("get value from linked object") {
StaticJsonDocument<1024> doc1, doc2; StaticJsonDocument<1024> doc2;
doc2["hello"] = "world"; doc2["hello"] = "world";
var.link(doc2); var.link(doc2);
CHECK(cvar["hello"].as<std::string>() == "world"); CHECK(cvar["hello"].as<std::string>() == "world");
} }
SECTION("get value from linked array") {
StaticJsonDocument<1024> doc2;
doc2.add(42);
var.link(doc2);
CHECK(cvar[0].as<int>() == 42);
}
} }

View File

@@ -88,13 +88,12 @@ class VariantData {
bool asBoolean() const; bool asBoolean() const;
CollectionData *asArray() { CollectionData *asArray() {
return isArray() ? &_content.asCollection : 0; return isArrayStrict() ? &_content.asCollection : 0;
} }
const CollectionData *asArray() const { const CollectionData *asArray() const {
// TODO if (isPointer())
// if (isPointer()) return _content.asPointer->asArray();
// return _content.asPointer->asArray();
return const_cast<VariantData *>(this)->asArray(); return const_cast<VariantData *>(this)->asArray();
} }
@@ -302,13 +301,14 @@ class VariantData {
} }
VariantData *getElement(size_t index) const { VariantData *getElement(size_t index) const {
return isArray() ? _content.asCollection.getElement(index) : 0; const CollectionData *col = asArray();
return col ? col->getElement(index) : 0;
} }
VariantData *getOrAddElement(size_t index, MemoryPool *pool) { VariantData *getOrAddElement(size_t index, MemoryPool *pool) {
if (isNull()) if (isNull())
toArray(); toArray();
if (!isArray()) if (!isArrayStrict())
return 0; return 0;
return _content.asCollection.getOrAddElement(index, pool); return _content.asCollection.getOrAddElement(index, pool);
} }