8000 Test construction of StaticJsonVariant · ROMSDEV/ArduinoJson@e3d090b · GitHub
[go: up one dir, main page]

Skip to content

Commit e3d090b

Browse files
committed
Test construction of StaticJsonVariant
1 parent d5de1d9 commit e3d090b

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

src/ArduinoJson/StaticJsonVariant.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,9 @@ class StaticJsonVariant : public JsonVariant {
3838
Internals::StaticJsonBufferBase& buffer() {
3939
return _buffer;
4040
}
41+
42+
size_t memoryUsage() const {
43+
return _buffer.size() + sizeof(JsonVariant);
44+
}
4145
};
4246
}

test/JsonVariant/constructor.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
5050
JsonArray& arr = object.createNestedArray("values");
5151
arr.add(42);
5252

53+
const size_t size = JSON_OBJECT_SIZE(2) + JSON_ARRAY_SIZE(1);
5354
DynamicJsonVariant variant = object;
5455

5556
// modifiy object to make sure we made a copy
@@ -58,6 +59,7 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
5859

5960
REQUIRE("{\"hello\":\"world\",\"values\":[42]}" ==
6061
variant.as<std::string>());
62+
REQUIRE(size == variant.memoryUsage()); // BUG: copies the keys
6163
}
6264

6365
SECTION("JsonArray") {
@@ -66,13 +68,15 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
6668
JsonObject& object = array.createNestedObject();
6769
object["hello"] = "world";
6870

71+
const size_t size = JSON_ARRAY_SIZE(2) + JSON_OBJECT_SIZE(1);
6972
DynamicJsonVariant variant = array;
7073

7174
// modify the array to make sure we make a copy
7275
array[0] = 666;
7376
object["hello"] = "dummy";
7477

7578
REQUIRE("[42,{\"hello\":\"world\"}]" == variant.as<std::string>());
79+
REQUIRE(size == variant.memoryUsage()); // BUG: copies the keys
7680
}
7781

7882
SECTION("DynamicJsonVariant") {
@@ -94,3 +98,86 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
9498
// REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
9599
// }
96100
}
101+
102+
TEST_CASE("StaticJsonVariant::StaticJsonVariant()") {
103+
SECTION("int") {
104+
StaticJsonVariant<10> variant = 123;
105+
106+
REQUIRE(123 == variant.as<int>());
107+
REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
108+
}
109+
110+
SECTION("double") {
111+
StaticJsonVariant<10> variant = 123.45;
112+
113+
REQUIRE(123.45 == variant.as<double>());
114+
REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
115+
}
116+
117+
SECTION("bool") {
118+
StaticJsonVariant<10> variant = true;
119+
120+
REQUIRE(variant.as<bool>());
121+
REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
122+
}
123+
124+
SECTION("const char*") {
125+
StaticJsonVariant<10> variant = "hello";
126+
127+
REQUIRE(std::string("hello") == variant.as<const char*>());
128+
REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
129+
}
130+
131+
SECTION("std::string") {
132+
StaticJsonVariant<10> variant = std::string("hello");
133+
134+
REQUIRE(std::string("hello") == variant.as<std::string>());
135+
REQUIRE(sizeof(JsonVariant) + 6 == variant.memoryUsage());
136+
}
137+
138+
SECTION("JsonObject") {
139+
DynamicJsonObject object;
140+
object["hello"] = "world";
141+
JsonArray& arr = object.createNestedArray("values");
142+
arr.add(42);
143+
144+
const size_t size = JSON_OBJECT_SIZE(2) + JSON_ARRAY_SIZE(1);
145+
StaticJsonVariant<size> variant = object;
146+
147+
// modifiy object to make sure we made a copy
148+
object["hello"] = "dummy";
149+
arr.add(666);
150+
151+
REQUIRE("{\"hello\":\"world\",\"values\":[42]}" ==
152+
variant.as<std::string>());
153+
REQUIRE(size == variant.memoryUsage()); // BUG: copies the keys
154+
}
155+
156+
SECTION("JsonArray") {
157+
DynamicJsonArray array;
158+
array.add(42);
159+
JsonObject& object = array.createNestedObject();
160+
object["hello"] = "world";
161+
162+
const size_t size = JSON_ARRAY_SIZE(2) + JSON_OBJECT_SIZE(1);
163+
StaticJsonVariant<size> variant = array;
164+
165+
// modify the array to make sure we make a copy
166+
array[0] = 666;
167+
object["hello"] = "dummy";
168+
169+
REQUIRE("[42,{\"hello\":\"world\"}]" == variant.as<std::string>());
170+
REQUIRE(size == variant.memoryUsage()); // BUG: copies the keys
171+
}
172+
173+
// BUG: it's not possible to construct a StaticJsonVariant from a
174+
// DynamicJsonVariant
175+
//
176+
// SECTION("DynamicJsonVariant") {
177+
// DynamicJsonVariant original = 123;
178+
// StaticJsonVariant<10> variant = original;
179+
180+
// REQUIRE(123 == variant.as<int>());
181+
// REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
182+
// }
183+
}

0 commit comments

Comments
 (0)
0