test/json.c

changeset 28
e46f9f254fcd
parent 26
dc36aa437249
child 29
b8c826c720f3
equal deleted inserted replaced
27:5baee70feaa9 28:e46f9f254fcd
46 bool bt; 46 bool bt;
47 bool bf; 47 bool bf;
48 double d; 48 double d;
49 } Test1; 49 } Test1;
50 50
51 typedef struct Test2 {
52 char *name;
53 int i;
54 } Test2;
55
56 typedef struct Test3 {
57 char *test3;
58 Test2 *test2;
59 } Test3;
60
61 typedef struct Test4 {
62 int id;
63 Test3 *test3;
64 Test2 *test2;
65 } Test4;
66
51 static DBUContext *ctx; 67 static DBUContext *ctx;
52 static DBUClass *test1_class; 68 static DBUClass *test1_class;
69 static DBUClass *test2_class;
70 static DBUClass *test3_class;
71 static DBUClass *test4_class;
53 72
54 int init_json_tests(void) { 73 int init_json_tests(void) {
55 ctx = dbuContextCreate(); 74 ctx = dbuContextCreate();
56 75
57 test1_class = dbuRegisterClassWithoutPK(ctx, "test1", sizeof(Test1)); 76 test1_class = dbuRegisterClassWithoutPK(ctx, "test1", sizeof(Test1));
66 dbuClassAdd(test1_class, Test1, i64); 85 dbuClassAdd(test1_class, Test1, i64);
67 dbuClassAdd(test1_class, Test1, u64); 86 dbuClassAdd(test1_class, Test1, u64);
68 dbuClassAdd(test1_class, Test1, bt); 87 dbuClassAdd(test1_class, Test1, bt);
69 dbuClassAdd(test1_class, Test1, bf); 88 dbuClassAdd(test1_class, Test1, bf);
70 dbuClassAdd(test1_class, Test1, d); 89 dbuClassAdd(test1_class, Test1, d);
90
91 test2_class = dbuRegisterClassWithoutPK(ctx, "test2", sizeof(Test2));
92 dbuClassAdd(test2_class, Test2, name);
93 dbuClassAdd(test2_class, Test2, i);
94
95 test3_class = dbuRegisterClassWithoutPK(ctx, "test3", sizeof(Test3));
96 dbuClassAdd(test3_class, Test3, test3);
97 dbuClassAddObj(test3_class, "test2", offsetof(Test3, test2), test2_class);
98
99 test4_class = dbuRegisterClassWithoutPK(ctx, "test4", sizeof(Test4));
100 dbuClassAdd(test4_class, Test4, id);
101 dbuClassAddObj(test4_class, "test2", offsetof(Test4, test2), test2_class);
102 dbuClassAddObj(test4_class, "test3", offsetof(Test4, test3), test3_class);
71 } 103 }
72 104
73 void cleanup_json_tests(void) { 105 void cleanup_json_tests(void) {
74 dbuContextFree(ctx); 106 dbuContextFree(ctx);
75 } 107 }
92 124
93 CX_TEST_DO { 125 CX_TEST_DO {
94 CxJsonValue *value = dbuObjectToJson(test1_class, &test, NULL); 126 CxJsonValue *value = dbuObjectToJson(test1_class, &test, NULL);
95 127
96 CX_TEST_ASSERT(value); 128 CX_TEST_ASSERT(value);
97 CX_TEST_ASSERT(value->type == CX_JSON_OBJECT); 129 CX_TEST_ASSERT(cxJsonIsObject(value));
98 130
99 CxJsonValue *str = cxJsonObjGet(value, "str"); 131 CxJsonValue *str = cxJsonObjGet(value, "str");
100 CxJsonValue *str2 = cxJsonObjGet(value, "str2"); 132 CxJsonValue *str2 = cxJsonObjGet(value, "str2");
101 CxJsonValue *i8 = cxJsonObjGet(value, "i8"); 133 CxJsonValue *i8 = cxJsonObjGet(value, "i8");
102 CxJsonValue *u8 = cxJsonObjGet(value, "u8"); 134 CxJsonValue *u8 = cxJsonObjGet(value, "u8");
131 CX_TEST_ASSERT(i32->value.integer == test.i32); 163 CX_TEST_ASSERT(i32->value.integer == test.i32);
132 CX_TEST_ASSERT(u32->value.integer == test.u32); 164 CX_TEST_ASSERT(u32->value.integer == test.u32);
133 CX_TEST_ASSERT(i64->value.integer == test.i64); 165 CX_TEST_ASSERT(i64->value.integer == test.i64);
134 CX_TEST_ASSERT(u64->value.integer == test.u64); 166 CX_TEST_ASSERT(u64->value.integer == test.u64);
135 CX_TEST_ASSERT(d->value.number < test.d + 0.1 && d->value.number > test.d - 0.1); 167 CX_TEST_ASSERT(d->value.number < test.d + 0.1 && d->value.number > test.d - 0.1);
168
169 cxJsonValueFree(value);
136 } 170 }
137 } 171 }
138 172
173 CX_TEST(testObjectToJsonChildObj) {
174 Test2 t2_1;
175 t2_1.i = 12;
176 t2_1.name = "t2_1";
177
178 Test2 t2_2;
179 t2_2.i = 45;
180 t2_2.name = "t2_2";
181
182 Test3 t3;
183 t3.test3 = "t3";
184 t3.test2 = &t2_1;
185
186 Test4 t4;
187 t4.id = 15;
188 t4.test2 = &t2_2;
189 t4.test3 = &t3;
190
191 CX_TEST_DO {
192 CxJsonValue *value = dbuObjectToJson(test4_class, &t4, NULL);
193
194 CX_TEST_ASSERT(value);
195 CX_TEST_ASSERT(cxJsonIsObject(value));
196
197 CxJsonValue *v = cxJsonObjGet(value, "id");
198 CX_TEST_ASSERT(v);
199 CX_TEST_ASSERT(cxJsonIsInteger(v));
200 CX_TEST_ASSERT(v->value.integer == t4.id);
201
202 v = cxJsonObjGet(value, "test2");
203 CX_TEST_ASSERT(v);
204 CX_TEST_ASSERT(cxJsonIsObject(v));
205
206 CxJsonValue *s = cxJsonObjGet(v, "i");
207 CX_TEST_ASSERT(s);
208 CX_TEST_ASSERT(cxJsonIsInteger(s));
209 CX_TEST_ASSERT(s->value.integer == t2_2.i);
210
211 s = cxJsonObjGet(v, "name");
212 CX_TEST_ASSERT(s);
213 CX_TEST_ASSERT(cxJsonIsString(s));
214 CX_TEST_ASSERT(!cx_strcmp(s->value.string, t2_2.name));
215
216 v = cxJsonObjGet(value, "test3");
217 CX_TEST_ASSERT(v);
218 CX_TEST_ASSERT(cxJsonIsObject(v));
219
220 s = cxJsonObjGet(v, "test3");
221 CX_TEST_ASSERT(s);
222 CX_TEST_ASSERT(cxJsonIsString(s));
223 CX_TEST_ASSERT(!cx_strcmp(s->value.string, t3.test3));
224
225 s = cxJsonObjGet(v, "test2");
226 CX_TEST_ASSERT(s);
227 CX_TEST_ASSERT(cxJsonIsObject(s));
228
229 CxJsonValue *x = cxJsonObjGet(s, "i");
230 CX_TEST_ASSERT(x);
231 CX_TEST_ASSERT(cxJsonIsInteger(x));
232 CX_TEST_ASSERT(x->value.integer == t2_1.i);
233
234 x = cxJsonObjGet(s, "name");
235 CX_TEST_ASSERT(x);
236 CX_TEST_ASSERT(cxJsonIsString(x));
237 CX_TEST_ASSERT(!cx_strcmp(x->value.string, t2_1.name));
238
239 cxJsonValueFree(value);
240 }
241 }

mercurial