source: rtos_arduino/trunk/arduino_lib/libraries/ArduinoJson/test/JsonParser_Array_Tests.cpp@ 209

Last change on this file since 209 was 209, checked in by ertl-honda, 8 years ago

BlueMix用のフィアルを追加

File size: 7.2 KB
Line 
1// Copyright Benoit Blanchon 2014-2016
2// MIT License
3//
4// Arduino JSON library
5// https://github.com/bblanchon/ArduinoJson
6// If you like this project, please add a star!
7
8#include <gtest/gtest.h>
9#include <ArduinoJson.h>
10
11class JsonParser_Array_Tests : public testing::Test {
12 protected:
13 void whenInputIs(const char *json) { strcpy(_jsonString, json); }
14
15 void whenInputIs(const char *json, size_t len) {
16 memcpy(_jsonString, json, len);
17 }
18
19 void parseMustSucceed() {
20 _array = &_jsonBuffer.parseArray(_jsonString);
21 EXPECT_TRUE(_array->success());
22 }
23
24 void parseMustFail() {
25 _array = &_jsonBuffer.parseArray(_jsonString);
26 EXPECT_FALSE(_array->success());
27 EXPECT_EQ(0, _array->size());
28 }
29
30 void sizeMustBe(int expected) { ASSERT_EQ(expected, _array->size()); }
31
32 template <typename T>
33 void firstElementMustBe(T expected) {
34 elementAtIndexMustBe(0, expected);
35 }
36
37 template <typename T>
38 void secondElementMustBe(T expected) {
39 elementAtIndexMustBe(1, expected);
40 }
41
42 template <typename T>
43 void elementAtIndexMustBe(int index, T expected) {
44 EXPECT_EQ(expected, (*_array)[index].as<T>());
45 }
46
47 void elementAtIndexMustBe(int index, const char *expected) {
48 EXPECT_STREQ(expected, (*_array)[index].as<const char *>());
49 }
50
51 DynamicJsonBuffer _jsonBuffer;
52 JsonArray *_array;
53 char _jsonString[256];
54};
55
56TEST_F(JsonParser_Array_Tests, EmptyArray) {
57 whenInputIs("[]");
58
59 parseMustSucceed();
60 sizeMustBe(0);
61}
62
63TEST_F(JsonParser_Array_Tests, MissingOpeningBracket) {
64 whenInputIs("]");
65 parseMustFail();
66}
67
68TEST_F(JsonParser_Array_Tests, ArrayWithNoEnd) {
69 whenInputIs("[");
70 parseMustFail();
71}
72
73TEST_F(JsonParser_Array_Tests, EmptyArrayWithLeadingSpaces) {
74 whenInputIs(" []");
75
76 parseMustSucceed();
77 sizeMustBe(0);
78}
79
80TEST_F(JsonParser_Array_Tests, Garbage) {
81 whenInputIs("%*$贈造");
82
83 parseMustFail();
84}
85
86TEST_F(JsonParser_Array_Tests, OneInteger) {
87 whenInputIs("[42]");
88
89 parseMustSucceed();
90 sizeMustBe(1);
91 firstElementMustBe(42);
92}
93
94TEST_F(JsonParser_Array_Tests, OneIntegerWithSpacesBefore) {
95 whenInputIs("[ \t\r\n42]");
96
97 parseMustSucceed();
98 sizeMustBe(1);
99 firstElementMustBe(42);
100}
101
102TEST_F(JsonParser_Array_Tests, OneIntegerWithSpaceAfter) {
103 whenInputIs("[42 \t\r\n]");
104
105 parseMustSucceed();
106 sizeMustBe(1);
107 firstElementMustBe(42);
108}
109
110TEST_F(JsonParser_Array_Tests, TwoIntegers) {
111 whenInputIs("[42,84]");
112
113 parseMustSucceed();
114 sizeMustBe(2);
115 firstElementMustBe(42);
116 secondElementMustBe(84);
117}
118
119TEST_F(JsonParser_Array_Tests, TwoDoubles) {
120 whenInputIs("[4.2,1e2]");
121
122 parseMustSucceed();
123 sizeMustBe(2);
124 firstElementMustBe(4.2);
125 secondElementMustBe(1e2);
126}
127
128TEST_F(JsonParser_Array_Tests, TwoBooleans) {
129 whenInputIs("[true,false]");
130
131 parseMustSucceed();
132 sizeMustBe(2);
133 firstElementMustBe(true);
134 secondElementMustBe(false);
135}
136
137TEST_F(JsonParser_Array_Tests, TwoNulls) {
138 const char *const nullCharPtr = 0;
139
140 whenInputIs("[null,null]");
141
142 parseMustSucceed();
143 sizeMustBe(2);
144 firstElementMustBe(nullCharPtr);
145 secondElementMustBe(nullCharPtr);
146}
147
148TEST_F(JsonParser_Array_Tests, TwoStringsDoubleQuotes) {
149 whenInputIs("[ \"hello\" , \"world\" ]");
150
151 parseMustSucceed();
152 sizeMustBe(2);
153 firstElementMustBe("hello");
154 secondElementMustBe("world");
155}
156
157TEST_F(JsonParser_Array_Tests, TwoStringsSingleQuotes) {
158 whenInputIs("[ 'hello' , 'world' ]");
159
160 parseMustSucceed();
161 sizeMustBe(2);
162 firstElementMustBe("hello");
163 secondElementMustBe("world");
164}
165
166TEST_F(JsonParser_Array_Tests, TwoStringsNoQuotes) {
167 whenInputIs("[ hello , world ]");
168
169 parseMustSucceed();
170 sizeMustBe(2);
171 firstElementMustBe("hello");
172 secondElementMustBe("world");
173}
174
175TEST_F(JsonParser_Array_Tests, EmptyStringsDoubleQuotes) {
176 whenInputIs("[\"\",\"\"]");
177
178 parseMustSucceed();
179 sizeMustBe(2);
180 firstElementMustBe("");
181 secondElementMustBe("");
182}
183
184TEST_F(JsonParser_Array_Tests, EmptyStringSingleQuotes) {
185 whenInputIs("[\'\',\'\']");
186
187 parseMustSucceed();
188 sizeMustBe(2);
189 firstElementMustBe("");
190 secondElementMustBe("");
191}
192
193TEST_F(JsonParser_Array_Tests, EmptyStringNoQuotes) {
194 whenInputIs("[,]");
195
196 parseMustSucceed();
197 sizeMustBe(2);
198 firstElementMustBe("");
199 secondElementMustBe("");
200}
201
202TEST_F(JsonParser_Array_Tests, ClosingDoubleQuoteMissing) {
203 whenInputIs("[\"]");
204
205 parseMustFail();
206}
207
208TEST_F(JsonParser_Array_Tests, ClosingSignleQuoteMissing) {
209 whenInputIs("[\']");
210
211 parseMustFail();
212}
213
214TEST_F(JsonParser_Array_Tests, StringWithEscapedChars) {
215 whenInputIs("[\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"]");
216
217 parseMustSucceed();
218 sizeMustBe(1);
219 firstElementMustBe("1\"2\\3/4\b5\f6\n7\r8\t9");
220}
221
222TEST_F(JsonParser_Array_Tests, StringWithUnterminatedEscapeSequence) {
223 whenInputIs("\"\\\0\"", 4);
224 parseMustFail();
225}
226
227TEST_F(JsonParser_Array_Tests, CCommentBeforeOpeningBracket) {
228 whenInputIs("/*COMMENT*/[\"hello\"]");
229
230 parseMustSucceed();
231 sizeMustBe(1);
232 firstElementMustBe("hello");
233}
234
235TEST_F(JsonParser_Array_Tests, CCommentAfterOpeningBracket) {
236 whenInputIs("[/*COMMENT*/\"hello\"]");
237
238 parseMustSucceed();
239 sizeMustBe(1);
240 firstElementMustBe("hello");
241}
242
243TEST_F(JsonParser_Array_Tests, CCommentBeforeClosingBracket) {
244 whenInputIs("[\"hello\"/*COMMENT*/]");
245
246 parseMustSucceed();
247 sizeMustBe(1);
248 firstElementMustBe("hello");
249}
250
251TEST_F(JsonParser_Array_Tests, CCommentAfterClosingBracket) {
252 whenInputIs("[\"hello\"]/*COMMENT*/");
253
254 parseMustSucceed();
255 sizeMustBe(1);
256 firstElementMustBe("hello");
257}
258
259TEST_F(JsonParser_Array_Tests, CCommentBeforeComma) {
260 whenInputIs("[\"hello\"/*COMMENT*/,\"world\"]");
261
262 parseMustSucceed();
263 sizeMustBe(2);
264 firstElementMustBe("hello");
265 secondElementMustBe("world");
266}
267
268TEST_F(JsonParser_Array_Tests, CCommentAfterComma) {
269 whenInputIs("[\"hello\",/*COMMENT*/\"world\"]");
270
271 parseMustSucceed();
272 sizeMustBe(2);
273 firstElementMustBe("hello");
274 secondElementMustBe("world");
275}
276
277TEST_F(JsonParser_Array_Tests, CppCommentBeforeOpeningBracket) {
278 whenInputIs("//COMMENT\n[\"hello\"]");
279
280 parseMustSucceed();
281 sizeMustBe(1);
282 firstElementMustBe("hello");
283}
284
285TEST_F(JsonParser_Array_Tests, CppCommentAfterOpeningBracket) {
286 whenInputIs("[//COMMENT\n\"hello\"]");
287
288 parseMustSucceed();
289 sizeMustBe(1);
290 firstElementMustBe("hello");
291}
292
293TEST_F(JsonParser_Array_Tests, CppCommentBeforeClosingBracket) {
294 whenInputIs("[\"hello\"//COMMENT\n]");
295
296 parseMustSucceed();
297 sizeMustBe(1);
298 firstElementMustBe("hello");
299}
300
301TEST_F(JsonParser_Array_Tests, CppCommentAfterClosingBracket) {
302 whenInputIs("[\"hello\"]//COMMENT\n");
303
304 parseMustSucceed();
305 sizeMustBe(1);
306 firstElementMustBe("hello");
307}
308
309TEST_F(JsonParser_Array_Tests, CppCommentBeforeComma) {
310 whenInputIs("[\"hello\"//COMMENT\n,\"world\"]");
311
312 parseMustSucceed();
313 sizeMustBe(2);
314 firstElementMustBe("hello");
315 secondElementMustBe("world");
316}
317
318TEST_F(JsonParser_Array_Tests, CppCommentAfterComma) {
319 whenInputIs("[\"hello\",//COMMENT\n\"world\"]");
320
321 parseMustSucceed();
322 sizeMustBe(2);
323 firstElementMustBe("hello");
324 secondElementMustBe("world");
325}
326
327TEST_F(JsonParser_Array_Tests, InvalidCppComment) {
328 whenInputIs("[/COMMENT\n]");
329 parseMustFail();
330}
331
332TEST_F(JsonParser_Array_Tests, InvalidComment) {
333 whenInputIs("[/*/\n]");
334 parseMustFail();
335}
336
337TEST_F(JsonParser_Array_Tests, UnfinishedCComment) {
338 whenInputIs("[/*COMMENT]");
339 parseMustFail();
340}
Note: See TracBrowser for help on using the repository browser.