JsonVariant_Is_Tests.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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, ArrayIsArry) {
  31. assertIs<JsonArray&>(JsonArray::invalid());
  32. }
  33. TEST(SUITE, ArrayIsBool) {
  34. assertIsNot<bool>(JsonArray::invalid());
  35. }
  36. TEST(SUITE, ArrayIsDouble) {
  37. assertIsNot<double>(JsonArray::invalid());
  38. }
  39. TEST(SUITE, ArrayIsFloat) {
  40. assertIsNot<float>(JsonArray::invalid());
  41. }
  42. TEST(SUITE, ArrayIsInt) {
  43. assertIsNot<int>(JsonArray::invalid());
  44. }
  45. TEST(SUITE, ArrayIsLong) {
  46. assertIsNot<long>(JsonArray::invalid());
  47. }
  48. TEST(SUITE, ArrayIsString) {
  49. assertIsNot<const char*>(JsonArray::invalid());
  50. }
  51. TEST(SUITE, BoolIsArray) {
  52. assertIsNot<JsonArray&>(true);
  53. }
  54. TEST(SUITE, BoolIsBool) {
  55. assertIs<bool>(true);
  56. }
  57. TEST(SUITE, BoolIsDouble) {
  58. assertIsNot<double>(true);
  59. }
  60. TEST(SUITE, BoolIsFloat) {
  61. assertIsNot<float>(true);
  62. }
  63. TEST(SUITE, BoolIsInt) {
  64. assertIsNot<int>(true);
  65. }
  66. TEST(SUITE, BoolIsLong) {
  67. assertIsNot<long>(true);
  68. }
  69. TEST(SUITE, BoolIsString) {
  70. assertIsNot<const char*>(true);
  71. }
  72. TEST(SUITE, DoubleIsArray) {
  73. assertIsNot<JsonArray&>(4.2);
  74. }
  75. TEST(SUITE, DoubleIsBool) {
  76. assertIsNot<bool>(4.2);
  77. }
  78. TEST(SUITE, DoubleIsDouble) {
  79. assertIs<double>(4.2);
  80. }
  81. TEST(SUITE, DoubleIsFloat) {
  82. assertIs<float>(4.2);
  83. }
  84. TEST(SUITE, DoubleIsInt) {
  85. assertIsNot<int>(4.2);
  86. }
  87. TEST(SUITE, DoubleIsLong) {
  88. assertIsNot<long>(4.2);
  89. }
  90. TEST(SUITE, DoubleIsString) {
  91. assertIsNot<const char*>(4.2);
  92. }
  93. TEST(SUITE, LongIsArray) {
  94. assertIsNot<JsonArray&>(42L);
  95. }
  96. TEST(SUITE, LongIsBool) {
  97. assertIsNot<bool>(42L);
  98. }
  99. TEST(SUITE, LongIsDouble) {
  100. assertIsNot<double>(42L);
  101. }
  102. TEST(SUITE, LongIsFloat) {
  103. assertIsNot<float>(42L);
  104. }
  105. TEST(SUITE, LongIsInt) {
  106. assertIs<int>(42L);
  107. }
  108. TEST(SUITE, LongIsLong) {
  109. assertIs<long>(42L);
  110. }
  111. TEST(SUITE, LongIsString) {
  112. assertIsNot<const char*>(42L);
  113. }
  114. TEST(SUITE, StringIsArray) {
  115. assertIsNot<JsonArray&>("42");
  116. }
  117. TEST(SUITE, StringIsBool) {
  118. assertIsNot<bool>("42");
  119. }
  120. TEST(SUITE, StringIsDouble) {
  121. assertIsNot<double>("42");
  122. }
  123. TEST(SUITE, StringIsFloat) {
  124. assertIsNot<float>("42");
  125. }
  126. TEST(SUITE, StringIsInt) {
  127. assertIsNot<int>("42");
  128. }
  129. TEST(SUITE, StringIsLong) {
  130. assertIsNot<long>("42");
  131. }
  132. TEST(SUITE, StringIsString) {
  133. assertIs<const char*>("42");
  134. }
  135. TEST(SUITE, UnparsedTrueIsArray) {
  136. assertIsNot<JsonArray&>(RawJson("true"));
  137. }
  138. TEST(SUITE, UnparsedTrueIsBool) {
  139. assertIs<bool>(RawJson("true"));
  140. }
  141. TEST(SUITE, UnparsedTrueIsDouble) {
  142. assertIsNot<double>(RawJson("true"));
  143. }
  144. TEST(SUITE, UnparsedTrueIsFloat) {
  145. assertIsNot<float>(RawJson("true"));
  146. }
  147. TEST(SUITE, UnparsedTrueIsInt) {
  148. assertIsNot<int>(RawJson("true"));
  149. }
  150. TEST(SUITE, UnparsedTrueIsLong) {
  151. assertIsNot<long>(RawJson("true"));
  152. }
  153. TEST(SUITE, UnparsedTrueIsString) {
  154. assertIsNot<const char*>(RawJson("true"));
  155. }
  156. TEST(SUITE, UnparsedFalseIsArray) {
  157. assertIsNot<JsonArray&>(RawJson("false"));
  158. }
  159. TEST(SUITE, UnparsedFalseIsBool) {
  160. assertIs<bool>(RawJson("false"));
  161. }
  162. TEST(SUITE, UnparsedFalseIsDouble) {
  163. assertIsNot<double>(RawJson("false"));
  164. }
  165. TEST(SUITE, UnparsedFalseIsFloat) {
  166. assertIsNot<float>(RawJson("false"));
  167. }
  168. TEST(SUITE, UnparsedFalseIsInt) {
  169. assertIsNot<int>(RawJson("false"));
  170. }
  171. TEST(SUITE, UnparsedFalseIsLong) {
  172. assertIsNot<long>(RawJson("false"));
  173. }
  174. TEST(SUITE, UnparsedFalseIsString) {
  175. assertIsNot<const char*>(RawJson("false"));
  176. }
  177. TEST(SUITE, UnparsedIntIsArray) {
  178. assertIsNot<JsonArray&>(RawJson("42"));
  179. }
  180. TEST(SUITE, UnparsedIntIsBool) {
  181. assertIsNot<bool>(RawJson("42"));
  182. }
  183. TEST(SUITE, UnparsedIntIsDouble) {
  184. assertIsNot<double>(RawJson("42"));
  185. }
  186. TEST(SUITE, UnparsedIntIsFloat) {
  187. assertIsNot<float>(RawJson("42"));
  188. }
  189. TEST(SUITE, UnparsedIntIsInt) {
  190. assertIs<int>(RawJson("42"));
  191. }
  192. TEST(SUITE, UnparsedIntIsLong) {
  193. assertIs<long>(RawJson("42"));
  194. }
  195. TEST(SUITE, UnparsedIntIsString) {
  196. assertIsNot<const char*>(RawJson("42"));
  197. }
  198. TEST(SUITE, UnparsedFloatIsBool) {
  199. assertIsNot<bool>(RawJson("4.2e-10"));
  200. }
  201. TEST(SUITE, UnparsedFloatIsDouble) {
  202. assertIs<double>(RawJson("4.2e-10"));
  203. }
  204. TEST(SUITE, UnparsedFloatIsFloat) {
  205. assertIs<float>(RawJson("4.2e-10"));
  206. }
  207. TEST(SUITE, UnparsedFloatIsInt) {
  208. assertIsNot<int>(RawJson("4.2e-10"));
  209. }
  210. TEST(SUITE, UnparsedFloatIsLong) {
  211. assertIsNot<long>(RawJson("4.2e-10"));
  212. }
  213. TEST(SUITE, UnparsedFloatIsStr) {
  214. assertIsNot<const char*>(RawJson("4.2"));
  215. }
  216. TEST(SUITE, UnparsedNullIsArray) {
  217. assertIsNot<JsonArray&>(RawJson("null"));
  218. }
  219. TEST(SUITE, UnparsedNullIsBool) {
  220. assertIsNot<bool>(RawJson("null"));
  221. }
  222. TEST(SUITE, UnparsedNullIsDouble) {
  223. assertIsNot<double>(RawJson("null"));
  224. }
  225. TEST(SUITE, UnparsedNullIsFloat) {
  226. assertIsNot<float>(RawJson("null"));
  227. }
  228. TEST(SUITE, UnparsedNullIsInt) {
  229. assertIsNot<int>(RawJson("null"));
  230. }
  231. TEST(SUITE, UnparsedNullIsLong) {
  232. assertIsNot<long>(RawJson("null"));
  233. }
  234. TEST(SUITE, UnparsedNullIsConstCharPtr) {
  235. assertIs<const char*>(RawJson("null"));
  236. }
  237. TEST(SUITE, UnparsedNullIsCharPtr) {
  238. assertIs<char*>(RawJson("null"));
  239. }