@@ -50,6 +50,7 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
50
50
JsonArray& arr = object.createNestedArray (" values" );
51
51
arr.add (42 );
52
52
53
+ const size_t size = JSON_OBJECT_SIZE (2 ) + JSON_ARRAY_SIZE (1 );
53
54
DynamicJsonVariant variant = object;
54
55
55
56
// modifiy object to make sure we made a copy
@@ -58,6 +59,7 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
58
59
59
60
REQUIRE (" {\" hello\" :\" world\" ,\" values\" :[42]}" ==
60
61
variant.as <std::string>());
62
+ REQUIRE (size == variant.memoryUsage ()); // BUG: copies the keys
61
63
}
62
64
63
65
SECTION (" JsonArray" ) {
@@ -66,13 +68,15 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
66
68
JsonObject& object = array.createNestedObject ();
67
69
object[" hello" ] = " world" ;
68
70
71
+ const size_t size = JSON_ARRAY_SIZE (2 ) + JSON_OBJECT_SIZE (1 );
69
72
DynamicJsonVariant variant = array;
70
73
71
74
// modify the array to make sure we make a copy
72
75
array[0 ] = 666 ;
73
76
object[" hello" ] = " dummy" ;
74
77
75
78
REQUIRE (" [42,{\" hello\" :\" world\" }]" == variant.as <std::string>());
79
+ REQUIRE (size == variant.memoryUsage ()); // BUG: copies the keys
76
80
}
77
81
78
82
SECTION (" DynamicJsonVariant" ) {
@@ -94,3 +98,86 @@ TEST_CASE("DynamicJsonVariant::DynamicJsonVariant()") {
94
98
// REQUIRE(sizeof(JsonVariant) == variant.memoryUsage());
95
99
// }
96
100
}
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