test_tc_json.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. //
  2. // Created by jarod on 2021/8/09.
  3. //
  4. #include "util/tc_json.h"
  5. #include "gtest/gtest.h"
  6. #include "../server/Hello.h"
  7. using namespace tars;
  8. using namespace Test;
  9. class JsonTest : public testing::Test
  10. {
  11. public:
  12. //添加日志
  13. static void SetUpTestCase()
  14. {
  15. // cout<<"SetUpTestCase"<<endl;
  16. }
  17. static void TearDownTestCase()
  18. {
  19. // cout<<"TearDownTestCase"<<endl;
  20. }
  21. virtual void SetUp() //TEST跑之前会执行SetUp
  22. {
  23. // cout<<"SetUp"<<endl;
  24. }
  25. virtual void TearDown() //TEST跑完之后会执行TearDown
  26. {
  27. // cout<<"TearDown"<<endl;
  28. }
  29. JsonData createJsonValue()
  30. {
  31. JsonData jValue;
  32. jValue.c = '4';
  33. jValue.s = -43;
  34. jValue.i = -423323;
  35. jValue.l = -42342344;
  36. jValue.f = 42234.23f;
  37. jValue.d = 42.4232f;
  38. jValue.uc = '6';
  39. jValue.us = 49023;
  40. jValue.ui = 90239238;
  41. jValue.b = true;
  42. jValue.k = KEY1;
  43. jValue.ss = "abc";
  44. jValue.data[KEY1] = "key1";
  45. jValue.data[KEY2] = "key2";
  46. jValue.v.push_back(KEY1);
  47. jValue.v.push_back(KEY2);
  48. jValue.im[1] = "abc";
  49. jValue.bm[true] = "abc";
  50. jValue.fm[4.53f] = "abc";
  51. jValue.bm[true]="abc";
  52. jValue.iv.push_back(333);
  53. jValue.dv.push_back(323.323);
  54. return jValue;
  55. }
  56. JsonMap createJsonMap()
  57. {
  58. JsonKey k;
  59. k.i = 10;
  60. JsonMap jm;
  61. jm.json[k] = createJsonValue();
  62. return jm;
  63. }
  64. JsonValueArrayPtr createArray()
  65. {
  66. JsonValueArrayPtr pPtr = new JsonValueArray();
  67. pPtr->value.push_back(new JsonValueString("abc"));
  68. pPtr->value.push_back(new JsonValueBoolean(true));
  69. pPtr->value.push_back(new JsonValueBoolean(false));
  70. pPtr->value.push_back(new JsonValueNum((int64_t)10, true));
  71. pPtr->value.push_back(new JsonValueNum(11.f, false));
  72. return pPtr;
  73. }
  74. };
  75. TEST_F(JsonTest, json)
  76. {
  77. int64_t point = 0x100000000000001;
  78. string buff = "{ \"x\": 72057594037927937}";
  79. auto d = JsonValueObjPtr::dynamicCast(TC_Json::getValue(buff));
  80. auto v = JsonValueNumPtr ::dynamicCast(d->get("x"));
  81. ASSERT_TRUE(v->isInt);
  82. ASSERT_TRUE(v->lvalue == point);
  83. //double精度有问题!!!
  84. ASSERT_TRUE((int64_t)v->value != point);
  85. }
  86. TEST_F(JsonTest, jsonStruct)
  87. {
  88. JsonData jValue = createJsonValue();
  89. string v = jValue.writeToJsonString();
  90. cout << "json1:" << v << endl;
  91. JsonData jMap2;
  92. jMap2.readFromJsonString(v);
  93. cout << "json2:" << jMap2.writeToJsonString() << endl;
  94. ASSERT_TRUE(jValue == jMap2);
  95. }
  96. TEST_F(JsonTest, jsonMap)
  97. {
  98. JsonMap jMap = createJsonMap();
  99. string v = jMap.writeToJsonString();
  100. cout << "json1:" << v << endl;
  101. JsonMap jMap2;
  102. jMap2.readFromJsonString(v);
  103. cout << "json2:" << jMap2.writeToJsonString() << endl;
  104. ASSERT_TRUE(jMap == jMap2);
  105. }
  106. TEST_F(JsonTest, find)
  107. {
  108. JsonValueArrayPtr aPtr = createArray();
  109. ASSERT_TRUE(aPtr->find(tars::eJsonTypeNum, "0") == aPtr->value.end());
  110. ASSERT_TRUE(aPtr->find(tars::eJsonTypeNum, "10") != aPtr->value.end());
  111. ASSERT_TRUE(aPtr->find(tars::eJsonTypeNum, "11.f") != aPtr->value.end());
  112. ASSERT_TRUE(aPtr->find(tars::eJsonTypeBoolean, "true") != aPtr->value.end());
  113. ASSERT_TRUE(aPtr->find(tars::eJsonTypeBoolean, "false") != aPtr->value.end());
  114. ASSERT_TRUE(aPtr->find(tars::eJsonTypeString, "abc") != aPtr->value.end());
  115. ASSERT_TRUE(aPtr->find(tars::eJsonTypeString, "def") == aPtr->value.end());
  116. ASSERT_TRUE(aPtr->find(new JsonValueString("abc")) != aPtr->value.end());
  117. ASSERT_TRUE(aPtr->find(new JsonValueString("def")) == aPtr->value.end());
  118. ASSERT_TRUE(aPtr->find(new JsonValueNum((int64_t)10, true)) != aPtr->value.end());
  119. ASSERT_TRUE(aPtr->find(new JsonValueNum(11.f, false)) != aPtr->value.end());
  120. ASSERT_TRUE(aPtr->find(new JsonValueNum(0., false)) == aPtr->value.end());
  121. ASSERT_TRUE(aPtr->find(new JsonValueBoolean(false)) != aPtr->value.end());
  122. // ASSERT_TRUE(aPtr->find(new JsonValueBoolean(true)) != aPtr->value.end());
  123. }