main.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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 \"test\n\rField2\"\n\r\t : \"\\\"qwerty\t\t\t\t\"\n\t \r}\n\t \r";
  198. size = strlen(buffer3);
  199. obj = microjson::parseJsonObject(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("test\n\rField2");
  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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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::parseJsonObject(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. }
  553. TEST_F(MicrojsonDeserializationTest, ArrayValues)
  554. {
  555. const char *buffer1 = "[\"test1\",\"test2\",\"test3\",\"test5\",\"test6\"]";
  556. size_t size = strlen(buffer1);
  557. microjson::JsonArray arr = microjson::parseJsonArray(buffer1, size);
  558. ASSERT_EQ(arr.size(), 5);
  559. EXPECT_STREQ(arr[0].value.c_str(), "test1");
  560. EXPECT_STREQ(arr[1].value.c_str(), "test2");
  561. EXPECT_STREQ(arr[2].value.c_str(), "test3");
  562. EXPECT_STREQ(arr[3].value.c_str(), "test5");
  563. EXPECT_STREQ(arr[4].value.c_str(), "test6");
  564. const char *buffer2 = "[\"test1\"]";
  565. size = strlen(buffer2);
  566. arr = microjson::parseJsonArray(buffer2, size);
  567. ASSERT_EQ(arr.size(), 1);
  568. EXPECT_STREQ(arr[0].value.c_str(), "test1");
  569. const char *buffer3 = "[]";
  570. size = strlen(buffer3);
  571. arr = microjson::parseJsonArray(buffer3, size);
  572. ASSERT_EQ(arr.size(), 0);
  573. const char *buffer4 = "[[\"test1\"]]";
  574. size = strlen(buffer4);
  575. arr = microjson::parseJsonArray(buffer4, size);
  576. ASSERT_EQ(arr.size(), 1);
  577. EXPECT_STREQ(arr[0].value.c_str(), "[\"test1\"]");
  578. const char *buffer5 = "[[],[],[]]";
  579. size = strlen(buffer5);
  580. arr = microjson::parseJsonArray(buffer5, size);
  581. ASSERT_EQ(arr.size(), 3);
  582. EXPECT_STREQ(arr[0].value.c_str(), "[]");
  583. EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
  584. EXPECT_STREQ(arr[1].value.c_str(), "[]");
  585. EXPECT_EQ(arr[1].type, microjson::JsonArrayType);
  586. EXPECT_STREQ(arr[2].value.c_str(), "[]");
  587. EXPECT_EQ(arr[2].type, microjson::JsonArrayType);
  588. const char *buffer6 = "[[],\"\",0,0.0,false]";
  589. size = strlen(buffer6);
  590. arr = microjson::parseJsonArray(buffer6, size);
  591. ASSERT_EQ(arr.size(), 5);
  592. EXPECT_STREQ(arr[0].value.c_str(), "[]");
  593. EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
  594. EXPECT_STREQ(arr[1].value.c_str(), "");
  595. EXPECT_EQ(arr[1].type, microjson::JsonStringType);
  596. EXPECT_STREQ(arr[2].value.c_str(), "0");
  597. EXPECT_EQ(arr[2].type, microjson::JsonNumberType);
  598. EXPECT_STREQ(arr[3].value.c_str(), "0.0");
  599. EXPECT_EQ(arr[3].type, microjson::JsonNumberType);
  600. EXPECT_STREQ(arr[4].value.c_str(), "false");
  601. EXPECT_EQ(arr[4].type, microjson::JsonBoolType);
  602. const char *buffer7 = "[[[1111,2222,3333],[4444,5555,6666]],\"testString\",787,-123,0.0,0.99,1.0,1.2345+e10,false,[false,true],{\"testField1\":[\"testArrayValue1\", 2, 3, 4],\"testField2\":0.1212+e14}]";
  603. size = strlen(buffer7);
  604. arr = microjson::parseJsonArray(buffer7, size);
  605. ASSERT_EQ(arr.size(), 11);
  606. EXPECT_STREQ(arr[0].value.c_str(), "[[1111,2222,3333],[4444,5555,6666]]");
  607. EXPECT_EQ(arr[0].type, microjson::JsonArrayType);
  608. EXPECT_STREQ(arr[1].value.c_str(), "testString");
  609. EXPECT_EQ(arr[1].type, microjson::JsonStringType);
  610. EXPECT_STREQ(arr[2].value.c_str(), "787");
  611. EXPECT_EQ(arr[2].type, microjson::JsonNumberType);
  612. EXPECT_STREQ(arr[3].value.c_str(), "-123");
  613. EXPECT_EQ(arr[3].type, microjson::JsonNumberType);
  614. EXPECT_STREQ(arr[4].value.c_str(), "0.0");
  615. EXPECT_EQ(arr[4].type, microjson::JsonNumberType);
  616. EXPECT_STREQ(arr[5].value.c_str(), "0.99");
  617. EXPECT_EQ(arr[5].type, microjson::JsonNumberType);
  618. EXPECT_STREQ(arr[6].value.c_str(), "1.0");
  619. EXPECT_EQ(arr[6].type, microjson::JsonNumberType);
  620. EXPECT_STREQ(arr[7].value.c_str(), "1.2345+e10");
  621. EXPECT_EQ(arr[7].type, microjson::JsonNumberType);
  622. EXPECT_STREQ(arr[8].value.c_str(), "false");
  623. EXPECT_EQ(arr[8].type, microjson::JsonBoolType);
  624. EXPECT_STREQ(arr[9].value.c_str(), "[false,true]");
  625. EXPECT_EQ(arr[9].type, microjson::JsonArrayType);
  626. EXPECT_STREQ(arr[10].value.c_str(), "{\"testField1\":[\"testArrayValue1\", 2, 3, 4],\"testField2\":0.1212+e14}");
  627. EXPECT_EQ(arr[10].type, microjson::JsonObjectType);
  628. }
  629. TEST_F(MicrojsonDeserializationTest, PropertyName) {
  630. const char *buffer1 = "{\"testField1\":\"test2\"}";
  631. size_t size = strlen(buffer1);
  632. microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
  633. auto it = obj.find("testField1");
  634. ASSERT_TRUE(it != obj.end());
  635. obj.clear();
  636. const char *buffer2 = "{\"t\":\"test2\"}";
  637. size = strlen(buffer2);
  638. obj = microjson::parseJsonObject(buffer2, size);
  639. it = obj.find("t");
  640. ASSERT_TRUE(it != obj.end());
  641. obj.clear();
  642. const char *buffer3 = "{\"\":\"test2\"}";
  643. size = strlen(buffer3);
  644. obj = microjson::parseJsonObject(buffer3, size);
  645. ASSERT_EQ(obj.size(), 0);
  646. obj.clear();
  647. const char *buffer4 = "{\"\\\"\":\"test2\"}";
  648. size = strlen(buffer4);
  649. obj = microjson::parseJsonObject(buffer4, size);
  650. it = obj.find("\\\"");
  651. ASSERT_TRUE(it != obj.end());
  652. obj.clear();
  653. const char *buffer5 = "{\"testField1{\":{\"testField2\":\"test2\"}}";
  654. size = strlen(buffer5);
  655. obj = microjson::parseJsonObject(buffer5, size);
  656. it = obj.find("testField1{");
  657. ASSERT_TRUE(it != obj.end());
  658. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  659. EXPECT_STREQ(it->second.value.c_str(), "{\"testField2\":\"test2\"}");
  660. obj.clear();
  661. const char *buffer6 = "{\"test}Field1}\":{\"testField2\":\"test2\"}}";
  662. size = strlen(buffer6);
  663. obj = microjson::parseJsonObject(buffer6, size);
  664. it = obj.find("test}Field1}");
  665. ASSERT_TRUE(it != obj.end());
  666. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  667. EXPECT_STREQ(it->second.value.c_str(), "{\"testField2\":\"test2\"}");
  668. obj.clear();
  669. const char *buffer7 = "{\"test[Fiel[d1}\":[\"test1\",\"test2\"]}";
  670. size = strlen(buffer7);
  671. obj = microjson::parseJsonObject(buffer7, size);
  672. it = obj.find("test[Fiel[d1}");
  673. ASSERT_TRUE(it != obj.end());
  674. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  675. EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
  676. obj.clear();
  677. const char *buffer8 = "{\"test]Fiel]d1}\":[\"test1\",\"test2\"]}";
  678. size = strlen(buffer8);
  679. obj = microjson::parseJsonObject(buffer8, size);
  680. it = obj.find("test]Fiel]d1}");
  681. ASSERT_TRUE(it != obj.end());
  682. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  683. EXPECT_STREQ(it->second.value.c_str(), "[\"test1\",\"test2\"]");
  684. }
  685. TEST_F(MicrojsonDeserializationTest, MixedStringValue) {
  686. const char *buffer1 = "{\"testField1\":[\"[[test2\",\"[test2\"]}";
  687. size_t size = strlen(buffer1);
  688. microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
  689. auto it = obj.find("testField1");
  690. ASSERT_TRUE(it != obj.end());
  691. EXPECT_EQ(it->second.type, microjson::JsonArrayType);
  692. EXPECT_STREQ(it->second.value.c_str(), "[\"[[test2\",\"[test2\"]");
  693. const char *buffer2 = "{\"testField1\":{\"test]Fiel]d1}\":[\"[[test2\",\"}test{{2\"]}}";
  694. size = strlen(buffer2);
  695. obj = microjson::parseJsonObject(buffer2, size);
  696. it = obj.find("testField1");
  697. ASSERT_TRUE(it != obj.end());
  698. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  699. EXPECT_STREQ(it->second.value.c_str(), "{\"test]Fiel]d1}\":[\"[[test2\",\"}test{{2\"]}");
  700. }
  701. TEST_F(MicrojsonDeserializationTest, TestInvalidValues) {
  702. const char *buffer1 = "{\"testField1\":null}";
  703. size_t size = strlen(buffer1);
  704. microjson::JsonObject obj = microjson::parseJsonObject(buffer1, size);
  705. auto it = obj.find("testField1");
  706. ASSERT_TRUE(it != obj.end());
  707. EXPECT_EQ(it->second.type, microjson::JsonObjectType);
  708. EXPECT_STREQ(it->second.value.c_str(), "null");
  709. const char *buffer2 = "{\"testField1\":\"NaN\"}";
  710. size = strlen(buffer2);
  711. obj = microjson::parseJsonObject(buffer2, size);
  712. it = obj.find("testField1");
  713. ASSERT_TRUE(it != obj.end());
  714. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  715. EXPECT_STREQ(it->second.value.c_str(), "NaN");
  716. const char *buffer3 = "{\"testField1\":\"Infinity\"}";
  717. size = strlen(buffer3);
  718. obj = microjson::parseJsonObject(buffer3, size);
  719. it = obj.find("testField1");
  720. ASSERT_TRUE(it != obj.end());
  721. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  722. EXPECT_STREQ(it->second.value.c_str(), "Infinity");
  723. const char *buffer4 = "{\"testField1\":\"-Infinity\"}";
  724. size = strlen(buffer4);
  725. obj = microjson::parseJsonObject(buffer4, size);
  726. it = obj.find("testField1");
  727. ASSERT_TRUE(it != obj.end());
  728. EXPECT_EQ(it->second.type, microjson::JsonStringType);
  729. EXPECT_STREQ(it->second.value.c_str(), "-Infinity");
  730. }