tests/test_json.c

Sun, 26 Jan 2025 13:22:58 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 26 Jan 2025 13:22:58 +0100
changeset 1157
3565ae61a5a2
parent 1156
96f16b5a0029
permissions
-rw-r--r--

fix memory leaks

937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2024 Mike Becker, Olaf Wintermann All rights reserved.
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
29 #include "util_allocator.h"
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #include "cx/test.h"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #include "cx/json.h"
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
33 #include "cx/compare.h"
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
35 CX_TEST(test_json_init_default) {
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
36 CxJson json;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
37 CX_TEST_DO {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
38 cxJsonInit(&json, NULL);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
39 CX_TEST_ASSERT(json.states == json.states_internal);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
40 CX_TEST_ASSERT(json.states_size == 1);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
41 CX_TEST_ASSERT(json.states_capacity >= 8);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
42 CX_TEST_ASSERT(json.vbuf == json.vbuf_internal);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
43 CX_TEST_ASSERT(json.vbuf_size == 0);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
44 CX_TEST_ASSERT(json.vbuf_capacity >= 8);
1032
aaad28e23dac fix memory leaks in json tests
Mike Becker <universe@uap-core.de>
parents: 1015
diff changeset
45 cxJsonDestroy(&json);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
46 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
47 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
48
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 CX_TEST(test_json_simple_object) {
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 cxstring text = cx_str(
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 "{\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 "\t\"message\":\"success\",\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 "\t\"position\":{\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 "\t\t\"longitude\":-94.7099,\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 "\t\t\"latitude\":51.5539\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 "\t},\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 "\t\"timestamp\":1729348561,\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 "\t\"alive\":true\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 "}"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 );
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
63 CxJsonStatus result;
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
66 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
67 cxJsonFill(&json, text);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 // parse the big fat object
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 CxJsonValue *obj;
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 result = cxJsonNext(&json, &obj);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
72 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 // check the contents
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 CX_TEST_ASSERT(cxJsonIsObject(obj));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 CxJsonValue *message = cxJsonObjGet(obj, "message");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 CX_TEST_ASSERT(cxJsonIsString(message));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 CX_TEST_ASSERT(0 == cx_strcmp(
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
80 cxJsonAsCxString(message),
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 cx_str("success"))
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 );
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 CxJsonValue *position = cxJsonObjGet(obj, "position");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 CX_TEST_ASSERT(cxJsonIsObject(position));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 CxJsonValue *longitude = cxJsonObjGet(position, "longitude");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 CX_TEST_ASSERT(cxJsonIsNumber(longitude));
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
88 CX_TEST_ASSERT(!cxJsonIsInteger(longitude));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
89 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(longitude), -94.7099));
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
90 CX_TEST_ASSERT(cxJsonAsInteger(longitude) == -94);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 CxJsonValue *latitude = cxJsonObjGet(position, "latitude");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92 CX_TEST_ASSERT(cxJsonIsNumber(latitude));
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
93 CX_TEST_ASSERT(!cxJsonIsInteger(latitude));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
94 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(latitude), 51.5539));
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
95 CX_TEST_ASSERT(cxJsonAsInteger(latitude) == 51);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 CxJsonValue *timestamp = cxJsonObjGet(obj, "timestamp");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98 CX_TEST_ASSERT(cxJsonIsInteger(timestamp));
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
99 CX_TEST_ASSERT(cxJsonIsNumber(timestamp));
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 CX_TEST_ASSERT(cxJsonAsInteger(timestamp) == 1729348561);
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
101 CX_TEST_ASSERT(cxJsonAsDouble(timestamp) == 1729348561.0);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
103 CxJsonValue *alive = cxJsonObjGet(obj, "alive");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104 CX_TEST_ASSERT(cxJsonIsBool(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 CX_TEST_ASSERT(cxJsonIsTrue(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 CX_TEST_ASSERT(!cxJsonIsFalse(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 CX_TEST_ASSERT(cxJsonAsBool(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 // this recursively frees everything else
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 cxJsonValueFree(obj);
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 // we only have one object that already contained all the data
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113 result = cxJsonNext(&json, &obj);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
114 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 cxJsonDestroy(&json);
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
120 CX_TEST(test_json_escaped_strings) {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
121 cxstring text = cx_str(
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
122 "{\n"
1154
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
123 "\t\"object\":\"{\\n\\t\\\"object\\\":null\\n}\",\n"
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
124 "\t\"ctrl-chars\":\"\\\\foo\\r\\nbar\\f*ring\\/ring*\\b\"\n"
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
125 "}"
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
126 );
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
127
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
128 CxJson json;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
129 cxJsonInit(&json, NULL);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
130 CX_TEST_DO {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
131 cxJsonFill(&json, text);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
132 CxJsonValue *obj;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
133 CxJsonStatus result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
134 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
135 CX_TEST_ASSERT(cxJsonIsObject(obj));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
136 CxJsonValue *object = cxJsonObjGet(obj, "object");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
137 CX_TEST_ASSERT(cxJsonIsString(object));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
138 CX_TEST_ASSERT(0 == cx_strcmp(
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
139 cxJsonAsCxString(object),
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
140 CX_STR("{\n\t\"object\":null\n}"))
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
141 );
1154
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
142 CxJsonValue *ctrl = cxJsonObjGet(obj, "ctrl-chars");
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
143 CX_TEST_ASSERT(cxJsonIsString(ctrl));
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
144 CX_TEST_ASSERT(0 == cx_strcmp(
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
145 cxJsonAsCxString(ctrl),
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
146 CX_STR("\\foo\r\nbar\f*ring/ring*\b"))
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
147 );
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
148 cxJsonValueFree(obj);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
149 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
150 cxJsonDestroy(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
151 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
152
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
153 CX_TEST(test_json_escaped_unicode_strings) {
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
154 cxstring text = cx_str(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
155 "{\n"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
156 "\"ascii\":\"\\u0041\\u0053\\u0043\\u0049\\u0049\",\n"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
157 "\"unicode\":\"\\u00df\\u00DF\",\n"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
158 "\"mixed\":\"mixed ä ö \\u00e4 \\u00f6\",\n"
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
159 "\"wide\":\"\\u03a3\\u29b0\",\n"
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
160 "\"surrogatepair1\":\"\\ud83e\\udff5\",\n"
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
161 "\"surrogatepair2\":\"test\\ud83e\\udff1AA\"\n,"
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
162 "\"mixed2\":\"123\\u03a3\\ud83e\\udfc5\\u00df\""
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
163 "}"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
164 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
165
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
166 CxJson json;
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
167 cxJsonInit(&json, NULL);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
168 CX_TEST_DO {
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
169 cxJsonFill(&json, text);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
170 CxJsonValue *obj;
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
171 CxJsonStatus result = cxJsonNext(&json, &obj);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
172 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
173 CX_TEST_ASSERT(cxJsonIsObject(obj));
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
174
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
175 CxJsonValue *ascii = cxJsonObjGet(obj, "ascii");
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
176 CX_TEST_ASSERT(cxJsonIsString(ascii));
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
177 CX_TEST_ASSERT(0 == cx_strcmp(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
178 cxJsonAsCxString(ascii),
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
179 CX_STR("ASCII"))
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
180 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
181
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
182 CxJsonValue *unicode = cxJsonObjGet(obj, "unicode");
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
183 CX_TEST_ASSERT(cxJsonIsString(unicode));
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
184 CX_TEST_ASSERT(0 == cx_strcmp(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
185 cxJsonAsCxString(unicode),
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
186 CX_STR("ßß"))
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
187 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
188
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
189 CxJsonValue *mixed = cxJsonObjGet(obj, "mixed");
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
190 CX_TEST_ASSERT(cxJsonIsString(mixed));
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
191 CX_TEST_ASSERT(0 == cx_strcmp(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
192 cxJsonAsCxString(mixed),
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
193 CX_STR("mixed ä ö ä ö"))
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
194 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
195
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
196 CxJsonValue *wide = cxJsonObjGet(obj, "wide");
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
197 CX_TEST_ASSERT(cxJsonIsString(wide));
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
198 CX_TEST_ASSERT(0 == cx_strcmp(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
199 cxJsonAsCxString(wide),
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
200 CX_STR("\u03a3\u29b0"))
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
201 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
202
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
203 CxJsonValue *surrogatepair1 = cxJsonObjGet(obj, "surrogatepair1");
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
204 CX_TEST_ASSERT(cxJsonIsString(surrogatepair1));
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
205 CX_TEST_ASSERT(0 == cx_strcmp(
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
206 cxJsonAsCxString(surrogatepair1),
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
207 CX_STR("\xf0\x9f\xaf\xb5"))
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
208 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
209
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
210 CxJsonValue *surrogatepair2 = cxJsonObjGet(obj, "surrogatepair2");
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
211 CX_TEST_ASSERT(cxJsonIsString(surrogatepair2));
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
212 CX_TEST_ASSERT(0 == cx_strcmp(
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
213 cxJsonAsCxString(surrogatepair2),
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
214 CX_STR("test\xf0\x9f\xaf\xb1" "AA"))
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
215 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
216
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
217 CxJsonValue *mixed2 = cxJsonObjGet(obj, "mixed2");
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
218 CX_TEST_ASSERT(cxJsonIsString(mixed2));
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
219 CX_TEST_ASSERT(0 == cx_strcmp(
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
220 cxJsonAsCxString(mixed2),
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
221 CX_STR("123\u03a3\xf0\x9f\xaf\x85ß"))
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
222 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
223
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
224 cxJsonValueFree(obj);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
225 }
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
226 cxJsonDestroy(&json);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
227 }
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
228
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
229 CX_TEST(test_json_escaped_unicode_malformed) {
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
230 CxJson json;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
231 cxJsonInit(&json, NULL);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
232 CxJsonValue *obj;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
233 CxJsonStatus result;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
234 CX_TEST_DO {
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
235 cxJsonFill(&json, "\"too few \\u123 digits\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
236 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
237 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
238 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
239 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
240 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
241 CX_STR("too few \\u123 digits")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
242 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
243 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
244 cxJsonFill(&json, "\"too many \\u00E456 digits\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
245 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
246 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
247 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
248 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
249 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
250 CX_STR("too many ä56 digits")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
251 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
252 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
253 cxJsonFill(&json, "\"only high \\uD800 surrogate\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
254 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
255 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
256 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
257 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
258 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
259 CX_STR("only high \\uD800 surrogate")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
260 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
261 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
262 cxJsonFill(&json, "\"only low \\uDC00 surrogate\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
263 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
264 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
265 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
266 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
267 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
268 CX_STR("only low \\uDC00 surrogate")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
269 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
270 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
271 cxJsonFill(&json, "\"two high \\uD800\\uD800 surrogates\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
272 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
273 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
274 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
275 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
276 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
277 CX_STR("two high \\uD800\\uD800 surrogates")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
278 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
279 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
280 cxJsonFill(&json, "\"high plus bullshit \\uD800\\u567 foo\"");
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
281 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
282 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
283 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
284 CX_TEST_ASSERT(0 == cx_strcmp(
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
285 cxJsonAsCxString(obj),
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
286 CX_STR("high plus bullshit \\uD800\\u567 foo")
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
287 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
288 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
289 }
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
290 cxJsonDestroy(&json);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
291 }
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
292
1139
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
293 CX_TEST(test_json_escaped_end_of_string) {
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
294 CxJson json;
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
295 cxJsonInit(&json, NULL);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
296 CX_TEST_DO {
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
297 // first test, normal scenario
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
298 cxJsonFill(&json, "\"a \\\"test\\\" string\"");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
299 CxJsonValue *val;
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
300 CxJsonStatus result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
301 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
302 CX_TEST_ASSERT(cxJsonIsString(val));
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
303 CX_TEST_ASSERT(0 == cx_strcmp(
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
304 cxJsonAsCxString(val),
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
305 cx_str("a \"test\" string"))
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
306 );
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
307 cxJsonValueFree(val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
308
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
309 // second test - uncompleted token with hanging escape char
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
310 cxJsonFill(&json, "\"a \\\"test\\");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
311 result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
312 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
313 cxJsonFill(&json, "\" string\"");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
314 result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
315 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
316 CX_TEST_ASSERT(cxJsonIsString(val));
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
317 CX_TEST_ASSERT(0 == cx_strcmp(
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
318 cxJsonAsCxString(val),
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
319 cx_str("a \"test\" string"))
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
320 );
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
321 cxJsonValueFree(val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
322 }
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
323 cxJsonDestroy(&json);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
324 }
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
325
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
326 CX_TEST(test_json_object_incomplete_token) {
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
327 cxstring text = cx_str(
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
328 "{\"message\":\"success\" , \"__timestamp\":1729348561}");
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
329 cxstring parts[16];
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
330 size_t nparts = 0; // split the json text into mulple parts
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
331 for(size_t i=0;i<text.length;i+=4) {
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
332 parts[nparts++] = cx_strsubsl(text, i, 4);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
333 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
334
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
335 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
336 CxJsonStatus result;
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
337
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
338 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
339 cxJsonInit(&json, NULL);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
340 CxJsonValue *obj;
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
341
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
342 size_t part = 0;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
343 while(part < nparts - 1) {
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
344 cxJsonFill(&json, parts[part]);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
345 part++;
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
346 result = cxJsonNext(&json, &obj);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
347 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
348 }
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
349 cxJsonFill(&json, parts[nparts - 1]);
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
350 result = cxJsonNext(&json, &obj);
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
351 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
352 CX_TEST_ASSERT(cxJsonIsObject(obj));
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
353
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
354 CxJsonValue *message = cxJsonObjGet(obj, "message");
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
355 CX_TEST_ASSERT(cxJsonIsString(message));
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
356 CX_TEST_ASSERT(0 == cx_strcmp(
966
1aa7ec3e46e7 treat integers and doubles both as JSON numbers
Mike Becker <universe@uap-core.de>
parents: 946
diff changeset
357 cxJsonAsCxString(message),
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
358 cx_str("success"))
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
359 );
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
360 CxJsonValue *timestamp = cxJsonObjGet(obj, "__timestamp");
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
361 CX_TEST_ASSERT(message->type == CX_JSON_STRING);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
362 CX_TEST_ASSERT(cxJsonIsInteger(timestamp));
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
363 CX_TEST_ASSERT(cxJsonAsInteger(timestamp) == 1729348561);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
364
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
365 // this recursively frees everything else
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
366 cxJsonValueFree(obj);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
367
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
368 // now there is everything read
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
369 result = cxJsonNext(&json, &obj);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
370 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
371
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
372 cxJsonDestroy(&json);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
373 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
374 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
375
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
376 CX_TEST(test_json_token_wrongly_completed) {
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
377 CxTestingAllocator talloc;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
378 cx_testing_allocator_init(&talloc);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
379 const CxAllocator *alloc = &talloc.base;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
380
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
381 cxstring text = cx_str("{\"number\": 47110815!}");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
382 cxstring part1 = cx_strsubsl(text, 0, 16);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
383 cxstring part2 = cx_strsubs(text, 16);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
384
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
385 CX_TEST_DO {
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
386 CxJson json;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
387 cxJsonInit(&json, alloc);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
388
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
389 CxJsonStatus result;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
390 CxJsonValue *obj;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
391
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
392 cxJsonFill(&json, part1);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
393 result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
394 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
395 cxJsonFill(&json, part2);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
396 result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
397 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_NUMBER);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
398 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
399
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
400 cxJsonDestroy(&json);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
401 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
402 }
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
403 cx_testing_allocator_destroy(&talloc);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
404 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
405
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
406 CX_TEST(test_json_subsequent_fill) {
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
407 cxstring text = cx_str(
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
408 "{\"message\":\"success\" , \"__timestamp\":1729348561}");
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
409
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
410 cxstring part1 = cx_strsubsl(text, 0, 25);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
411 cxstring part2 = cx_strsubs(text, 25);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
412
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
413 CX_TEST_DO {
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
414 CxJson json;
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
415 cxJsonInit(&json, NULL);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
416 CxJsonValue *obj;
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
417
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
418 cxJsonFill(&json, part1);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
419 cxJsonFill(&json, part2);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
420 CxJsonStatus result = cxJsonNext(&json, &obj);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
421 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
422 CX_TEST_ASSERT(cxJsonIsObject(obj));
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
423
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
424 CxJsonValue *message = cxJsonObjGet(obj, "message");
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
425 CX_TEST_ASSERT(cxJsonIsString(message));
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
426 CX_TEST_ASSERT(0 == cx_strcmp(
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
427 cxJsonAsCxString(message),
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
428 cx_str("success"))
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
429 );
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
430 CxJsonValue *timestamp = cxJsonObjGet(obj, "__timestamp");
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
431 CX_TEST_ASSERT(message->type == CX_JSON_STRING);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
432 CX_TEST_ASSERT(cxJsonIsInteger(timestamp));
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
433 CX_TEST_ASSERT(cxJsonAsInteger(timestamp) == 1729348561);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
434
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
435 cxJsonValueFree(obj);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
436 result = cxJsonNext(&json, &obj);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
437 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
438
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
439 cxJsonDestroy(&json);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
440 }
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
441 }
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
442
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
443 CX_TEST(test_json_object_error) {
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
444 cxstring text0 = cx_str(
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
445 "{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
446 "\t\"message\":\"success\",\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
447 "\t\"data\":{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
448 "\t\t\"obj\":{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
449 "\t\t\t\"array\": [1, 2, 3, ?syntaxerror? ]\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
450 "\t\t\"}\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
451 "\t},\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
452 "\t\"timestamp\":1729348561,\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
453 "}"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
454 );
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
455 cxstring text1 = cx_str("{ \"string\" }");
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
456 cxstring text2 = cx_str("{ \"a\" : }");
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
457 cxstring text3 = cx_str("{ \"a\" : \"b\" ]");
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
458 cxstring text4 = cx_str("{ \"name\": \"value\" ]");
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
459
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
460 cxstring tests[] = { text0, text1, text2, text3, text4 };
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
461 CxJsonStatus errors[] = {
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
462 CX_JSON_FORMAT_ERROR_NUMBER,
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
463 CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN,
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
464 CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN,
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
465 CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN,
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
466 CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
467 };
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
468
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
469 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
470 CxJsonStatus result;
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
471 CxJson json;
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
472 CxJsonValue *obj = NULL;
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
473
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
474 for(int i=0;i<5;i++) {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
475 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
476 cxJsonFill(&json, tests[i]);
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
477 result = cxJsonNext(&json, &obj);
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
478
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
479 CX_TEST_ASSERT(result == errors[i]);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
480 CX_TEST_ASSERT(obj != NULL && obj->type == CX_JSON_NOTHING);
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
481 cxJsonDestroy(&json);
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
482 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
483 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
484 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
485
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
486 CX_TEST(test_json_large_nesting_depth) {
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
487 CxJson json;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
488 CxJsonValue *d1;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
489 cxstring text = cx_str("{\"test\": [{},{\"foo\": [[{\"bar\":[4, 2, [null, {\"key\": 47}]]}]]}]}");
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
490 CX_TEST_DO {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
491 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
492 cxJsonFill(&json, text);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
493 cxJsonNext(&json, &d1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
494
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
495 CX_TEST_ASSERT(d1 != NULL);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
496 CX_TEST_ASSERT(cxJsonIsObject(d1));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
497 CxJsonValue *d2 = cxJsonObjGet(d1, "test");
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
498 CX_TEST_ASSERT(cxJsonIsArray(d2));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
499 CX_TEST_ASSERT(cxJsonArrSize(d2) == 2);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
500 CxJsonValue *d3 = cxJsonArrGet(d2, 1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
501 CX_TEST_ASSERT(cxJsonIsObject(d3));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
502 CxJsonValue *d4 = cxJsonObjGet(d3, "foo");
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
503 CX_TEST_ASSERT(cxJsonIsArray(d4));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
504 CX_TEST_ASSERT(cxJsonArrSize(d4) == 1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
505 CxJsonValue *d5 = cxJsonArrGet(d4, 0);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
506 CX_TEST_ASSERT(cxJsonIsArray(d5));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
507 CX_TEST_ASSERT(cxJsonArrSize(d5) == 1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
508 CxJsonValue *d6 = cxJsonArrGet(d5, 0);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
509 CX_TEST_ASSERT(cxJsonIsObject(d6));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
510 CxJsonValue *d7 = cxJsonObjGet(d6, "bar");
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
511 CX_TEST_ASSERT(cxJsonIsArray(d7));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
512 CX_TEST_ASSERT(cxJsonArrSize(d7) == 3);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
513 CxJsonValue *d8 = cxJsonArrGet(d7, 2);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
514 CX_TEST_ASSERT(cxJsonIsArray(d8));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
515 CX_TEST_ASSERT(cxJsonArrSize(d8) == 2);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
516 CxJsonValue *d9a = cxJsonArrGet(d8, 0);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
517 CX_TEST_ASSERT(cxJsonIsNull(d9a));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
518 CxJsonValue *d9b = cxJsonArrGet(d8, 1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
519 CX_TEST_ASSERT(cxJsonIsObject(d9b));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
520 CxJsonValue *d10 = cxJsonObjGet(d9b, "key");
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
521 CX_TEST_ASSERT(cxJsonIsInteger(d10));
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
522 CX_TEST_ASSERT(cxJsonAsInteger(d10) == 47);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
523
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
524 CX_TEST_ASSERT(json.states != json.states_internal);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
525 CX_TEST_ASSERT(json.states_capacity > cx_nmemb(json.states_internal));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
526
978
1da52af18ac3 fix memory leaks in json tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 977
diff changeset
527 cxJsonValueFree(d1);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
528 cxJsonDestroy(&json);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
529 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
530 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
531
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
532 CX_TEST(test_json_number) {
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
533 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
534 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
535 CX_TEST_DO {
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
536 CxJsonValue *v;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
537 CxJsonStatus result;
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
538
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
539 cxJsonFill(&json, "3.1415 ");
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
540 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
541 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
542 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
543 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(v), 3.1415));
978
1da52af18ac3 fix memory leaks in json tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 977
diff changeset
544 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
545
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
546 cxJsonFill(&json, "-47.11e2 ");
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
547 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
548 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
549 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
550 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(v), -4711.0));
978
1da52af18ac3 fix memory leaks in json tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 977
diff changeset
551 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
552
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
553 cxJsonFill(&json, "0.815e-3 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
554 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
555 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
556 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
557 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(v), 0.000815));
1032
aaad28e23dac fix memory leaks in json tests
Mike Becker <universe@uap-core.de>
parents: 1015
diff changeset
558 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
559
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
560 cxJsonFill(&json, "1.23E4 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
561 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
562 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
563 CX_TEST_ASSERT(cxJsonIsNumber(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
564 CX_TEST_ASSERT(cxJsonAsInteger(v) == 12300);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
565 CX_TEST_ASSERT(cxJsonAsDouble(v) == 12300.0);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
566 cxJsonValueFree(v);
1060
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
567
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
568 cxJsonFill(&json, "18446744073709551615.0123456789 ");
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
569 result = cxJsonNext(&json, &v);
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
570 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
571 CX_TEST_ASSERT(cxJsonIsNumber(v));
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
572 // be as precise as possible
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
573 // TODO: this might produce format error / out of range in future implementations
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
574 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(v), 1.8446744073709552e+19));
1060
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
575 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
576 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
577 cxJsonDestroy(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
578 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
579
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
580 CX_TEST(test_json_number_format_errors) {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
581 CxJson json;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
582 cxJsonInit(&json, NULL);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
583 CX_TEST_DO {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
584 CxJsonValue *v;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
585 CxJsonStatus result;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
586
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
587 cxJsonFill(&json, "+3.1415 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
588 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
589 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
590 "leading plus is not RFC-8259 compliant");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
591 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
592 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
593
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
594 cxJsonFill(&json, "0.815e-3.0 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
595 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
596 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
597 "exponent must be an integer");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
598 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
599 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
600
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
601 cxJsonFill(&json, "3.14e ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
602 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
603 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
604 "exponent cannot be empty");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
605 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
606 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
607
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
608 cxJsonFill(&json, "3.14e~7 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
609 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
610 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
611 "exponent cannot start with bullshit");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
612 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
613 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
614
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
615 cxJsonFill(&json, "1.23e4f ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
616 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
617 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
618 "non-digits in exponent");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
619 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
620 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
621
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
622 cxJsonFill(&json, "1.23f ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
623 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
624 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
625 "non-digits in value");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
626 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
627 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
628
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
629 cxJsonFill(&json, "1.23.45 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
630 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
631 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
632 "multiple decimal separators");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
633 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
634 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
635
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
636 cxJsonFill(&json, "184467440737095516150123456789 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
637 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
638 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
639 "30 digit int does not fit into 64-bit int");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
640 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
641 cxJsonReset(&json);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
642 }
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
643 cxJsonDestroy(&json);
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
644 }
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
645
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
646 CX_TEST(test_json_multiple_values) {
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
647 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
648 cxJsonInit(&json, NULL);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
649 CX_TEST_DO {
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
650 CxJsonValue *v;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
651 CxJsonStatus result;
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
652
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
653 // read number
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
654 cxJsonFill(&json, "10\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
655 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
656 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
657 CX_TEST_ASSERT(cxJsonIsNumber(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
658 CX_TEST_ASSERT(cxJsonAsInteger(v) == 10);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
659 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
660 // read remaining '\n'
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
661 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
662 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
663 // read string
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
664 cxJsonFill(&json, "\"hello world\"\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
665 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
666 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
667 CX_TEST_ASSERT(cxJsonIsString(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
668 CX_TEST_ASSERT(!cx_strcmp(cxJsonAsCxString(v), CX_STR("hello world")));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
669 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
670 // don't process the remaining newline this time
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
671 // read obj
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
672 cxJsonFill(&json, "{ \"value\": \"test\" }\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
673 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
674 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
675 CX_TEST_ASSERT(cxJsonIsObject(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
676 CxJsonValue *value = cxJsonObjGet(v, "value");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
677 CX_TEST_ASSERT(cxJsonAsString(value));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
678 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
679 // read array
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
680 cxJsonFill(&json, "[ 0, 1, 2, 3, 4, 5 ]\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
681 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
682 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
683 CX_TEST_ASSERT(cxJsonIsArray(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
684 CxJsonValue *a0 = cxJsonArrGet(v, 0);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
685 CxJsonValue *a3 = cxJsonArrGet(v, 3);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
686 CX_TEST_ASSERT(cxJsonIsNumber(a0));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
687 CX_TEST_ASSERT(cxJsonAsInteger(a0) == 0);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
688 CX_TEST_ASSERT(cxJsonIsNumber(a3));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
689 CX_TEST_ASSERT(cxJsonAsInteger(a3) == 3);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
690 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
691 // read literal
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
692 cxJsonFill(&json, "true\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
693 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
694 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
695 CX_TEST_ASSERT(cxJsonIsLiteral(v));
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
696 CX_TEST_ASSERT(cxJsonIsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
697 CX_TEST_ASSERT(cxJsonIsTrue(v));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
698 CX_TEST_ASSERT(cxJsonAsBool(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
699 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
700 cxJsonFill(&json, "false\n");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
701 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
702 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
703 CX_TEST_ASSERT(cxJsonIsLiteral(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
704 CX_TEST_ASSERT(cxJsonIsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
705 CX_TEST_ASSERT(cxJsonIsFalse(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
706 CX_TEST_ASSERT(!cxJsonAsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
707 cxJsonValueFree(v);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
708 cxJsonFill(&json, "null\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
709 result = cxJsonNext(&json, &v);
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
710 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
711 CX_TEST_ASSERT(cxJsonIsLiteral(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
712 CX_TEST_ASSERT(!cxJsonIsBool(v));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
713 CX_TEST_ASSERT(cxJsonIsNull(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
714 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
715 }
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
716 cxJsonDestroy(&json);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
717 }
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
718
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
719 CX_TEST(test_json_array_iterator) {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
720 CxJson json;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
721 cxJsonInit(&json, NULL);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
722 CX_TEST_DO {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
723 CxJsonValue *v;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
724 CxJsonStatus result;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
725 cxJsonFill(&json, "[ 0, 3, 6, 9, 12, 15 ]\n");
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
726 result = cxJsonNext(&json, &v);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
727 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
728 CX_TEST_ASSERT(cxJsonIsArray(v));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
729 CxIterator iter = cxJsonArrIter(v);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
730 unsigned i = 0;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
731 cx_foreach(CxJsonValue*, elem, iter) {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
732 CX_TEST_ASSERT(cxJsonIsNumber(elem));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
733 CX_TEST_ASSERT(i == cxJsonAsInteger(elem));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
734 i += 3;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
735 }
1051
7d17bd1103d7 fix another missing free() in json tests
Mike Becker <universe@uap-core.de>
parents: 1033
diff changeset
736 cxJsonValueFree(v);
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
737 }
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
738 cxJsonDestroy(&json);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
739 }
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
740
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
741 CX_TEST(test_json_allocator) {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
742 CxTestingAllocator talloc;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
743 cx_testing_allocator_init(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
744 CxAllocator *allocator = &talloc.base;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
745
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
746 cxstring text = cx_str(
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
747 "{\n"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
748 "\t\"message\":\"success\",\n"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
749 "\t\"data\":[\"value1\",{\"x\":123, \"y\":523 }]\n"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
750 "}"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
751 );
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
752
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
753 CX_TEST_DO {
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
754 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
755 cxJsonInit(&json, allocator);
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
756 cxJsonFill(&json, text);
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
757
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
758 CxJsonValue *obj;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
759 CxJsonStatus result = cxJsonNext(&json, &obj);
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
760 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
761 CX_TEST_ASSERT(obj->allocator == allocator);
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
762
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
763 // this recursively frees everything
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
764 cxJsonValueFree(obj);
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
765 cxJsonDestroy(&json);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
766
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
767 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
768 }
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
769 cx_testing_allocator_destroy(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
770 }
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
771
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
772 CX_TEST(test_json_allocator_parse_error) {
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
773 CxTestingAllocator talloc;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
774 cx_testing_allocator_init(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
775 CxAllocator *allocator = &talloc.base;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
776
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
777 cxstring text = cx_str(
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
778 "{\n"
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
779 "\t\"message\":\"success\"\n" // <-- missing comma
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
780 "\t\"data\":[\"value1\",{\"x\":123, \"y\":523 }]\n"
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
781 "}"
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
782 );
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
783
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
784 CX_TEST_DO {
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
785 CxJson json;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
786 cxJsonInit(&json, allocator);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
787 cxJsonFill(&json, text);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
788
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
789 CxJsonValue *obj = NULL;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
790 CxJsonStatus result = cxJsonNext(&json, &obj);
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
791 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
792 CX_TEST_ASSERT(obj != NULL && obj->type == CX_JSON_NOTHING);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
793
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
794 // clean-up any left-over memory
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
795 cxJsonDestroy(&json);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
796
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
797 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
798 }
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
799 cx_testing_allocator_destroy(&talloc);
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
800 }
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
801
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
802 CX_TEST(test_json_create_value) {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
803 CxTestingAllocator talloc;
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
804 cx_testing_allocator_init(&talloc);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
805 CxAllocator *allocator = &talloc.base;
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
806 CX_TEST_DO {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
807 /*
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
808 * This is the value we want to create in this test:
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
809 *
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
810 * {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
811 * "bool": false,
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
812 * "int": 47,
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
813 * "strings": [ "hello", "world" ],
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
814 * "nested": {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
815 * "string": "test",
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
816 * "floats": [ 3.1415, 47.11, 8.15 ],
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
817 * "ints": [ 4, 8, 15, 16, 23, 42 ],
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
818 * "literals": [ true, null, false ]
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
819 * }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
820 * }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
821 */
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
822
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
823
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
824 // create the object
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
825 CxJsonValue *obj = cxJsonCreateObj(allocator);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
826 CX_TEST_ASSERT(obj != NULL);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
827 CX_TEST_ASSERT(cxJsonIsObject(obj));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
828 CX_TEST_ASSERT(obj->allocator == allocator);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
829
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
830 // add the members
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
831 {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
832 cxJsonObjPutLiteral(obj, CX_STR("bool"), CX_JSON_FALSE);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
833 cxJsonObjPutInteger(obj, CX_STR("int"), 47);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
834 CxJsonValue *strings = cxJsonObjPutArr(obj, CX_STR("strings"));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
835 CX_TEST_ASSERT(strings != NULL);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
836 CX_TEST_ASSERT(cxJsonIsArray(strings));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
837 const char* str[] = {"hello", "world"};
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
838 CX_TEST_ASSERT(0 == cxJsonArrAddStrings(strings, str, 2));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
839
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
840 CxJsonValue *nested = cxJsonObjPutObj(obj, CX_STR("nested"));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
841 CX_TEST_ASSERT(nested != NULL);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
842 CX_TEST_ASSERT(cxJsonIsObject(nested));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
843 cxJsonObjPutCxString(nested, CX_STR("string"), CX_STR("test"));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
844
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
845 cxJsonArrAddNumbers(cxJsonObjPutArr(nested, CX_STR("floats")),
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
846 (double[]){3.1415, 47.11, 8.15}, 3);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
847 cxJsonArrAddIntegers(cxJsonObjPutArr(nested, CX_STR("ints")),
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
848 (int64_t[]){4, 8, 15, 16, 23, 42}, 6);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
849 cxJsonArrAddLiterals(cxJsonObjPutArr(nested, CX_STR("literals")),
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
850 (CxJsonLiteral[]){CX_JSON_TRUE, CX_JSON_NULL, CX_JSON_FALSE}, 3);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
851 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
852
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
853 // verify the contents
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
854 {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
855 CX_TEST_ASSERT(cxJsonIsFalse(cxJsonObjGet(obj, "bool")));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
856 CX_TEST_ASSERT(47 == cxJsonAsInteger(cxJsonObjGet(obj, "int")));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
857 CxJsonValue *strings = cxJsonObjGet(obj, "strings");
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
858 CX_TEST_ASSERT(cxJsonIsArray(strings));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
859 CX_TEST_ASSERT(2 == cxJsonArrSize(strings));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
860 CX_TEST_ASSERT(0 == cx_strcmp(CX_STR("hello"), cxJsonAsCxString(cxJsonArrGet(strings, 0))));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
861 CX_TEST_ASSERT(0 == cx_strcmp(CX_STR("world"), cxJsonAsCxString(cxJsonArrGet(strings, 1))));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
862
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
863 CxJsonValue *nested = cxJsonObjGet(obj, "nested");
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
864 CX_TEST_ASSERT(cxJsonIsObject(nested));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
865 CX_TEST_ASSERT(0 == strcmp("test", cxJsonAsString(cxJsonObjGet(nested, "string"))));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
866 CxJsonValue *floats = cxJsonObjGet(nested, "floats");
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
867 CX_TEST_ASSERT(cxJsonIsArray(floats));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
868 CX_TEST_ASSERT(3 == cxJsonArrSize(floats));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
869 CX_TEST_ASSERT(3.1415 == cxJsonAsDouble(cxJsonArrGet(floats, 0)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
870 CX_TEST_ASSERT(47.11 == cxJsonAsDouble(cxJsonArrGet(floats, 1)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
871 CX_TEST_ASSERT(8.15 == cxJsonAsDouble(cxJsonArrGet(floats, 2)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
872 CxJsonValue *ints = cxJsonObjGet(nested, "ints");
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
873 CX_TEST_ASSERT(cxJsonIsArray(ints));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
874 CX_TEST_ASSERT(6 == cxJsonArrSize(ints));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
875 CX_TEST_ASSERT(4 == cxJsonAsInteger(cxJsonArrGet(ints, 0)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
876 CX_TEST_ASSERT(8 == cxJsonAsInteger(cxJsonArrGet(ints, 1)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
877 CX_TEST_ASSERT(15 == cxJsonAsInteger(cxJsonArrGet(ints, 2)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
878 CX_TEST_ASSERT(16 == cxJsonAsInteger(cxJsonArrGet(ints, 3)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
879 CX_TEST_ASSERT(23 == cxJsonAsInteger(cxJsonArrGet(ints, 4)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
880 CX_TEST_ASSERT(42 == cxJsonAsInteger(cxJsonArrGet(ints, 5)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
881 CxJsonValue *literals = cxJsonObjGet(nested, "literals");
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
882 CX_TEST_ASSERT(cxJsonIsArray(literals));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
883 CX_TEST_ASSERT(3 == cxJsonArrSize(literals));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
884 CX_TEST_ASSERT(cxJsonIsTrue(cxJsonArrGet(literals, 0)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
885 CX_TEST_ASSERT(cxJsonIsNull(cxJsonArrGet(literals, 1)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
886 CX_TEST_ASSERT(cxJsonIsFalse(cxJsonArrGet(literals, 2)));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
887 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
888
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
889 // destroy the value and verify the allocations
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
890 cxJsonValueFree(obj);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
891 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
892 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
893 cx_testing_allocator_destroy(&talloc);
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
894 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
895
1072
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
896
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
897 CX_TEST_SUBROUTINE(test_json_write_sub,
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
898 const CxAllocator *allocator,
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
899 cxstring expected,
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
900 const CxJsonWriter *writer
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
901 ) {
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
902 // create the value
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
903 CxJsonValue *obj = cxJsonCreateObj(allocator);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
904 cxJsonObjPutLiteral(obj, CX_STR("bool"), CX_JSON_FALSE);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
905 cxJsonObjPutNumber(obj, CX_STR("int"), 47); // purposely use PutNumber to put an int
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
906 CxJsonValue *strings = cxJsonObjPutArr(obj, CX_STR("strings"));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
907 cxJsonArrAddCxStrings(strings, (cxstring[]) {CX_STR("hello"), CX_STR("world")}, 2);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
908 CxJsonValue *nested = cxJsonObjPutObj(obj, CX_STR("nested"));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
909 CxJsonValue *objects = cxJsonObjPutArr(nested, CX_STR("objects"));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
910 CxJsonValue *obj_in_arr[2] = {cxJsonCreateObj(allocator), cxJsonCreateObj(allocator)};
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
911 cxJsonObjPutInteger(obj_in_arr[0], CX_STR("name1"), 1);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
912 cxJsonObjPutInteger(obj_in_arr[0], CX_STR("name2"), 3);
1082
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
913 cxJsonObjPutInteger(obj_in_arr[1], CX_STR("name2"), 7);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
914 cxJsonObjPutInteger(obj_in_arr[1], CX_STR("name1"), 3);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
915 cxJsonArrAddValues(objects, obj_in_arr, 2);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
916 cxJsonArrAddNumbers(cxJsonObjPutArr(nested, CX_STR("floats")),
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
917 (double[]){3.1415, 47.11, 8.15}, 3);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
918 cxJsonArrAddLiterals(cxJsonObjPutArr(nested, CX_STR("literals")),
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
919 (CxJsonLiteral[]){CX_JSON_TRUE, CX_JSON_NULL, CX_JSON_FALSE}, 3);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
920 CxJsonValue *ints = cxJsonObjPutArr(nested, CX_STR("ints"));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
921 cxJsonArrAddIntegers(ints, (int64_t[]){4, 8, 15}, 3);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
922 CxJsonValue *nested_array = cxJsonCreateArr(allocator);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
923 cxJsonArrAddValues(ints, &nested_array, 1);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
924 cxJsonArrAddIntegers(nested_array, (int64_t[]){16, 23}, 2);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
925 cxJsonArrAddIntegers(ints, (int64_t[]){42}, 1);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
926
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
927 // write it to a buffer
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
928 CxBuffer buf;
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
929 cxBufferInit(&buf, NULL, 512, NULL, CX_BUFFER_DEFAULT);
1112
22dc2163fffd add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents: 1082
diff changeset
930 int result = cxJsonWrite(&buf, obj, cxBufferWriteFunc, writer);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
931 cxBufferTerminate(&buf); // makes debugging easier
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
932 CX_TEST_ASSERT(result == 0);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
933
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
934 // compare the string
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
935 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), expected));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
936
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
937 // destroy everything
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
938 cxBufferDestroy(&buf);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
939 cxJsonValueFree(obj);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
940 }
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
941
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
942 CX_TEST(test_json_write_default_format) {
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
943 CxTestingAllocator talloc;
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
944 cx_testing_allocator_init(&talloc);
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
945 CxAllocator *allocator = &talloc.base;
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
946 CX_TEST_DO {
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
947 // expected value
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
948 cxstring expected = CX_STR(
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
949 "{\"bool\":false,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
950 "\"int\":47,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
951 "\"nested\":{"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
952 "\"floats\":[3.1415,47.11,8.15],"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
953 "\"ints\":[4,8,15,[16,23],42],"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
954 "\"literals\":[true,null,false],"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
955 "\"objects\":[{"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
956 "\"name1\":1,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
957 "\"name2\":3"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
958 "},{"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
959 "\"name1\":3,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
960 "\"name2\":7"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
961 "}]"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
962 "},"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
963 "\"strings\":[\"hello\",\"world\"]"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
964 "}"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
965 );
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
966
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
967 CxJsonWriter writer = cxJsonWriterCompact();
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
968 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
969 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
970 }
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
971 cx_testing_allocator_destroy(&talloc);
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
972 }
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
973
1078
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
974 CX_TEST(test_json_write_pretty_default_spaces) {
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
975 CxTestingAllocator talloc;
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
976 cx_testing_allocator_init(&talloc);
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
977 CxAllocator *allocator = &talloc.base;
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
978 CX_TEST_DO {
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
979 cxstring expected = CX_STR(
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
980 "{\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
981 " \"bool\": false,\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
982 " \"int\": 47,\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
983 " \"nested\": {\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
984 " \"floats\": [3.1415, 47.11, 8.15],\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
985 " \"ints\": [4, 8, 15, [16, 23], 42],\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
986 " \"literals\": [true, null, false],\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
987 " \"objects\": [{\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
988 " \"name1\": 1,\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
989 " \"name2\": 3\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
990 " }, {\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
991 " \"name1\": 3,\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
992 " \"name2\": 7\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
993 " }]\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
994 " },\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
995 " \"strings\": [\"hello\", \"world\"]\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
996 "}"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
997 );
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
998
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
999 CxJsonWriter writer = cxJsonWriterPretty(true);
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1000 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1001 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1002 }
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1003 cx_testing_allocator_destroy(&talloc);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1004 }
1078
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1005
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1006 CX_TEST(test_json_write_pretty_default_tabs) {
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1007 CxTestingAllocator talloc;
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1008 cx_testing_allocator_init(&talloc);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1009 CxAllocator *allocator = &talloc.base;
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1010 CX_TEST_DO {
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1011 cxstring expected = CX_STR(
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1012 "{\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1013 "\t\"bool\": false,\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1014 "\t\"int\": 47,\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1015 "\t\"nested\": {\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1016 "\t\t\"floats\": [3.1415, 47.11, 8.15],\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1017 "\t\t\"ints\": [4, 8, 15, [16, 23], 42],\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1018 "\t\t\"literals\": [true, null, false],\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1019 "\t\t\"objects\": [{\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1020 "\t\t\t\"name1\": 1,\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1021 "\t\t\t\"name2\": 3\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1022 "\t\t}, {\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1023 "\t\t\t\"name1\": 3,\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1024 "\t\t\t\"name2\": 7\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1025 "\t\t}]\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1026 "\t},\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1027 "\t\"strings\": [\"hello\", \"world\"]\n"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1028 "}"
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1029 );
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1030 CxJsonWriter writer = cxJsonWriterPretty(false);
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1031 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
1072
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1032 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1033 }
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1034 cx_testing_allocator_destroy(&talloc);
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1035 }
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1036
1082
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1037 CX_TEST(test_json_write_pretty_preserve_order) {
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1038 CxTestingAllocator talloc;
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1039 cx_testing_allocator_init(&talloc);
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1040 CxAllocator *allocator = &talloc.base;
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1041 CX_TEST_DO {
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1042 cxstring expected = CX_STR(
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1043 "{\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1044 " \"bool\": false,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1045 " \"int\": 47,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1046 " \"strings\": [\"hello\", \"world\"],\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1047 " \"nested\": {\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1048 " \"objects\": [{\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1049 " \"name1\": 1,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1050 " \"name2\": 3\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1051 " }, {\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1052 " \"name2\": 7,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1053 " \"name1\": 3\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1054 " }],\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1055 " \"floats\": [3.1415, 47.11, 8.15],\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1056 " \"literals\": [true, null, false],\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1057 " \"ints\": [4, 8, 15, [16, 23], 42]\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1058 " }\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1059 "}"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1060 );
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1061
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1062 CxJsonWriter writer = cxJsonWriterPretty(true);
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1063 writer.sort_members = false;
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1064 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1065 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1066 }
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1067 cx_testing_allocator_destroy(&talloc);
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1068 }
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1069
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1070 CX_TEST(test_json_write_frac_max_digits) {
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1071 CxJsonValue* num = cxJsonCreateNumber(NULL, 3.141592653589793);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1072 CxJsonWriter writer = cxJsonWriterCompact();
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1073 CxBuffer buf;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1074 cxBufferInit(&buf, NULL, 32, NULL, 0);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1075 CX_TEST_DO {
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1076 // test default settings (6 digits)
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1077 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1078 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1079
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1080 // test too many digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1081 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1082 writer.frac_max_digits = 200;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1083 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1084 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592653589793")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1085
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1086 // test 0 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1087 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1088 writer.frac_max_digits = 0;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1089 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1090 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1091
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1092 // test 2 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1093 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1094 writer.frac_max_digits = 2;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1095 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1096 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.14")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1097
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1098 // test 3 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1099 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1100 writer.frac_max_digits = 3;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1101 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1102 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1103
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1104 // test 6 digits, but two are left of the decimal point
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1105 num->value.number = 47.110815;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1106 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1107 writer.frac_max_digits = 6;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1108 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1109 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("47.110815")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1110
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1111 // test 4 digits with exponent
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1112 num->value.number = 5.11223344e23;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1113 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1114 writer.frac_max_digits = 4;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1115 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1116 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("5.1122e+23")));
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1117 }
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1118 cxBufferDestroy(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1119 cxJsonValueFree(num);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1120 }
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1121
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1122 CX_TEST(test_json_write_string_escape) {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1123 /**
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1124 * According to RFC-8259 we have to test the following characters:
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1125 * " quotation mark
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1126 * \ reverse solidus
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1127 * / solidus ---> we make this optional, see test_json_write_solidus
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1128 * b backspace
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1129 * f form feed
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1130 * n line feed
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1131 * r carriage return
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1132 * t tab
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1133 * And all other control characters must be encoded uXXXX - in our example the bell character.
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1134 * Also, all unicode characters are encoded that way - in our example the 'ö'.
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1135 */
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1136 CxJsonValue* str = cxJsonCreateString(NULL,
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1137 "hello\twörld\r\nthis is\\a \"string\"\b in \a string\f");
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1138 CxJsonWriter writer = cxJsonWriterCompact();
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1139 CxBuffer buf;
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1140 cxBufferInit(&buf, NULL, 128, NULL, 0);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1141 CX_TEST_DO {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1142 cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1143 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size),
1130
5bcb725119b6 fix wrong accidental unicode escaping
Mike Becker <universe@uap-core.de>
parents: 1123
diff changeset
1144 CX_STR("\"hello\\twörld\\r\\nthis is\\\\a \\\"string\\\"\\b in \\u0007 string\\f\"")));
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1145 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1146 cxBufferDestroy(&buf);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1147 cxJsonValueFree(str);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1148 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1149
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1150 CX_TEST(test_json_write_name_escape) {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1151 CxJsonValue* obj = cxJsonCreateObj(NULL);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1152 cxJsonObjPutLiteral(obj,
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1153 CX_STR("hello\twörld\r\nthis is\\a \"string\"\b in \a string\f"), CX_JSON_TRUE);
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1154 CxJsonWriter writer = cxJsonWriterCompact();
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1155 CxBuffer buf;
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1156 cxBufferInit(&buf, NULL, 128, NULL, 0);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1157 CX_TEST_DO {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1158 cxJsonWrite(&buf, obj, cxBufferWriteFunc, &writer);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1159 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size),
1130
5bcb725119b6 fix wrong accidental unicode escaping
Mike Becker <universe@uap-core.de>
parents: 1123
diff changeset
1160 CX_STR("{\"hello\\twörld\\r\\nthis is\\\\a \\\"string\\\"\\b in \\u0007 string\\f\":true}")));
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1161 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1162 cxBufferDestroy(&buf);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1163 cxJsonValueFree(obj);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1164 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1165
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1166 CX_TEST(test_json_write_solidus) {
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1167 CxJsonValue* str = cxJsonCreateString(NULL,"test/solidus");
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1168 CxJsonWriter writer = cxJsonWriterCompact();
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1169 CxBuffer buf;
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1170 cxBufferInit(&buf, NULL, 16, NULL, 0);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1171 CX_TEST_DO {
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1172 // default: do not escape
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1173 cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1174 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("\"test/solidus\"")));
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1175
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1176 // enable escaping
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1177 writer.escape_slash = true;
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1178 cxBufferReset(&buf);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1179 cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1180 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("\"test\\/solidus\"")));
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1181 }
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1182 cxBufferDestroy(&buf);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1183 cxJsonValueFree(str);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1184 }
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1185
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1186 CxTestSuite *cx_test_suite_json(void) {
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1187 CxTestSuite *suite = cx_test_suite_new("json");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1188
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
1189 cx_test_register(suite, test_json_init_default);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1190 cx_test_register(suite, test_json_simple_object);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1191 cx_test_register(suite, test_json_escaped_strings);
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
1192 cx_test_register(suite, test_json_escaped_unicode_strings);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
1193 cx_test_register(suite, test_json_escaped_unicode_malformed);
1139
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
1194 cx_test_register(suite, test_json_escaped_end_of_string);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
1195 cx_test_register(suite, test_json_object_incomplete_token);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1196 cx_test_register(suite, test_json_token_wrongly_completed);
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
1197 cx_test_register(suite, test_json_object_error);
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
1198 cx_test_register(suite, test_json_subsequent_fill);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
1199 cx_test_register(suite, test_json_large_nesting_depth);
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
1200 cx_test_register(suite, test_json_number);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1201 cx_test_register(suite, test_json_number_format_errors);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1202 cx_test_register(suite, test_json_multiple_values);
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1203 cx_test_register(suite, test_json_array_iterator);
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1204 cx_test_register(suite, test_json_allocator);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1205 cx_test_register(suite, test_json_allocator_parse_error);
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1206 cx_test_register(suite, test_json_create_value);
1072
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1207 cx_test_register(suite, test_json_write_default_format);
1078
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1208 cx_test_register(suite, test_json_write_pretty_default_spaces);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1209 cx_test_register(suite, test_json_write_pretty_default_tabs);
1082
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1210 cx_test_register(suite, test_json_write_pretty_preserve_order);
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1211 cx_test_register(suite, test_json_write_frac_max_digits);
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1212 cx_test_register(suite, test_json_write_string_escape);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1213 cx_test_register(suite, test_json_write_name_escape);
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1214 cx_test_register(suite, test_json_write_solidus);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1215
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1216 return suite;
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1217 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1218

mercurial