RyanJsonBaseTestDuplicateJson.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "RyanJsonBaseTest.h"
  2. RyanJsonBool_e RyanJsonBaseTestDuplicateJson(void)
  3. {
  4. RyanJson_t json, dupItem, jsonRoot = NULL;
  5. char jsonstr[] = "{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,\"boolFalse\":false,\"null\":null,\"item\":"
  6. "{\"inter\":16,\"double\":16."
  7. "89,\"string\":\"hello\","
  8. "\"boolTrue\":true,\"boolFalse\":false,\"null\":null},\"arrayInt\":[16,16,16,16,16],\"arrayDouble\":[16.89,16.89,"
  9. "16.89,16.89,16.89],"
  10. "\"arrayString\":[\"hello\",\"hello\","
  11. "\"hello\",\"hello\",\"hello\"],\"array\":[16,16.89,\"hello\",true,false,null],\"arrayItem\":[{\"inter\":16,"
  12. "\"double\":16.89,\"string\":"
  13. "\"hello\",\"boolTrue\":true,"
  14. "\"boolFalse\":false,\"null\":null},{\"inter\":16,\"double\":16.89,\"string\":\"hello\",\"boolTrue\":true,"
  15. "\"boolFalse\":false,\"null\":null}]}";
  16. /**
  17. * @brief 普通类型
  18. *
  19. */
  20. json = RyanJsonParse(jsonstr);
  21. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "inter"));
  22. if (RyanJsonFalse == RyanJsonCompare(dupItem, RyanJsonGetObjectToKey(json, "inter"))) { goto err; }
  23. RyanJsonDelete(dupItem);
  24. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "inter"));
  25. RyanJsonAddItemToObject(json, "test", dupItem);
  26. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test", "inter"), RyanJsonGetObjectToKey(json, "inter")))
  27. {
  28. goto err;
  29. }
  30. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  31. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "inter"));
  32. RyanJsonAddItemToObject(json, "test", dupItem);
  33. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test", "inter"), RyanJsonGetObjectToKey(json, "inter")))
  34. {
  35. goto err;
  36. }
  37. RyanJsonDelete(json);
  38. json = RyanJsonParse(jsonstr);
  39. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "inter"));
  40. RyanJsonAddItemToObject(json, "test", dupItem);
  41. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test", "inter"), RyanJsonGetObjectToKey(json, "inter")))
  42. {
  43. goto err;
  44. }
  45. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  46. RyanJsonDelete(json);
  47. /**
  48. * @brief 对象类型
  49. *
  50. */
  51. json = RyanJsonParse(jsonstr);
  52. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "item"));
  53. if (RyanJsonFalse == RyanJsonCompare(dupItem, RyanJsonGetObjectToKey(json, "item"))) { goto err; }
  54. RyanJsonDelete(dupItem);
  55. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "item"));
  56. RyanJsonAddItemToObject(json, "test", dupItem);
  57. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "item"))) { goto err; }
  58. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  59. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "item"));
  60. RyanJsonAddItemToObject(json, "test", dupItem);
  61. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "item"))) { goto err; }
  62. RyanJsonDelete(json);
  63. json = RyanJsonParse(jsonstr);
  64. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "item"));
  65. RyanJsonAddItemToObject(json, "test", dupItem);
  66. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "item"))) { goto err; }
  67. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  68. RyanJsonDelete(json);
  69. /**
  70. * @brief 数组类型
  71. *
  72. */
  73. json = RyanJsonParse(jsonstr);
  74. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "arrayItem"));
  75. if (RyanJsonFalse == RyanJsonCompare(dupItem, RyanJsonGetObjectToKey(json, "arrayItem"))) { goto err; }
  76. RyanJsonDelete(dupItem);
  77. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "arrayItem"));
  78. RyanJsonAddItemToObject(json, "test", dupItem);
  79. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "arrayItem"))) { goto err; }
  80. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  81. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "arrayItem"));
  82. RyanJsonAddItemToObject(json, "test", dupItem);
  83. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "arrayItem"))) { goto err; }
  84. RyanJsonDelete(json);
  85. json = RyanJsonParse(jsonstr);
  86. dupItem = RyanJsonDuplicate(RyanJsonGetObjectToKey(json, "arrayItem"));
  87. RyanJsonAddItemToObject(json, "test", dupItem);
  88. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "test"), RyanJsonGetObjectToKey(json, "arrayItem"))) { goto err; }
  89. RyanJsonDelete(RyanJsonDetachByKey(json, "test"));
  90. RyanJsonDelete(json);
  91. json = RyanJsonParse(jsonstr);
  92. jsonRoot = RyanJsonCreateObject();
  93. RyanJsonAddBoolToObject(jsonRoot, "arrayItem", RyanJsonTrue);
  94. int use = 0;
  95. for (uint8_t i = 0; i < 10; i++)
  96. {
  97. dupItem = RyanJsonParse(jsonstr);
  98. RyanJsonReplaceByKey(jsonRoot, "arrayItem", RyanJsonDuplicate(dupItem));
  99. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(jsonRoot, "arrayItem"), dupItem)) { goto err; }
  100. RyanJsonReplaceByKey(json, "arrayItem", RyanJsonDuplicate(RyanJsonGetObjectByKey(dupItem, "item")));
  101. if (RyanJsonFalse == RyanJsonCompare(RyanJsonGetObjectToKey(json, "arrayItem"), RyanJsonGetObjectByKey(dupItem, "item")))
  102. {
  103. goto err;
  104. }
  105. RyanJsonDelete(dupItem);
  106. int newuse = vallocGetUse();
  107. if (i != 0 && newuse != use)
  108. {
  109. printf("%s:%d 内存泄漏\r\n", __FILE__, __LINE__);
  110. goto err;
  111. }
  112. use = newuse;
  113. }
  114. RyanJsonDelete(json);
  115. RyanJsonDelete(jsonRoot);
  116. return RyanJsonTrue;
  117. err:
  118. RyanJsonDelete(json);
  119. RyanJsonDelete(jsonRoot);
  120. return RyanJsonFalse;
  121. }