test_simple.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
  3. *
  4. * Jansson is free software; you can redistribute it and/or modify
  5. * it under the terms of the MIT license. See LICENSE for details.
  6. */
  7. #include <string.h>
  8. #include <jansson.h>
  9. #include "util.h"
  10. /* Call the simple functions not covered by other tests of the public API */
  11. static void run_tests()
  12. {
  13. json_t *value;
  14. value = json_boolean(1);
  15. if(!json_is_true(value))
  16. fail("json_boolean(1) failed");
  17. json_decref(value);
  18. value = json_boolean(-123);
  19. if(!json_is_true(value))
  20. fail("json_boolean(-123) failed");
  21. json_decref(value);
  22. value = json_boolean(0);
  23. if(!json_is_false(value))
  24. fail("json_boolean(0) failed");
  25. if(json_boolean_value(value) != 0)
  26. fail("json_boolean_value failed");
  27. json_decref(value);
  28. value = json_integer(1);
  29. if(json_typeof(value) != JSON_INTEGER)
  30. fail("json_typeof failed");
  31. if(json_is_object(value))
  32. fail("json_is_object failed");
  33. if(json_is_array(value))
  34. fail("json_is_array failed");
  35. if(json_is_string(value))
  36. fail("json_is_string failed");
  37. if(!json_is_integer(value))
  38. fail("json_is_integer failed");
  39. if(json_is_real(value))
  40. fail("json_is_real failed");
  41. if(!json_is_number(value))
  42. fail("json_is_number failed");
  43. if(json_is_true(value))
  44. fail("json_is_true failed");
  45. if(json_is_false(value))
  46. fail("json_is_false failed");
  47. if(json_is_boolean(value))
  48. fail("json_is_boolean failed");
  49. if(json_is_null(value))
  50. fail("json_is_null failed");
  51. json_decref(value);
  52. value = json_string("foo");
  53. if(!value)
  54. fail("json_string failed");
  55. if(strcmp(json_string_value(value), "foo"))
  56. fail("invalid string value");
  57. if (json_string_length(value) != 3)
  58. fail("invalid string length");
  59. if(json_string_set(value, "barr"))
  60. fail("json_string_set failed");
  61. if(strcmp(json_string_value(value), "barr"))
  62. fail("invalid string value");
  63. if (json_string_length(value) != 4)
  64. fail("invalid string length");
  65. if(json_string_setn(value, "hi\0ho", 5))
  66. fail("json_string_set failed");
  67. if(memcmp(json_string_value(value), "hi\0ho\0", 6))
  68. fail("invalid string value");
  69. if (json_string_length(value) != 5)
  70. fail("invalid string length");
  71. json_decref(value);
  72. value = json_string(NULL);
  73. if(value)
  74. fail("json_string(NULL) failed");
  75. /* invalid UTF-8 */
  76. value = json_string("a\xefz");
  77. if(value)
  78. fail("json_string(<invalid utf-8>) failed");
  79. value = json_string_nocheck("foo");
  80. if(!value)
  81. fail("json_string_nocheck failed");
  82. if(strcmp(json_string_value(value), "foo"))
  83. fail("invalid string value");
  84. if (json_string_length(value) != 3)
  85. fail("invalid string length");
  86. if(json_string_set_nocheck(value, "barr"))
  87. fail("json_string_set_nocheck failed");
  88. if(strcmp(json_string_value(value), "barr"))
  89. fail("invalid string value");
  90. if (json_string_length(value) != 4)
  91. fail("invalid string length");
  92. if(json_string_setn_nocheck(value, "hi\0ho", 5))
  93. fail("json_string_set failed");
  94. if(memcmp(json_string_value(value), "hi\0ho\0", 6))
  95. fail("invalid string value");
  96. if (json_string_length(value) != 5)
  97. fail("invalid string length");
  98. json_decref(value);
  99. /* invalid UTF-8 */
  100. value = json_string_nocheck("qu\xff");
  101. if(!value)
  102. fail("json_string_nocheck failed");
  103. if(strcmp(json_string_value(value), "qu\xff"))
  104. fail("invalid string value");
  105. if (json_string_length(value) != 3)
  106. fail("invalid string length");
  107. if(json_string_set_nocheck(value, "\xfd\xfe\xff"))
  108. fail("json_string_set_nocheck failed");
  109. if(strcmp(json_string_value(value), "\xfd\xfe\xff"))
  110. fail("invalid string value");
  111. if (json_string_length(value) != 3)
  112. fail("invalid string length");
  113. json_decref(value);
  114. value = json_integer(123);
  115. if(!value)
  116. fail("json_integer failed");
  117. if(json_integer_value(value) != 123)
  118. fail("invalid integer value");
  119. if(json_number_value(value) != 123.0)
  120. fail("invalid number value");
  121. if(json_integer_set(value, 321))
  122. fail("json_integer_set failed");
  123. if(json_integer_value(value) != 321)
  124. fail("invalid integer value");
  125. if(json_number_value(value) != 321.0)
  126. fail("invalid number value");
  127. json_decref(value);
  128. value = json_real(123.123);
  129. if(!value)
  130. fail("json_real failed");
  131. if(json_real_value(value) != 123.123)
  132. fail("invalid integer value");
  133. if(json_number_value(value) != 123.123)
  134. fail("invalid number value");
  135. if(json_real_set(value, 321.321))
  136. fail("json_real_set failed");
  137. if(json_real_value(value) != 321.321)
  138. fail("invalid real value");
  139. if(json_number_value(value) != 321.321)
  140. fail("invalid number value");
  141. json_decref(value);
  142. value = json_true();
  143. if(!value)
  144. fail("json_true failed");
  145. json_decref(value);
  146. value = json_false();
  147. if(!value)
  148. fail("json_false failed");
  149. json_decref(value);
  150. value = json_null();
  151. if(!value)
  152. fail("json_null failed");
  153. json_decref(value);
  154. /* Test reference counting on singletons (true, false, null) */
  155. value = json_true();
  156. if(value->refcount != (size_t)-1)
  157. fail("refcounting true works incorrectly");
  158. json_decref(value);
  159. if(value->refcount != (size_t)-1)
  160. fail("refcounting true works incorrectly");
  161. json_incref(value);
  162. if(value->refcount != (size_t)-1)
  163. fail("refcounting true works incorrectly");
  164. value = json_false();
  165. if(value->refcount != (size_t)-1)
  166. fail("refcounting false works incorrectly");
  167. json_decref(value);
  168. if(value->refcount != (size_t)-1)
  169. fail("refcounting false works incorrectly");
  170. json_incref(value);
  171. if(value->refcount != (size_t)-1)
  172. fail("refcounting false works incorrectly");
  173. value = json_null();
  174. if(value->refcount != (size_t)-1)
  175. fail("refcounting null works incorrectly");
  176. json_decref(value);
  177. if(value->refcount != (size_t)-1)
  178. fail("refcounting null works incorrectly");
  179. json_incref(value);
  180. if(value->refcount != (size_t)-1)
  181. fail("refcounting null works incorrectly");
  182. #ifdef json_auto_t
  183. value = json_string("foo");
  184. {
  185. json_auto_t *test = json_incref(value);
  186. /* Use test so GCC doesn't complain it is unused. */
  187. if(!json_is_string(test))
  188. fail("value type check failed");
  189. }
  190. if(value->refcount != 1)
  191. fail("automatic decrement failed");
  192. json_decref(value);
  193. #endif
  194. }