test/json.c

Wed, 10 Dec 2025 18:36:02 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 10 Dec 2025 18:36:02 +0100
changeset 28
e46f9f254fcd
parent 26
dc36aa437249
child 29
b8c826c720f3
permissions
-rw-r--r--

implement json child object serialization

26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBLIITY OF SUCH DAMAGE.
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "json.h"
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <stdbool.h>
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include <cx/buffer.h>
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 typedef struct Test1 {
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 char *str;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 cxmutstr str2;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 int8_t i8;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 uint8_t u8;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 int64_t i64;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 int16_t i16;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 int32_t i32;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 uint32_t u32;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 uint16_t u16;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 uint64_t u64;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 bool bt;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 bool bf;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 double d;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 } Test1;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
51 typedef struct Test2 {
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
52 char *name;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
53 int i;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
54 } Test2;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
55
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
56 typedef struct Test3 {
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
57 char *test3;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
58 Test2 *test2;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
59 } Test3;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
60
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
61 typedef struct Test4 {
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
62 int id;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
63 Test3 *test3;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
64 Test2 *test2;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
65 } Test4;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
66
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 static DBUContext *ctx;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 static DBUClass *test1_class;
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
69 static DBUClass *test2_class;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
70 static DBUClass *test3_class;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
71 static DBUClass *test4_class;
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 int init_json_tests(void) {
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 ctx = dbuContextCreate();
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 test1_class = dbuRegisterClassWithoutPK(ctx, "test1", sizeof(Test1));
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 dbuClassAdd(test1_class, Test1, str);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 dbuClassAdd(test1_class, Test1, str2);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 dbuClassAdd(test1_class, Test1, i8);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 dbuClassAdd(test1_class, Test1, u8);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 dbuClassAdd(test1_class, Test1, i16);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 dbuClassAdd(test1_class, Test1, u16);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 dbuClassAdd(test1_class, Test1, i32);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 dbuClassAdd(test1_class, Test1, u32);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 dbuClassAdd(test1_class, Test1, i64);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 dbuClassAdd(test1_class, Test1, u64);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 dbuClassAdd(test1_class, Test1, bt);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 dbuClassAdd(test1_class, Test1, bf);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 dbuClassAdd(test1_class, Test1, d);
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
90
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
91 test2_class = dbuRegisterClassWithoutPK(ctx, "test2", sizeof(Test2));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
92 dbuClassAdd(test2_class, Test2, name);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
93 dbuClassAdd(test2_class, Test2, i);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
94
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
95 test3_class = dbuRegisterClassWithoutPK(ctx, "test3", sizeof(Test3));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
96 dbuClassAdd(test3_class, Test3, test3);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
97 dbuClassAddObj(test3_class, "test2", offsetof(Test3, test2), test2_class);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
98
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
99 test4_class = dbuRegisterClassWithoutPK(ctx, "test4", sizeof(Test4));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
100 dbuClassAdd(test4_class, Test4, id);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
101 dbuClassAddObj(test4_class, "test2", offsetof(Test4, test2), test2_class);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
102 dbuClassAddObj(test4_class, "test3", offsetof(Test4, test3), test3_class);
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 }
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 void cleanup_json_tests(void) {
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 dbuContextFree(ctx);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 }
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 CX_TEST(testObjectToJsonSimple) {
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 Test1 test;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 test.str = "hello str";
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 test.str2 = cx_mutstr("hello cx str");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 test.i8 = 32;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 test.u8 = 250;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 test.i16 = -5533;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 test.u16 = 8000;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 test.i32 = -123456;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 test.u32 = 4000000000;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 test.i64 = -999999999999L;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 test.u64 = 2501;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 test.bt = true;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 test.bf = false;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 test.d = 431.15;
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 CX_TEST_DO {
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 CxJsonValue *value = dbuObjectToJson(test1_class, &test, NULL);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 CX_TEST_ASSERT(value);
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
129 CX_TEST_ASSERT(cxJsonIsObject(value));
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 CxJsonValue *str = cxJsonObjGet(value, "str");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 CxJsonValue *str2 = cxJsonObjGet(value, "str2");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 CxJsonValue *i8 = cxJsonObjGet(value, "i8");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 CxJsonValue *u8 = cxJsonObjGet(value, "u8");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135 CxJsonValue *i16 = cxJsonObjGet(value, "i16");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 CxJsonValue *u16 = cxJsonObjGet(value, "u16");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 CxJsonValue *i32 = cxJsonObjGet(value, "i32");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 CxJsonValue *u32 = cxJsonObjGet(value, "u32");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 CxJsonValue *i64 = cxJsonObjGet(value, "i64");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 CxJsonValue *u64 = cxJsonObjGet(value, "u64");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 CxJsonValue *bt = cxJsonObjGet(value, "bt");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 CxJsonValue *bf = cxJsonObjGet(value, "bf");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 CxJsonValue *d = cxJsonObjGet(value, "d");
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 CX_TEST_ASSERT(str && str->type == CX_JSON_STRING);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 CX_TEST_ASSERT(str2 && str2->type == CX_JSON_STRING);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 CX_TEST_ASSERT(i8 && i8->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 CX_TEST_ASSERT(u8 && u8->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 CX_TEST_ASSERT(i16 && i16->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 CX_TEST_ASSERT(u16 && u16->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 CX_TEST_ASSERT(i32 && i32->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 CX_TEST_ASSERT(u32 && u32->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 CX_TEST_ASSERT(i64 && i64->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 CX_TEST_ASSERT(u64 && u64->type == CX_JSON_INTEGER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 CX_TEST_ASSERT(d && d->type == CX_JSON_NUMBER);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 CX_TEST_ASSERT(!cx_strcmp(str->value.string, test.str));
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 CX_TEST_ASSERT(!cx_strcmp(str2->value.string, test.str2));
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 CX_TEST_ASSERT(i8->value.integer == test.i8);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 CX_TEST_ASSERT(u8->value.integer == test.u8);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 CX_TEST_ASSERT(i16->value.integer == test.i16);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 CX_TEST_ASSERT(u16->value.integer == test.u16);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 CX_TEST_ASSERT(i32->value.integer == test.i32);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 CX_TEST_ASSERT(u32->value.integer == test.u32);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 CX_TEST_ASSERT(i64->value.integer == test.i64);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 CX_TEST_ASSERT(u64->value.integer == test.u64);
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 CX_TEST_ASSERT(d->value.number < test.d + 0.1 && d->value.number > test.d - 0.1);
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
168
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
169 cxJsonValueFree(value);
26
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 }
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 }
dc36aa437249 implement json primitives serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172
28
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
173 CX_TEST(testObjectToJsonChildObj) {
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
174 Test2 t2_1;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
175 t2_1.i = 12;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
176 t2_1.name = "t2_1";
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
177
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
178 Test2 t2_2;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
179 t2_2.i = 45;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
180 t2_2.name = "t2_2";
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
181
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
182 Test3 t3;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
183 t3.test3 = "t3";
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
184 t3.test2 = &t2_1;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
185
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
186 Test4 t4;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
187 t4.id = 15;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
188 t4.test2 = &t2_2;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
189 t4.test3 = &t3;
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
190
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
191 CX_TEST_DO {
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
192 CxJsonValue *value = dbuObjectToJson(test4_class, &t4, NULL);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
193
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
194 CX_TEST_ASSERT(value);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
195 CX_TEST_ASSERT(cxJsonIsObject(value));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
196
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
197 CxJsonValue *v = cxJsonObjGet(value, "id");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
198 CX_TEST_ASSERT(v);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
199 CX_TEST_ASSERT(cxJsonIsInteger(v));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
200 CX_TEST_ASSERT(v->value.integer == t4.id);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
201
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
202 v = cxJsonObjGet(value, "test2");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
203 CX_TEST_ASSERT(v);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
204 CX_TEST_ASSERT(cxJsonIsObject(v));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
205
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
206 CxJsonValue *s = cxJsonObjGet(v, "i");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
207 CX_TEST_ASSERT(s);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
208 CX_TEST_ASSERT(cxJsonIsInteger(s));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
209 CX_TEST_ASSERT(s->value.integer == t2_2.i);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
210
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
211 s = cxJsonObjGet(v, "name");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
212 CX_TEST_ASSERT(s);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
213 CX_TEST_ASSERT(cxJsonIsString(s));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
214 CX_TEST_ASSERT(!cx_strcmp(s->value.string, t2_2.name));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
215
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
216 v = cxJsonObjGet(value, "test3");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
217 CX_TEST_ASSERT(v);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
218 CX_TEST_ASSERT(cxJsonIsObject(v));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
219
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
220 s = cxJsonObjGet(v, "test3");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
221 CX_TEST_ASSERT(s);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
222 CX_TEST_ASSERT(cxJsonIsString(s));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
223 CX_TEST_ASSERT(!cx_strcmp(s->value.string, t3.test3));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
224
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
225 s = cxJsonObjGet(v, "test2");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
226 CX_TEST_ASSERT(s);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
227 CX_TEST_ASSERT(cxJsonIsObject(s));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
228
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
229 CxJsonValue *x = cxJsonObjGet(s, "i");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
230 CX_TEST_ASSERT(x);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
231 CX_TEST_ASSERT(cxJsonIsInteger(x));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
232 CX_TEST_ASSERT(x->value.integer == t2_1.i);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
233
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
234 x = cxJsonObjGet(s, "name");
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
235 CX_TEST_ASSERT(x);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
236 CX_TEST_ASSERT(cxJsonIsString(x));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
237 CX_TEST_ASSERT(!cx_strcmp(x->value.string, t2_1.name));
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
238
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
239 cxJsonValueFree(value);
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
240 }
e46f9f254fcd implement json child object serialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 26
diff changeset
241 }

mercurial