JsonVariant_Is_Tests.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. // Copyright Benoit Blanchon 2014-2016
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. // If you like this project, please add a star!
  7. #include <ArduinoJson.h>
  8. #include <gtest/gtest.h>
  9. #define SUITE JsonVariant_Is_Tests
  10. template <typename TTo, typename TFrom>
  11. void assertIsNot(TFrom value) {
  12. JsonVariant variant = value;
  13. ASSERT_FALSE(variant.is<TTo>());
  14. }
  15. template <typename TTo>
  16. void assertIsNot(JsonArray& value) {
  17. JsonVariant variant = value;
  18. ASSERT_FALSE(variant.is<TTo>());
  19. }
  20. template <typename TTo, typename TFrom>
  21. void assertIs(TFrom value) {
  22. JsonVariant variant = value;
  23. ASSERT_TRUE(variant.is<TTo>());
  24. }
  25. template <typename TTo>
  26. void assertIs(JsonArray& value) {
  27. JsonVariant variant = value;
  28. ASSERT_TRUE(variant.is<TTo>());
  29. }
  30. TEST(SUITE, ArrayIsArray) {
  31. DynamicJsonBuffer jsonBuffer;
  32. assertIs<JsonArray&>(jsonBuffer.createArray());
  33. }
  34. TEST(SUITE, ArrayIsNotBool) {
  35. DynamicJsonBuffer jsonBuffer;
  36. assertIsNot<bool>(jsonBuffer.createArray());
  37. }
  38. TEST(SUITE, ArrayIsNotDouble) {
  39. DynamicJsonBuffer jsonBuffer;
  40. assertIsNot<double>(jsonBuffer.createArray());
  41. }
  42. TEST(SUITE, ArrayIsNotFloat) {
  43. DynamicJsonBuffer jsonBuffer;
  44. assertIsNot<float>(jsonBuffer.createArray());
  45. }
  46. TEST(SUITE, ArrayIsNotInt) {
  47. DynamicJsonBuffer jsonBuffer;
  48. assertIsNot<int>(jsonBuffer.createArray());
  49. }
  50. TEST(SUITE, ArrayIsNotLong) {
  51. DynamicJsonBuffer jsonBuffer;
  52. assertIsNot<long>(jsonBuffer.createArray());
  53. }
  54. TEST(SUITE, ArrayIsNotString) {
  55. DynamicJsonBuffer jsonBuffer;
  56. assertIsNot<const char*>(jsonBuffer.createArray());
  57. }
  58. TEST(SUITE, BoolIsArray) {
  59. assertIsNot<JsonArray&>(true);
  60. }
  61. TEST(SUITE, BoolIsBool) {
  62. assertIs<bool>(true);
  63. }
  64. TEST(SUITE, BoolIsDouble) {
  65. assertIsNot<double>(true);
  66. }
  67. TEST(SUITE, BoolIsFloat) {
  68. assertIsNot<float>(true);
  69. }
  70. TEST(SUITE, BoolIsInt) {
  71. assertIsNot<int>(true);
  72. }
  73. TEST(SUITE, BoolIsLong) {
  74. assertIsNot<long>(true);
  75. }
  76. TEST(SUITE, BoolIsString) {
  77. assertIsNot<const char*>(true);
  78. }
  79. TEST(SUITE, DoubleIsArray) {
  80. assertIsNot<JsonArray&>(4.2);
  81. }
  82. TEST(SUITE, DoubleIsBool) {
  83. assertIsNot<bool>(4.2);
  84. }
  85. TEST(SUITE, DoubleIsDouble) {
  86. assertIs<double>(4.2);
  87. }
  88. TEST(SUITE, DoubleIsFloat) {
  89. assertIs<float>(4.2);
  90. }
  91. TEST(SUITE, DoubleIsInt) {
  92. assertIsNot<int>(4.2);
  93. }
  94. TEST(SUITE, DoubleIsLong) {
  95. assertIsNot<long>(4.2);
  96. }
  97. TEST(SUITE, DoubleIsString) {
  98. assertIsNot<const char*>(4.2);
  99. }
  100. TEST(SUITE, LongIsArray) {
  101. assertIsNot<JsonArray&>(42L);
  102. }
  103. TEST(SUITE, LongIsBool) {
  104. assertIsNot<bool>(42L);
  105. }
  106. TEST(SUITE, LongIsDouble) {
  107. assertIsNot<double>(42L);
  108. }
  109. TEST(SUITE, LongIsFloat) {
  110. assertIsNot<float>(42L);
  111. }
  112. TEST(SUITE, LongIsInt) {
  113. assertIs<int>(42L);
  114. }
  115. TEST(SUITE, LongIsLong) {
  116. assertIs<long>(42L);
  117. }
  118. TEST(SUITE, LongIsString) {
  119. assertIsNot<const char*>(42L);
  120. }
  121. TEST(SUITE, StringIsArray) {
  122. assertIsNot<JsonArray&>("42");
  123. }
  124. TEST(SUITE, StringIsBool) {
  125. assertIsNot<bool>("42");
  126. }
  127. TEST(SUITE, StringIsDouble) {
  128. assertIsNot<double>("42");
  129. }
  130. TEST(SUITE, StringIsFloat) {
  131. assertIsNot<float>("42");
  132. }
  133. TEST(SUITE, StringIsInt) {
  134. assertIsNot<int>("42");
  135. }
  136. TEST(SUITE, StringIsLong) {
  137. assertIsNot<long>("42");
  138. }
  139. TEST(SUITE, StringIsString) {
  140. assertIs<const char*>("42");
  141. }
  142. TEST(SUITE, UnparsedTrueIsArray) {
  143. assertIsNot<JsonArray&>(RawJson("true"));
  144. }
  145. TEST(SUITE, UnparsedTrueIsBool) {
  146. assertIs<bool>(RawJson("true"));
  147. }
  148. TEST(SUITE, UnparsedTrueIsDouble) {
  149. assertIsNot<double>(RawJson("true"));
  150. }
  151. TEST(SUITE, UnparsedTrueIsFloat) {
  152. assertIsNot<float>(RawJson("true"));
  153. }
  154. TEST(SUITE, UnparsedTrueIsInt) {
  155. assertIsNot<int>(RawJson("true"));
  156. }
  157. TEST(SUITE, UnparsedTrueIsLong) {
  158. assertIsNot<long>(RawJson("true"));
  159. }
  160. TEST(SUITE, UnparsedTrueIsString) {
  161. assertIsNot<const char*>(RawJson("true"));
  162. }
  163. TEST(SUITE, UnparsedFalseIsArray) {
  164. assertIsNot<JsonArray&>(RawJson("false"));
  165. }
  166. TEST(SUITE, UnparsedFalseIsBool) {
  167. assertIs<bool>(RawJson("false"));
  168. }
  169. TEST(SUITE, UnparsedFalseIsDouble) {
  170. assertIsNot<double>(RawJson("false"));
  171. }
  172. TEST(SUITE, UnparsedFalseIsFloat) {
  173. assertIsNot<float>(RawJson("false"));
  174. }
  175. TEST(SUITE, UnparsedFalseIsInt) {
  176. assertIsNot<int>(RawJson("false"));
  177. }
  178. TEST(SUITE, UnparsedFalseIsLong) {
  179. assertIsNot<long>(RawJson("false"));
  180. }
  181. TEST(SUITE, UnparsedFalseIsString) {
  182. assertIsNot<const char*>(RawJson("false"));
  183. }
  184. TEST(SUITE, UnparsedIntIsArray) {
  185. assertIsNot<JsonArray&>(RawJson("42"));
  186. }
  187. TEST(SUITE, UnparsedIntIsBool) {
  188. assertIsNot<bool>(RawJson("42"));
  189. }
  190. TEST(SUITE, UnparsedIntIsDouble) {
  191. assertIsNot<double>(RawJson("42"));
  192. }
  193. TEST(SUITE, UnparsedIntIsFloat) {
  194. assertIsNot<float>(RawJson("42"));
  195. }
  196. TEST(SUITE, UnparsedIntIsInt) {
  197. assertIs<int>(RawJson("42"));
  198. }
  199. TEST(SUITE, UnparsedIntIsLong) {
  200. assertIs<long>(RawJson("42"));
  201. }
  202. TEST(SUITE, UnparsedIntIsString) {
  203. assertIsNot<const char*>(RawJson("42"));
  204. }
  205. TEST(SUITE, UnparsedFloatIsBool) {
  206. assertIsNot<bool>(RawJson("4.2e-10"));
  207. }
  208. TEST(SUITE, UnparsedFloatIsDouble) {
  209. assertIs<double>(RawJson("4.2e-10"));
  210. }
  211. TEST(SUITE, UnparsedFloatIsFloat) {
  212. assertIs<float>(RawJson("4.2e-10"));
  213. }
  214. TEST(SUITE, UnparsedFloatIsInt) {
  215. assertIsNot<int>(RawJson("4.2e-10"));
  216. }
  217. TEST(SUITE, UnparsedFloatIsLong) {
  218. assertIsNot<long>(RawJson("4.2e-10"));
  219. }
  220. TEST(SUITE, UnparsedFloatIsStr) {
  221. assertIsNot<const char*>(RawJson("4.2"));
  222. }
  223. TEST(SUITE, UnparsedNullIsArray) {
  224. assertIsNot<JsonArray&>(RawJson("null"));
  225. }
  226. TEST(SUITE, UnparsedNullIsBool) {
  227. assertIsNot<bool>(RawJson("null"));
  228. }
  229. TEST(SUITE, UnparsedNullIsDouble) {
  230. assertIsNot<double>(RawJson("null"));
  231. }
  232. TEST(SUITE, UnparsedNullIsFloat) {
  233. assertIsNot<float>(RawJson("null"));
  234. }
  235. TEST(SUITE, UnparsedNullIsInt) {
  236. assertIsNot<int>(RawJson("null"));
  237. }
  238. TEST(SUITE, UnparsedNullIsLong) {
  239. assertIsNot<long>(RawJson("null"));
  240. }
  241. TEST(SUITE, UnparsedNullIsConstCharPtr) {
  242. assertIs<const char*>(RawJson("null"));
  243. }
  244. TEST(SUITE, UnparsedNullIsCharPtr) {
  245. assertIs<char*>(RawJson("null"));
  246. }