2 * Copyright (c) 2009-2011 Petri Lehtinen <petri@digip.org>
3 * Copyright (c) 2010-2011 Graeme Smecher <graeme.smecher@mail.mcgill.ca>
5 * Jansson is free software; you can redistribute it and/or modify
6 * it under the terms of the MIT license. See LICENSE for details.
21 * Simple, valid json_pack cases
25 value = json_pack("b", 1);
26 if(!json_is_true(value))
27 fail("json_pack boolean failed");
28 if(value->refcount != (ssize_t)-1)
29 fail("json_pack boolean refcount failed");
33 value = json_pack("b", 0);
34 if(!json_is_false(value))
35 fail("json_pack boolean failed");
36 if(value->refcount != (ssize_t)-1)
37 fail("json_pack boolean refcount failed");
41 value = json_pack("n");
42 if(!json_is_null(value))
43 fail("json_pack null failed");
44 if(value->refcount != (ssize_t)-1)
45 fail("json_pack null refcount failed");
49 value = json_pack("i", 1);
50 if(!json_is_integer(value) || json_integer_value(value) != 1)
51 fail("json_pack integer failed");
52 if(value->refcount != (ssize_t)1)
53 fail("json_pack integer refcount failed");
56 /* integer from json_int_t */
57 value = json_pack("I", (json_int_t)555555);
58 if(!json_is_integer(value) || json_integer_value(value) != 555555)
59 fail("json_pack json_int_t failed");
60 if(value->refcount != (ssize_t)1)
61 fail("json_pack integer refcount failed");
65 value = json_pack("f", 1.0);
66 if(!json_is_real(value) || json_real_value(value) != 1.0)
67 fail("json_pack real failed");
68 if(value->refcount != (ssize_t)1)
69 fail("json_pack real refcount failed");
73 value = json_pack("s", "test");
74 if(!json_is_string(value) || strcmp("test", json_string_value(value)))
75 fail("json_pack string failed");
76 if(value->refcount != (ssize_t)1)
77 fail("json_pack string refcount failed");
81 value = json_pack("{}", 1.0);
82 if(!json_is_object(value) || json_object_size(value) != 0)
83 fail("json_pack empty object failed");
84 if(value->refcount != (ssize_t)1)
85 fail("json_pack empty object refcount failed");
89 value = json_pack("[]", 1.0);
90 if(!json_is_array(value) || json_array_size(value) != 0)
91 fail("json_pack empty list failed");
92 if(value->refcount != (ssize_t)1)
93 fail("json_pack empty list failed");
96 /* non-incref'd object */
97 value = json_pack("o", json_integer(1));
98 if(!json_is_integer(value) || json_integer_value(value) != 1)
99 fail("json_pack object failed");
100 if(value->refcount != (ssize_t)1)
101 fail("json_pack integer refcount failed");
104 /* incref'd object */
105 value = json_pack("O", json_integer(1));
106 if(!json_is_integer(value) || json_integer_value(value) != 1)
107 fail("json_pack object failed");
108 if(value->refcount != (ssize_t)2)
109 fail("json_pack integer refcount failed");
114 value = json_pack("{s:[]}", "foo");
115 if(!json_is_object(value) || json_object_size(value) != 1)
116 fail("json_pack array failed");
117 if(!json_is_array(json_object_get(value, "foo")))
118 fail("json_pack array failed");
119 if(json_object_get(value, "foo")->refcount != (ssize_t)1)
120 fail("json_pack object refcount failed");
124 value = json_pack("[i,i,i]", 0, 1, 2);
125 if(!json_is_array(value) || json_array_size(value) != 3)
126 fail("json_pack object failed");
129 if(!json_is_integer(json_array_get(value, i)) ||
130 json_integer_value(json_array_get(value, i)) != i)
132 fail("json_pack integer array failed");
136 /* Whitespace; regular string */
137 value = json_pack(" s ", "test");
138 if(!json_is_string(value) || strcmp("test", json_string_value(value)))
139 fail("json_pack string (with whitespace) failed");
142 /* Whitespace; empty array */
143 value = json_pack("[ ]");
144 if(!json_is_array(value) || json_array_size(value) != 0)
145 fail("json_pack empty array (with whitespace) failed");
148 /* Whitespace; array */
149 value = json_pack("[ i , i, i ] ", 1, 2, 3);
150 if(!json_is_array(value) || json_array_size(value) != 3)
151 fail("json_pack array (with whitespace) failed");
158 /* newline in format string */
159 if(json_pack_ex(&error, 0, "{\n\n1"))
160 fail("json_pack failed to catch invalid format '1'");
161 check_error("Expected format 's', got '1'", "<format>", 3, 1, 4);
163 /* mismatched open/close array/object */
164 if(json_pack_ex(&error, 0, "[}"))
165 fail("json_pack failed to catch mismatched '}'");
166 check_error("Unexpected format character '}'", "<format>", 1, 2, 2);
168 if(json_pack_ex(&error, 0, "{]"))
169 fail("json_pack failed to catch mismatched ']'");
170 check_error("Expected format 's', got ']'", "<format>", 1, 2, 2);
172 /* missing close array */
173 if(json_pack_ex(&error, 0, "["))
174 fail("json_pack failed to catch missing ']'");
175 check_error("Unexpected end of format string", "<format>", 1, 2, 2);
177 /* missing close object */
178 if(json_pack_ex(&error, 0, "{"))
179 fail("json_pack failed to catch missing '}'");
180 check_error("Unexpected end of format string", "<format>", 1, 2, 2);
182 /* garbage after format string */
183 if(json_pack_ex(&error, 0, "[i]a", 42))
184 fail("json_pack failed to catch garbage after format string");
185 check_error("Garbage after format string", "<format>", 1, 4, 4);
187 if(json_pack_ex(&error, 0, "ia", 42))
188 fail("json_pack failed to catch garbage after format string");
189 check_error("Garbage after format string", "<format>", 1, 2, 2);
192 if(json_pack_ex(&error, 0, "s", NULL))
193 fail("json_pack failed to catch null argument string");
194 check_error("NULL string argument", "<args>", 1, 1, 1);
197 if(json_pack_ex(&error, 0, NULL))
198 fail("json_pack failed to catch NULL format string");
199 check_error("NULL or empty format string", "<format>", -1, -1, 0);
202 if(json_pack_ex(&error, 0, "{s:i}", NULL, 1))
203 fail("json_pack failed to catch NULL key");
204 check_error("NULL object key", "<args>", 1, 2, 2);
206 /* More complicated checks for row/columns */
207 if(json_pack_ex(&error, 0, "{ {}: s }", "foo"))
208 fail("json_pack failed to catch object as key");
209 check_error("Expected format 's', got '{'", "<format>", 1, 3, 3);
212 if(json_pack_ex(&error, 0, "{ s: {}, s:[ii{} }", "foo", "bar", 12, 13))
213 fail("json_pack failed to catch missing ]");
214 check_error("Unexpected format character '}'", "<format>", 1, 19, 19);
217 if(json_pack_ex(&error, 0, "[[[[[ [[[[[ [[[[ }]]]] ]]]] ]]]]]"))
218 fail("json_pack failed to catch extra }");
219 check_error("Unexpected format character '}'", "<format>", 1, 21, 21);
221 /* Invalid UTF-8 in object key */
222 if(json_pack_ex(&error, 0, "{s:i}", "\xff\xff", 42))
223 fail("json_pack failed to catch invalid UTF-8 in an object key");
224 check_error("Invalid UTF-8 in object key", "<args>", 1, 2, 2);
226 /* Invalid UTF-8 in a string */
227 if(json_pack_ex(&error, 0, "{s:s}", "foo", "\xff\xff"))
228 fail("json_pack failed to catch invalid UTF-8 in a string");
229 check_error("Invalid UTF-8 string", "<args>", 1, 4, 4);