@@ -51,29 +51,74 @@ TEST_CASE("DynamicJsonDocument") {
51
51
}
52
52
}
53
53
54
+ SECTION (" memoryUsage()" ) {
55
+ SECTION (" Increases after adding value to array" ) {
56
+ JsonArray arr = doc.to <JsonArray>();
57
+
58
+ REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (0 ));
59
+ arr.add (42 );
60
+ REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (1 ));
61
+ arr.add (43 );
62
+ REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (2 ));
63
+ }
64
+
65
+ SECTION (" Increases after adding value to object" ) {
66
+ JsonObject obj = doc.to <JsonObject>();
67
+
68
+ REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (0 ));
69
+ obj[" a" ] = 1 ;
70
+ REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (1 ));
71
+ obj[" b" ] = 2 ;
72
+ REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (2 ));
73
+ }
74
+ }
75
+ }
76
+
77
+ TEST_CASE (" DynamicJsonDocument copies" ) {
54
78
SECTION (" Copy constructor" ) {
55
- deserializeJson (doc, " {\" hello\" :\" world\" }" );
56
- doc.nestingLimit = 42 ;
79
+ DynamicJsonDocument doc1 (1234 );
80
+ deserializeJson (doc1, " {\" hello\" :\" world\" }" );
81
+ doc1.nestingLimit = 42 ;
57
82
58
- DynamicJsonDocument doc2 = doc ;
83
+ DynamicJsonDocument doc2 = doc1 ;
59
84
60
85
std::string json;
61
86
serializeJson (doc2, json);
62
87
REQUIRE (json == " {\" hello\" :\" world\" }" );
88
+
63
89
REQUIRE (doc2.nestingLimit == 42 );
90
+ REQUIRE (doc2.capacity () == doc1.capacity ());
64
91
}
65
92
66
- SECTION (" Copy assignment" ) {
67
- DynamicJsonDocument doc2 ;
68
- deserializeJson (doc2 , " {\" hello\" :\" world\" }" );
69
- doc2 .nestingLimit = 42 ;
93
+ SECTION (" Copy assignment preserves the buffer when capacity is sufficient " ) {
94
+ DynamicJsonDocument doc1 ( 1234 ) ;
95
+ deserializeJson (doc1 , " {\" hello\" :\" world\" }" );
96
+ doc1 .nestingLimit = 42 ;
70
97
71
- doc = doc2;
98
+ DynamicJsonDocument doc2 (doc1.capacity ());
99
+ doc2 = doc1;
72
100
73
101
std::string json;
74
- serializeJson (doc , json);
102
+ serializeJson (doc2 , json);
75
103
REQUIRE (json == " {\" hello\" :\" world\" }" );
76
- REQUIRE (doc.nestingLimit == 42 );
104
+ REQUIRE (doc2.nestingLimit == 42 );
105
+ REQUIRE (doc2.cap
F438
acity () == doc1.capacity ());
106
+ }
107
+
108
+ SECTION (" Copy assignment realloc the buffer when capacity is insufficient" ) {
109
+ DynamicJsonDocument doc1 (1234 );
110
+ deserializeJson (doc1, " {\" hello\" :\" world\" }" );
111
+ doc1.nestingLimit = 42 ;
112
+ DynamicJsonDocument doc2 (8 );
113
+
114
+ REQUIRE (doc2.capacity () < doc1.memoryUsage ());
115
+ doc2 = doc1;
116
+ REQUIRE (doc2.capacity () >= doc1.memoryUsage ());
117
+
118
+ std::string json;
119
+ serializeJson (doc2, json);
120
+ REQUIRE (json == " {\" hello\" :\" world\" }" );
121
+ REQUIRE (doc2.nestingLimit == 42 );
77
122
}
78
123
79
124
SECTION (" Construct from StaticJsonDocument" ) {
@@ -87,6 +132,7 @@ TEST_CASE("DynamicJsonDocument") {
87
132
serializeJson (ddoc, json);
88
133
REQUIRE (json == " {\" hello\" :\" world\" }" );
89
134
REQUIRE (ddoc.nestingLimit == 42 );
135
+ REQUIRE (ddoc.capacity () == sdoc.capacity ());
90
136
}
91
137
92
138
SECTION (" Assign from StaticJsonDocument" ) {
@@ -104,26 +150,4 @@ TEST_CASE("DynamicJsonDocument") {
104
150
REQUIRE (json == " {\" hello\" :\" world\" }" );
105
151
REQUIRE (ddoc.nestingLimit == 42 );
106
152
}
107
-
108
- SECTION (" memoryUsage()" ) {
109
- SECTION (" Increases after adding value to array" ) {
110
- JsonArray arr = doc.to <JsonArray>();
111
-
112
- REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (0 ));
113
- arr.add (42 );
114
- REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (1 ));
115
- arr.add (43 );
116
- REQUIRE (doc.memoryUsage () == JSON_ARRAY_SIZE (2 ));
117
- }
118
-
119
- SECTION (" Increases after adding value to object" ) {
120
- JsonObject obj = doc.to <JsonObject>();
121
-
122
- REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (0 ));
123
- obj[" a" ] = 1 ;
124
- REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (1 ));
125
- obj[" b" ] = 2 ;
126
- REQUIRE (doc.memoryUsage () == JSON_OBJECT_SIZE (2 ));
127
- }
128
- }
129
153
}
0 commit comments