JsonUpdaterTest.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. /*
  2. * JsonUpdaterTest.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "../../lib/serializer/JsonUpdater.h"
  12. namespace test
  13. {
  14. using ::testing::Test;
  15. class JsonUpdaterTest : public Test
  16. {
  17. public:
  18. class Object
  19. {
  20. public:
  21. class Inner
  22. {
  23. public:
  24. int64_t i = 424242424242LL;
  25. Inner() = default;
  26. void serializeJson(JsonSerializeFormat & handler)
  27. {
  28. handler.serializeInt("i", i);
  29. }
  30. };
  31. int32_t i1 = 42;
  32. int32_t i2 = 59;
  33. double d1 = 0.123;
  34. double d2 = 0.321;
  35. bool b1 = true;
  36. bool b2 = true;
  37. int b3 = 333;
  38. int b4 = 444;
  39. std::string s1 = "s1s1s1s1";
  40. std::string s2 = "s2s2s2s2";
  41. JsonNode j1 = JsonUtils::stringNode("j1");
  42. JsonNode j2 = JsonUtils::stringNode("j2");
  43. Inner inner1;
  44. Inner inner2;
  45. Object() = default;
  46. void serializeJson(JsonSerializeFormat & handler)
  47. {
  48. handler.serializeInt("i1", i1);
  49. handler.serializeInt("i2", i2);
  50. handler.serializeFloat("d1", d1);
  51. handler.serializeFloat("d2", d2);
  52. handler.serializeBool("b1", b1);
  53. handler.serializeBool("b2", b2);
  54. handler.serializeBool<int>("b3", b3, 333, 332, 331);
  55. handler.serializeBool<int>("b4", b4, 444, 443, 442);
  56. handler.serializeString("s1", s1);
  57. handler.serializeString("s2", s2);
  58. handler.serializeRaw("j1", j1, std::nullopt);
  59. handler.serializeRaw("j2", j2, std::nullopt);
  60. handler.serializeStruct("inner1", inner1);
  61. handler.serializeStruct("inner2", inner2);
  62. }
  63. void compare(const Object & rhs)
  64. {
  65. EXPECT_EQ(i1, rhs.i1);
  66. EXPECT_EQ(i2, rhs.i2);
  67. EXPECT_EQ(d1, rhs.d1);
  68. EXPECT_EQ(d2, rhs.d2);
  69. EXPECT_EQ(b1, rhs.b1);
  70. EXPECT_EQ(b2, rhs.b2);
  71. EXPECT_EQ(b3, rhs.b3);
  72. EXPECT_EQ(b4, rhs.b4);
  73. EXPECT_EQ(s1, rhs.s1);
  74. EXPECT_EQ(s2, rhs.s2);
  75. EXPECT_EQ(j1, rhs.j1);
  76. EXPECT_EQ(j2, rhs.j2) << j2.toJson(true) << " " << rhs.j2.toJson(true);
  77. EXPECT_EQ(inner1.i, rhs.inner1.i);
  78. EXPECT_EQ(inner2.i, rhs.inner2.i);
  79. }
  80. };
  81. };
  82. TEST_F(JsonUpdaterTest, Int)
  83. {
  84. JsonNode j;
  85. j["i2"].Integer() = 63;
  86. Object obj;
  87. Object exp = obj;
  88. exp.i2 = 63;
  89. JsonUpdater subject(nullptr, j);
  90. obj.serializeJson(subject);
  91. obj.compare(exp);
  92. }
  93. TEST_F(JsonUpdaterTest, Float)
  94. {
  95. JsonNode j;
  96. j["d2"].Float() = .456;
  97. Object obj;
  98. Object exp = obj;
  99. exp.d2 = .456;
  100. JsonUpdater subject(nullptr, j);
  101. obj.serializeJson(subject);
  102. obj.compare(exp);
  103. }
  104. TEST_F(JsonUpdaterTest, Bool)
  105. {
  106. JsonNode j;
  107. j["b2"].Bool() = false;
  108. Object obj;
  109. Object exp = obj;
  110. exp.b2 = false;
  111. JsonUpdater subject(nullptr, j);
  112. obj.serializeJson(subject);
  113. obj.compare(exp);
  114. }
  115. TEST_F(JsonUpdaterTest, BoolAny)
  116. {
  117. JsonNode j;
  118. j["b4"].Bool() = false;
  119. Object obj;
  120. Object exp = obj;
  121. exp.b4 = 443;
  122. JsonUpdater subject(nullptr, j);
  123. obj.serializeJson(subject);
  124. obj.compare(exp);
  125. }
  126. TEST_F(JsonUpdaterTest, String)
  127. {
  128. JsonNode j;
  129. j["s2"].String() = "ssssss";
  130. Object obj;
  131. Object exp = obj;
  132. exp.s2 = "ssssss";
  133. JsonUpdater subject(nullptr, j);
  134. obj.serializeJson(subject);
  135. obj.compare(exp);
  136. }
  137. TEST_F(JsonUpdaterTest, Raw)
  138. {
  139. JsonNode j;
  140. j["j2"] = JsonUtils::intNode(42);
  141. Object obj;
  142. Object exp = obj;
  143. exp.j2 = JsonUtils::intNode(42);
  144. JsonUpdater subject(nullptr, j);
  145. obj.serializeJson(subject);
  146. obj.compare(exp);
  147. }
  148. TEST_F(JsonUpdaterTest, Struct)
  149. {
  150. JsonNode j;
  151. j["inner2"]["i"].Integer() = 424242424241LL;
  152. Object obj;
  153. Object exp = obj;
  154. exp.inner2.i = 424242424241LL;
  155. JsonUpdater subject(nullptr, j);
  156. obj.serializeJson(subject);
  157. obj.compare(exp);
  158. }
  159. }