2 * Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
3 * Copyright (c) 2010 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(&error, "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(&error, "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(&error, "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(&error, "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");
58 value = json_pack(&error, "f", 1.0);
59 if(!json_is_real(value) || json_real_value(value) != 1.0)
60 fail("json_pack real failed");
61 if(value->refcount != (ssize_t)1)
62 fail("json_pack real refcount failed");
66 value = json_pack(&error, "s", "test");
67 if(!json_is_string(value) || strcmp("test", json_string_value(value)))
68 fail("json_pack string failed");
69 if(value->refcount != (ssize_t)1)
70 fail("json_pack string refcount failed");
74 value = json_pack(&error, "{}", 1.0);
75 if(!json_is_object(value) || json_object_size(value) != 0)
76 fail("json_pack empty object failed");
77 if(value->refcount != (ssize_t)1)
78 fail("json_pack empty object refcount failed");
82 value = json_pack(&error, "[]", 1.0);
83 if(!json_is_array(value) || json_array_size(value) != 0)
84 fail("json_pack empty list failed");
85 if(value->refcount != (ssize_t)1)
86 fail("json_pack empty list failed");
89 /* non-incref'd object */
90 value = json_pack(&error, "o", json_integer(1));
91 if(!json_is_integer(value) || json_integer_value(value) != 1)
92 fail("json_pack object failed");
93 if(value->refcount != (ssize_t)1)
94 fail("json_pack integer refcount failed");
98 value = json_pack(&error, "O", json_integer(1));
99 if(!json_is_integer(value) || json_integer_value(value) != 1)
100 fail("json_pack object failed");
101 if(value->refcount != (ssize_t)2)
102 fail("json_pack integer refcount failed");
107 value = json_pack(&error, "{s:[]}", "foo");
108 if(!json_is_object(value) || json_object_size(value) != 1)
109 fail("json_pack array failed");
110 if(!json_is_array(json_object_get(value, "foo")))
111 fail("json_pack array failed");
112 if(json_object_get(value, "foo")->refcount != (ssize_t)1)
113 fail("json_pack object refcount failed");
117 value = json_pack(&error, "[i,i,i]", 0, 1, 2);
118 if(!json_is_array(value) || json_array_size(value) != 3)
119 fail("json_pack object failed");
122 if(!json_is_integer(json_array_get(value, i)) ||
123 json_integer_value(json_array_get(value, i)) != i)
125 fail("json_pack integer array failed");
129 /* Whitespace; regular string */
130 value = json_pack(&error, " s ", "test");
131 if(!json_is_string(value) || strcmp("test", json_string_value(value)))
132 fail("json_pack string (with whitespace) failed");
135 /* Whitespace; empty array */
136 value = json_pack(&error, "[ ]");
137 if(!json_is_array(value) || json_array_size(value) != 0)
138 fail("json_pack empty array (with whitespace) failed");
141 /* Whitespace; array */
142 value = json_pack(&error, "[ i , i, i ] ", 1, 2, 3);
143 if(!json_is_array(value) || json_array_size(value) != 3)
144 fail("json_pack array (with whitespace) failed");
151 /* mismatched open/close array/object */
152 if(json_pack(&error, "[}"))
153 fail("json_pack failed to catch mismatched '}'");
154 if(error.line != 1 || error.column != 2)
155 fail("json_pack didn't get the error coordinates right!");
157 if(json_pack(&error, "{]"))
158 fail("json_pack failed to catch mismatched ']'");
159 if(error.line != 1 || error.column != 2)
160 fail("json_pack didn't get the error coordinates right!");
162 /* missing close array */
163 if(json_pack(&error, "["))
164 fail("json_pack failed to catch missing ']'");
165 if(error.line != 1 || error.column != 2)
166 fail("json_pack didn't get the error coordinates right!");
168 /* missing close object */
169 if(json_pack(&error, "{"))
170 fail("json_pack failed to catch missing '}'");
171 if(error.line != 1 || error.column != 2)
172 fail("json_pack didn't get the error coordinates right!");
175 if(json_pack(&error, "s", NULL))
176 fail("json_pack failed to catch null argument string");
177 if(error.line != 1 || error.column != 1)
178 fail("json_pack didn't get the error coordinates right!");
181 if(json_pack(&error, NULL))
182 fail("json_pack failed to catch NULL format string");
183 if(error.line != 1 || error.column != 1)
184 fail("json_pack didn't get the error coordinates right!");
186 /* More complicated checks for row/columns */
187 if(json_pack(&error, "{ {}: s }", "foo"))
188 fail("json_pack failed to catch object as key");
189 if(error.line != 1 || error.column != 3)
190 fail("json_pack didn't get the error coordinates right!");
192 if(json_pack(&error, "{ s: {}, s:[ii{} }", "foo", "bar", 12, 13))
193 fail("json_pack failed to catch missing ]");
194 if(error.line != 1 || error.column != 13)
195 fail("json_pack didn't get the error coordinates right!");
197 if(json_pack(&error, "[[[[[ [[[[[ [[[[ }]]]] ]]]] ]]]]]"))
198 fail("json_pack failed to catch missing ]");
199 if(error.line != 1 || error.column != 21)
200 fail("json_pack didn't get the error coordinates right!");
204 //fprintf(stderr, "%i/%i: %s %s\n", error.line, error.column, error.source, error.text);
207 /* vim: ts=4:expandtab:sw=4