main.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. #include "microjson.h"
  2. #include <iostream>
  3. #include <string.h>
  4. #include <gtest/gtest.h>
  5. class MicrojsonDeserializationTest : public ::testing::Test
  6. {
  7. public:
  8. MicrojsonDeserializationTest() = default;
  9. };
  10. TEST_F(MicrojsonDeserializationTest, StringValue)
  11. {
  12. const char *buffer1 = "{\"testField\":\"test\"}";
  13. size_t size = strlen(buffer1);
  14. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  15. auto it = obj.find("testField");
  16. ASSERT_TRUE(it != obj.end());
  17. EXPECT_STREQ(it->first.c_str(), "testField");
  18. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  19. EXPECT_STREQ(it->second.value.c_str(), "test");
  20. obj.clear();
  21. const char *buffer2 = "{\"testField\":\"\"}";
  22. size = strlen(buffer2);
  23. obj = microjson::parseObject(buffer2, size);
  24. it = obj.find("testField");
  25. ASSERT_TRUE(it != obj.end());
  26. EXPECT_STREQ(it->first.c_str(), "testField");
  27. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  28. EXPECT_STREQ(it->second.value.c_str(), "");
  29. obj.clear();
  30. const char *buffer3 = "{\"testField\":\"t\"}";
  31. size = strlen(buffer3);
  32. obj = microjson::parseObject(buffer3, size);
  33. it = obj.find("testField");
  34. ASSERT_TRUE(it != obj.end());
  35. EXPECT_STREQ(it->first.c_str(), "testField");
  36. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  37. EXPECT_STREQ(it->second.value.c_str(), "t");
  38. obj.clear();
  39. const char *buffer4 = "{\"testField\":\"\\\"test\\\"\"}";
  40. size = strlen(buffer4);
  41. obj = microjson::parseObject(buffer4, size);
  42. it = obj.find("testField");
  43. ASSERT_TRUE(it != obj.end());
  44. EXPECT_STREQ(it->first.c_str(), "testField");
  45. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  46. EXPECT_STREQ(it->second.value.c_str(), "\\\"test\\\"");
  47. obj.clear();
  48. const char *buffer5 = "{\"testField\":\"\\\"test\"}";
  49. size = strlen(buffer5);
  50. obj = microjson::parseObject(buffer5, size);
  51. it = obj.find("testField");
  52. ASSERT_TRUE(it != obj.end());
  53. EXPECT_STREQ(it->first.c_str(), "testField");
  54. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  55. EXPECT_STREQ(it->second.value.c_str(), "\\\"test");
  56. obj.clear();
  57. const char *buffer6 = "{\"testField\":\"\\\"\"}";
  58. size = strlen(buffer6);
  59. obj = microjson::parseObject(buffer6, size);
  60. it = obj.find("testField");
  61. ASSERT_TRUE(it != obj.end());
  62. EXPECT_STREQ(it->first.c_str(), "testField");
  63. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  64. EXPECT_STREQ(it->second.value.c_str(), "\\\"");
  65. obj.clear();
  66. const char *buffer7 = "{\"testField\":\"test\",\"testField1\":\"\",\"testField2\":\"t\",\"testField3\":\"\\\"test\\\"\",\"testField4\":\"\\\"test\",\"testField5\":\"\\\"\"}";
  67. size = strlen(buffer7);
  68. obj = microjson::parseObject(buffer7, size);
  69. it = obj.find("testField");
  70. ASSERT_TRUE(it != obj.end());
  71. EXPECT_STREQ(it->first.c_str(), "testField");
  72. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  73. EXPECT_STREQ(it->second.value.c_str(), "test");
  74. it = obj.find("testField1");
  75. ASSERT_TRUE(it != obj.end());
  76. EXPECT_STREQ(it->first.c_str(), "testField1");
  77. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  78. EXPECT_STREQ(it->second.value.c_str(), "");
  79. it = obj.find("testField2");
  80. ASSERT_TRUE(it != obj.end());
  81. EXPECT_STREQ(it->first.c_str(), "testField2");
  82. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  83. EXPECT_STREQ(it->second.value.c_str(), "t");
  84. it = obj.find("testField3");
  85. ASSERT_TRUE(it != obj.end());
  86. EXPECT_STREQ(it->first.c_str(), "testField3");
  87. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  88. EXPECT_STREQ(it->second.value.c_str(), "\\\"test\\\"");
  89. it = obj.find("testField4");
  90. ASSERT_TRUE(it != obj.end());
  91. EXPECT_STREQ(it->first.c_str(), "testField4");
  92. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  93. EXPECT_STREQ(it->second.value.c_str(), "\\\"test");
  94. it = obj.find("testField5");
  95. ASSERT_TRUE(it != obj.end());
  96. EXPECT_STREQ(it->first.c_str(), "testField5");
  97. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  98. EXPECT_STREQ(it->second.value.c_str(), "\\\"");
  99. }
  100. TEST_F(MicrojsonDeserializationTest, NumberValue)
  101. {
  102. const char *buffer1 = "{\"testField\":5}";
  103. size_t size = strlen(buffer1);
  104. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  105. auto it = obj.find("testField");
  106. ASSERT_TRUE(it != obj.end());
  107. EXPECT_STREQ(it->first.c_str(), "testField");
  108. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  109. EXPECT_STREQ(it->second.value.c_str(), "5");
  110. obj.clear();
  111. const char *buffer2 = "{\"testField\":56}";
  112. size = strlen(buffer2);
  113. obj = microjson::parseObject(buffer2, size);
  114. it = obj.find("testField");
  115. ASSERT_TRUE(it != obj.end());
  116. EXPECT_STREQ(it->first.c_str(), "testField");
  117. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  118. EXPECT_STREQ(it->second.value.c_str(), "56");
  119. obj.clear();
  120. const char *buffer3 = "{\"testField\":0}";
  121. size = strlen(buffer3);
  122. obj = microjson::parseObject(buffer3, size);
  123. it = obj.find("testField");
  124. ASSERT_TRUE(it != obj.end());
  125. EXPECT_STREQ(it->first.c_str(), "testField");
  126. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  127. EXPECT_STREQ(it->second.value.c_str(), "0");
  128. obj.clear();
  129. const char *buffer4 = "{\"testField\":-5}";
  130. size = strlen(buffer4);
  131. obj = microjson::parseObject(buffer4, size);
  132. it = obj.find("testField");
  133. ASSERT_TRUE(it != obj.end());
  134. EXPECT_STREQ(it->first.c_str(), "testField");
  135. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  136. EXPECT_STREQ(it->second.value.c_str(), "-5");
  137. obj.clear();
  138. const char *buffer5 = "{\"testField\":-131}";
  139. size = strlen(buffer5);
  140. obj = microjson::parseObject(buffer5, size);
  141. it = obj.find("testField");
  142. ASSERT_TRUE(it != obj.end());
  143. EXPECT_STREQ(it->first.c_str(), "testField");
  144. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  145. EXPECT_STREQ(it->second.value.c_str(), "-131");
  146. obj.clear();
  147. const char *buffer6 = "{\"testField\":5,\"testField1\":56,\"testField2\":0,\"testField3\":-8,\"testField4\":-124}";
  148. size = strlen(buffer6);
  149. obj = microjson::parseObject(buffer6, size);
  150. it = obj.find("testField");
  151. ASSERT_TRUE(it != obj.end());
  152. EXPECT_STREQ(it->first.c_str(), "testField");
  153. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  154. EXPECT_STREQ(it->second.value.c_str(), "5");
  155. it = obj.find("testField1");
  156. ASSERT_TRUE(it != obj.end());
  157. EXPECT_STREQ(it->first.c_str(), "testField1");
  158. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  159. EXPECT_STREQ(it->second.value.c_str(), "56");
  160. it = obj.find("testField2");
  161. ASSERT_TRUE(it != obj.end());
  162. EXPECT_STREQ(it->first.c_str(), "testField2");
  163. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  164. EXPECT_STREQ(it->second.value.c_str(), "0");
  165. it = obj.find("testField3");
  166. ASSERT_TRUE(it != obj.end());
  167. EXPECT_STREQ(it->first.c_str(), "testField3");
  168. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  169. EXPECT_STREQ(it->second.value.c_str(), "-8");
  170. it = obj.find("testField4");
  171. ASSERT_TRUE(it != obj.end());
  172. EXPECT_STREQ(it->first.c_str(), "testField4");
  173. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  174. EXPECT_STREQ(it->second.value.c_str(), "-124");
  175. }
  176. TEST_F(MicrojsonDeserializationTest, TextSpacesCutting)
  177. {
  178. const char *buffer1 = "\n\r\t {\n\r\t \"testField\"\n\r\t : 5\n\t \r}\n\t \r";
  179. size_t size = strlen(buffer1);
  180. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  181. auto it = obj.find("testField");
  182. ASSERT_TRUE(it != obj.end());
  183. EXPECT_STREQ(it->first.c_str(), "testField");
  184. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  185. EXPECT_STREQ(it->second.value.c_str(), "5");
  186. const char *buffer2 = "\n\r\t {\n\r\t \"testField\"\n\r\t : 5\n\t \r, \n\r\t \"testField2\"\n\r\t : -0.932e+10\n\t \r}\n\t \r";
  187. size = strlen(buffer2);
  188. obj = microjson::parseObject(buffer2, size);
  189. it = obj.find("testField");
  190. ASSERT_TRUE(it != obj.end());
  191. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  192. EXPECT_STREQ(it->second.value.c_str(), "5");
  193. it = obj.find("testField2");
  194. ASSERT_TRUE(it != obj.end());
  195. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  196. EXPECT_STREQ(it->second.value.c_str(), "-0.932e+10");
  197. const char *buffer3 = "\n\r\t {\n\r\t \"testField\"\n\r\t : \"5\"\n\t \r, \n\r\t \"testField2\"\n\r\t : \"\\\"qwerty\t\t\t\t\"\n\t \r}\n\t \r";
  198. size = strlen(buffer3);
  199. obj = microjson::parseObject(buffer3, size);
  200. it = obj.find("testField");
  201. ASSERT_TRUE(it != obj.end());
  202. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  203. EXPECT_STREQ(it->second.value.c_str(), "5");
  204. it = obj.find("testField2");
  205. ASSERT_TRUE(it != obj.end());
  206. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  207. EXPECT_STREQ(it->second.value.c_str(), "\\\"qwerty\t\t\t\t");
  208. }
  209. TEST_F(MicrojsonDeserializationTest, BooleanValue)
  210. {
  211. const char *buffer1 = "{\"testField\":true}";
  212. size_t size = strlen(buffer1);
  213. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  214. auto it = obj.find("testField");
  215. ASSERT_TRUE(it != obj.end());
  216. EXPECT_STREQ(it->first.c_str(), "testField");
  217. EXPECT_EQ(it->second.type, microjson::JsonBoolType);
  218. EXPECT_STREQ(it->second.value.c_str(), "true");
  219. obj.clear();
  220. const char *buffer2 = "{\"testField\":false}";
  221. size = strlen(buffer2);
  222. obj = microjson::parseObject(buffer2, size);
  223. it = obj.find("testField");
  224. ASSERT_TRUE(it != obj.end());
  225. EXPECT_STREQ(it->first.c_str(), "testField");
  226. EXPECT_EQ(it->second.type, microjson::JsonBoolType);
  227. EXPECT_STREQ(it->second.value.c_str(), "false");
  228. obj.clear();
  229. const char *buffer7 = "{\"testField\":true,\"testField1\":false}";
  230. size = strlen(buffer7);
  231. obj = microjson::parseObject(buffer7, size);
  232. it = obj.find("testField");
  233. ASSERT_TRUE(it != obj.end());
  234. EXPECT_STREQ(it->first.c_str(), "testField");
  235. EXPECT_EQ(it->second.type, microjson::JsonBoolType);
  236. EXPECT_STREQ(it->second.value.c_str(), "true");
  237. it = obj.find("testField1");
  238. ASSERT_TRUE(it != obj.end());
  239. EXPECT_STREQ(it->first.c_str(), "testField1");
  240. EXPECT_EQ(it->second.type, microjson::JsonBoolType);
  241. EXPECT_STREQ(it->second.value.c_str(), "false");
  242. }
  243. TEST_F(MicrojsonDeserializationTest, FloatingPointValue)
  244. {
  245. const char *buffer1 = "{\"testField\":0.0}";
  246. size_t size = strlen(buffer1);
  247. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  248. auto it = obj.find("testField");
  249. ASSERT_TRUE(it != obj.end());
  250. EXPECT_STREQ(it->first.c_str(), "testField");
  251. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  252. EXPECT_STREQ(it->second.value.c_str(), "0.0");
  253. obj.clear();
  254. const char *buffer2 = "{\"testField\":1.0}";
  255. size = strlen(buffer2);
  256. obj = microjson::parseObject(buffer2, size);
  257. it = obj.find("testField");
  258. ASSERT_TRUE(it != obj.end());
  259. EXPECT_STREQ(it->first.c_str(), "testField");
  260. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  261. EXPECT_STREQ(it->second.value.c_str(), "1.0");
  262. obj.clear();
  263. const char *buffer3 = "{\"testField\":20.0}";
  264. size = strlen(buffer3);
  265. obj = microjson::parseObject(buffer3, size);
  266. it = obj.find("testField");
  267. ASSERT_TRUE(it != obj.end());
  268. EXPECT_STREQ(it->first.c_str(), "testField");
  269. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  270. EXPECT_STREQ(it->second.value.c_str(), "20.0");
  271. obj.clear();
  272. const char *buffer4 = "{\"testField\":20.01}";
  273. size = strlen(buffer4);
  274. obj = microjson::parseObject(buffer4, size);
  275. it = obj.find("testField");
  276. ASSERT_TRUE(it != obj.end());
  277. EXPECT_STREQ(it->first.c_str(), "testField");
  278. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  279. EXPECT_STREQ(it->second.value.c_str(), "20.01");
  280. obj.clear();
  281. const char *buffer5 = "{\"testField\":-1.0}";
  282. size = strlen(buffer5);
  283. obj = microjson::parseObject(buffer5, size);
  284. it = obj.find("testField");
  285. ASSERT_TRUE(it != obj.end());
  286. EXPECT_STREQ(it->first.c_str(), "testField");
  287. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  288. EXPECT_STREQ(it->second.value.c_str(), "-1.0");
  289. obj.clear();
  290. const char *buffer6 = "{\"testField\":-87.0}";
  291. size = strlen(buffer6);
  292. obj = microjson::parseObject(buffer6, size);
  293. it = obj.find("testField");
  294. ASSERT_TRUE(it != obj.end());
  295. EXPECT_STREQ(it->first.c_str(), "testField");
  296. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  297. EXPECT_STREQ(it->second.value.c_str(), "-87.0");
  298. obj.clear();
  299. const char *buffer7 = "{\"testField\":-11.21}";
  300. size = strlen(buffer7);
  301. obj = microjson::parseObject(buffer7, size);
  302. it = obj.find("testField");
  303. ASSERT_TRUE(it != obj.end());
  304. EXPECT_STREQ(it->first.c_str(), "testField");
  305. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  306. EXPECT_STREQ(it->second.value.c_str(), "-11.21");
  307. obj.clear();
  308. const char *buffer8 = "{\"testField\":1.1234+e10}";
  309. size = strlen(buffer8);
  310. obj = microjson::parseObject(buffer8, size);
  311. it = obj.find("testField");
  312. ASSERT_TRUE(it != obj.end());
  313. EXPECT_STREQ(it->first.c_str(), "testField");
  314. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  315. EXPECT_STREQ(it->second.value.c_str(), "1.1234+e10");
  316. obj.clear();
  317. const char *buffer9 = "{\"testField\":1.1234-e10}";
  318. size = strlen(buffer9);
  319. obj = microjson::parseObject(buffer9, size);
  320. it = obj.find("testField");
  321. ASSERT_TRUE(it != obj.end());
  322. EXPECT_STREQ(it->first.c_str(), "testField");
  323. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  324. EXPECT_STREQ(it->second.value.c_str(), "1.1234-e10");
  325. obj.clear();
  326. const char *buffer10 = "{\"testField\":-1.1234-e10}";
  327. size = strlen(buffer10);
  328. obj = microjson::parseObject(buffer10, size);
  329. it = obj.find("testField");
  330. ASSERT_TRUE(it != obj.end());
  331. EXPECT_STREQ(it->first.c_str(), "testField");
  332. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  333. EXPECT_STREQ(it->second.value.c_str(), "-1.1234-e10");
  334. obj.clear();
  335. const char *buffer11 = "{\"testField\":-1.1234+e10}";
  336. size = strlen(buffer11);
  337. obj = microjson::parseObject(buffer11, size);
  338. it = obj.find("testField");
  339. ASSERT_TRUE(it != obj.end());
  340. EXPECT_STREQ(it->first.c_str(), "testField");
  341. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  342. EXPECT_STREQ(it->second.value.c_str(), "-1.1234+e10");
  343. obj.clear();
  344. const char *buffer12 = "{\"testField\":0.0,\"testField1\":1.0,\"testField2\":20.0,\"testField3\":20.01,\"testField4\":-1.0,\"testField5\":-87.0,\"testField6\":-11.21,\"testField7\":1.1234+e10,\"testField8\":1.1234-e10,\"testField9\":-1.1234-e10,\"testField10\":-1.1234+e10}";
  345. size = strlen(buffer12);
  346. obj = microjson::parseObject(buffer12, size);
  347. it = obj.find("testField");
  348. ASSERT_TRUE(it != obj.end());
  349. EXPECT_STREQ(it->first.c_str(), "testField");
  350. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  351. EXPECT_STREQ(it->second.value.c_str(), "0.0");
  352. it = obj.find("testField1");
  353. ASSERT_TRUE(it != obj.end());
  354. EXPECT_STREQ(it->first.c_str(), "testField1");
  355. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  356. EXPECT_STREQ(it->second.value.c_str(), "1.0");
  357. it = obj.find("testField2");
  358. ASSERT_TRUE(it != obj.end());
  359. EXPECT_STREQ(it->first.c_str(), "testField2");
  360. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  361. EXPECT_STREQ(it->second.value.c_str(), "20.0");
  362. it = obj.find("testField3");
  363. ASSERT_TRUE(it != obj.end());
  364. EXPECT_STREQ(it->first.c_str(), "testField3");
  365. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  366. EXPECT_STREQ(it->second.value.c_str(), "20.01");
  367. it = obj.find("testField4");
  368. ASSERT_TRUE(it != obj.end());
  369. EXPECT_STREQ(it->first.c_str(), "testField4");
  370. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  371. EXPECT_STREQ(it->second.value.c_str(), "-1.0");
  372. it = obj.find("testField5");
  373. ASSERT_TRUE(it != obj.end());
  374. EXPECT_STREQ(it->first.c_str(), "testField5");
  375. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  376. EXPECT_STREQ(it->second.value.c_str(), "-87.0");
  377. it = obj.find("testField6");
  378. ASSERT_TRUE(it != obj.end());
  379. EXPECT_STREQ(it->first.c_str(), "testField6");
  380. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  381. EXPECT_STREQ(it->second.value.c_str(), "-11.21");
  382. it = obj.find("testField7");
  383. ASSERT_TRUE(it != obj.end());
  384. EXPECT_STREQ(it->first.c_str(), "testField7");
  385. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  386. EXPECT_STREQ(it->second.value.c_str(), "1.1234+e10");
  387. it = obj.find("testField8");
  388. ASSERT_TRUE(it != obj.end());
  389. EXPECT_STREQ(it->first.c_str(), "testField8");
  390. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  391. EXPECT_STREQ(it->second.value.c_str(), "1.1234-e10");
  392. it = obj.find("testField9");
  393. ASSERT_TRUE(it != obj.end());
  394. EXPECT_STREQ(it->first.c_str(), "testField9");
  395. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  396. EXPECT_STREQ(it->second.value.c_str(), "-1.1234-e10");
  397. it = obj.find("testField10");
  398. ASSERT_TRUE(it != obj.end());
  399. EXPECT_STREQ(it->first.c_str(), "testField10");
  400. EXPECT_EQ(it->second.type, microjson::JsonNumberType);
  401. EXPECT_STREQ(it->second.value.c_str(), "-1.1234+e10");
  402. }
  403. TEST_F(MicrojsonDeserializationTest, ArrayValue)
  404. {
  405. const char *buffer1 = "{\"testField\":[\"test1\"]}";
  406. size_t size = strlen(buffer1);
  407. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  408. auto it = obj.find("testField");
  409. ASSERT_TRUE(it != obj.end());
  410. EXPECT_STREQ(it->first.c_str(), "testField");
  411. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  412. EXPECT_STREQ(it->second.value.c_str(), "\"test1\"");
  413. obj.clear();
  414. const char *buffer2 = "{\"testField\":[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]}";
  415. size = strlen(buffer2);
  416. obj = microjson::parseObject(buffer2, size);
  417. it = obj.find("testField");
  418. ASSERT_TRUE(it != obj.end());
  419. EXPECT_STREQ(it->first.c_str(), "testField");
  420. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  421. EXPECT_STREQ(it->second.value.c_str(), "\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"");
  422. obj.clear();
  423. const char *buffer3 = "{\"testField\":[],\"testField1\":[\"test1\",\"test2\"]}";
  424. size = strlen(buffer3);
  425. obj = microjson::parseObject(buffer3, size);
  426. it = obj.find("testField");
  427. ASSERT_TRUE(it != obj.end());
  428. EXPECT_STREQ(it->first.c_str(), "testField");
  429. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  430. EXPECT_STREQ(it->second.value.c_str(), "");
  431. it = obj.find("testField1");
  432. ASSERT_TRUE(it != obj.end());
  433. EXPECT_STREQ(it->first.c_str(), "testField1");
  434. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  435. EXPECT_STREQ(it->second.value.c_str(), "\"test1\",\"test2\"");
  436. obj.clear();
  437. const char *buffer4 = "{\"testField\":[1,1.0,-10,\"test1\",{\"test2\":15}]}";
  438. size = strlen(buffer4);
  439. obj = microjson::parseObject(buffer4, size);
  440. it = obj.find("testField");
  441. ASSERT_TRUE(it != obj.end());
  442. EXPECT_STREQ(it->first.c_str(), "testField");
  443. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  444. EXPECT_STREQ(it->second.value.c_str(), "1,1.0,-10,\"test1\",{\"test2\":15}");
  445. obj.clear();
  446. const char *buffer5 = "{\"testField\":[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]]}";
  447. size = strlen(buffer5);
  448. obj = microjson::parseObject(buffer5, size);
  449. it = obj.find("testField");
  450. ASSERT_TRUE(it != obj.end());
  451. EXPECT_STREQ(it->first.c_str(), "testField");
  452. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  453. EXPECT_STREQ(it->second.value.c_str(), "[1,2,3,4,5,6],[7,8,9,10,\"test1\"]");
  454. obj.clear();
  455. const char *buffer6 = "{\"testField\":[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]}";
  456. size = strlen(buffer6);
  457. obj = microjson::parseObject(buffer6, size);
  458. it = obj.find("testField");
  459. ASSERT_TRUE(it != obj.end());
  460. EXPECT_STREQ(it->first.c_str(), "testField");
  461. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  462. EXPECT_STREQ(it->second.value.c_str(), "{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}");
  463. const char *buffer7 = "{\"testField\":[\"test1\"],\"testField1\":[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"],\"testField2\":[],\"testField3\":[\"test1\",\"test2\"],\"testField4\":[1,1.0,-10,\"test1\",{\"test2\":15}],\"testField5\":[[1,2,3,4,5,6],[7,8,9,10,\"test1\"]],\"testField6\":[{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}]}";
  464. size = strlen(buffer7);
  465. obj = microjson::parseObject(buffer7, size);
  466. it = obj.find("testField");
  467. ASSERT_TRUE(it != obj.end());
  468. EXPECT_STREQ(it->first.c_str(), "testField");
  469. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  470. EXPECT_STREQ(it->second.value.c_str(), "\"test1\"");
  471. it = obj.find("testField1");
  472. ASSERT_TRUE(it != obj.end());
  473. EXPECT_STREQ(it->first.c_str(), "testField1");
  474. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  475. EXPECT_STREQ(it->second.value.c_str(), "\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"");
  476. it = obj.find("testField2");
  477. ASSERT_TRUE(it != obj.end());
  478. EXPECT_STREQ(it->first.c_str(), "testField2");
  479. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  480. EXPECT_STREQ(it->second.value.c_str(), "");
  481. it = obj.find("testField3");
  482. ASSERT_TRUE(it != obj.end());
  483. EXPECT_STREQ(it->first.c_str(), "testField3");
  484. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  485. EXPECT_STREQ(it->second.value.c_str(), "\"test1\",\"test2\"");
  486. it = obj.find("testField4");
  487. ASSERT_TRUE(it != obj.end());
  488. EXPECT_STREQ(it->first.c_str(), "testField4");
  489. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  490. EXPECT_STREQ(it->second.value.c_str(), "1,1.0,-10,\"test1\",{\"test2\":15}");
  491. it = obj.find("testField5");
  492. ASSERT_TRUE(it != obj.end());
  493. EXPECT_STREQ(it->first.c_str(), "testField5");
  494. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  495. EXPECT_STREQ(it->second.value.c_str(), "[1,2,3,4,5,6],[7,8,9,10,\"test1\"]");
  496. it = obj.find("testField6");
  497. ASSERT_TRUE(it != obj.end());
  498. EXPECT_STREQ(it->first.c_str(), "testField6");
  499. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  500. EXPECT_STREQ(it->second.value.c_str(), "{\"test1\":[1,2,3,4,5,{\"test2\":[\"test3\",\"test4\",[1,2,3,4]]}]}");
  501. }
  502. TEST_F(MicrojsonDeserializationTest, ObjectValue)
  503. {
  504. const char *buffer1 = "{\"testField\":{\"testField1\":1}}";
  505. size_t size = strlen(buffer1);
  506. microjson::JsonObject obj = microjson::parseObject(buffer1, size);
  507. auto it = obj.find("testField");
  508. ASSERT_TRUE(it != obj.end());
  509. EXPECT_STREQ(it->first.c_str(), "testField");
  510. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  511. EXPECT_STREQ(it->second.value.c_str(), "\"testField1\":1");
  512. const char *buffer2 = "{\"testField\":{\"testField1\":1,\"testField2\":2}}";
  513. size = strlen(buffer2);
  514. obj = microjson::parseObject(buffer2, size);
  515. it = obj.find("testField");
  516. ASSERT_TRUE(it != obj.end());
  517. EXPECT_STREQ(it->first.c_str(), "testField");
  518. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  519. EXPECT_STREQ(it->second.value.c_str(), "\"testField1\":1,\"testField2\":2");
  520. const char *buffer3 = "{\"testField\":{\"testField1\":1.0,\"testField2\":\"2\"}}";
  521. size = strlen(buffer3);
  522. obj = microjson::parseObject(buffer3, size);
  523. it = obj.find("testField");
  524. ASSERT_TRUE(it != obj.end());
  525. EXPECT_STREQ(it->first.c_str(), "testField");
  526. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  527. EXPECT_STREQ(it->second.value.c_str(), "\"testField1\":1.0,\"testField2\":\"2\"");
  528. const char *buffer4 = "{\"testField\":{}}";
  529. size = strlen(buffer4);
  530. obj = microjson::parseObject(buffer4, size);
  531. it = obj.find("testField");
  532. ASSERT_TRUE(it != obj.end());
  533. EXPECT_STREQ(it->first.c_str(), "testField");
  534. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  535. EXPECT_STREQ(it->second.value.c_str(), "");
  536. const char *buffer5 = "{\"testField\":{\"testField1\":{},\"testField2\":{\"testField3\":\"2\"}}}";
  537. size = strlen(buffer5);
  538. obj = microjson::parseObject(buffer5, size);
  539. it = obj.find("testField");
  540. ASSERT_TRUE(it != obj.end());
  541. EXPECT_STREQ(it->first.c_str(), "testField");
  542. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  543. EXPECT_STREQ(it->second.value.c_str(), "\"testField1\":{},\"testField2\":{\"testField3\":\"2\"}");
  544. const char *buffer6 = "{\"testField\":{\"testField1\":{},\"testField2\":{\"testField3\":[\"2\",0,1,2,{\"testField4\":9}]}}}";
  545. size = strlen(buffer6);
  546. obj = microjson::parseObject(buffer6, size);
  547. it = obj.find("testField");
  548. ASSERT_TRUE(it != obj.end());
  549. EXPECT_STREQ(it->first.c_str(), "testField");
  550. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  551. EXPECT_STREQ(it->second.value.c_str(), "\"testField1\":{},\"testField2\":{\"testField3\":[\"2\",0,1,2,{\"testField4\":9}]}");
  552. }