tests/test_json.c

Sun, 14 Dec 2025 11:45:43 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 14 Dec 2025 11:45:43 +0100
changeset 1596
2d2c4ec38133
parent 1595
2e0353a9bc30
child 1597
be79be26b01d
permissions
-rw-r--r--

fix unexpected token error when parsing an empty json array

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
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
35 #include <math.h>
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
36
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
37 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
38 CxJson json;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
39 CX_TEST_DO {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
40 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
41 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
42 CX_TEST_ASSERT(json.states_size == 1);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
43 CX_TEST_ASSERT(json.states_capacity >= 8);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
44 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
45 CX_TEST_ASSERT(json.vbuf_size == 0);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
46 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
47 cxJsonDestroy(&json);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
48 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
49 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
50
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 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
52 cxstring text = cx_str(
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 "{\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 "\t\"message\":\"success\",\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 "\t\"position\":{\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 "\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
57 "\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
58 "\t},\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 "\t\"timestamp\":1729348561,\n"
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 "\t\"alive\":true\n"
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 );
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
65 CxJsonStatus result;
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
68 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
69 cxJsonFill(&json, text);
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 // parse the big fat object
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 CxJsonValue *obj;
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 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
74 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
75
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 // check the contents
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 CX_TEST_ASSERT(cxJsonIsObject(obj));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 CxJsonValue *message = cxJsonObjGet(obj, "message");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 CX_TEST_ASSERT(cxJsonIsString(message));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 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
82 cxJsonAsCxString(message),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
83 "success")
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 );
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 CxJsonValue *position = cxJsonObjGet(obj, "position");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 CX_TEST_ASSERT(cxJsonIsObject(position));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 CxJsonValue *longitude = cxJsonObjGet(position, "longitude");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 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
90 CX_TEST_ASSERT(!cxJsonIsInteger(longitude));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
91 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
92 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
93 CxJsonValue *latitude = cxJsonObjGet(position, "latitude");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 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
95 CX_TEST_ASSERT(!cxJsonIsInteger(latitude));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
96 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
97 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
98
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 CxJsonValue *timestamp = cxJsonObjGet(obj, "timestamp");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 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
101 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
102 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
103 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
104
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 CxJsonValue *alive = cxJsonObjGet(obj, "alive");
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 CX_TEST_ASSERT(cxJsonIsBool(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 CX_TEST_ASSERT(cxJsonIsTrue(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 CX_TEST_ASSERT(!cxJsonIsFalse(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 CX_TEST_ASSERT(cxJsonAsBool(alive));
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 // this recursively frees everything else
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 cxJsonValueFree(obj);
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 // 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
115 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
116 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
117
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 cxJsonDestroy(&json);
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
122 CX_TEST(test_json_large_object) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
123 CxJsonValue *obj = cxJsonCreateObj(NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
124 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
125 cxJsonObjPutString(obj, "mystring", "test");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
126 char buf[10];
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
127 for (unsigned i = 0 ; i < 300 ; i++) {
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
128 snprintf(buf, 10, "key %d", i);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
129 cxJsonObjPutInteger(obj, buf, i);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
130 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
131 CX_TEST_ASSERT(301 == cxJsonObjSize(obj));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
132 // some samples
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
133 CxJsonValue *v;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
134 v = cxJsonObjGet(obj, "key 64");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
135 CX_TEST_ASSERT(cxJsonIsInteger(v));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
136 CX_TEST_ASSERT(cxJsonAsInteger(v) == 64);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
137 v = cxJsonObjGet(obj, "key 228");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
138 CX_TEST_ASSERT(cxJsonIsInteger(v));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
139 CX_TEST_ASSERT(cxJsonAsInteger(v) == 228);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
140
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
141 v = cxJsonObjGet(obj, "mystring");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
142 CX_TEST_ASSERT(cxJsonIsString(v));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
143 CX_TEST_ASSERT(0 == cx_strcmp(cxJsonAsCxMutStr(v), "test"));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
144 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
145 cxJsonValueFree(obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
146 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
147
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
148 CX_TEST(test_json_simple_array) {
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
149 cxstring empty_array = cx_str("[]");
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
150 cxstring int_array = cx_str("[ 0, 1, 2 ]");
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
151 cxstring str_array = cx_str("[ \"str1\", \"str2\" ]");
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
152 cxstring mixed_array = cx_str("[ true, false, 12, { \"a\": \"b\" }, [ 1,2,3,4] ]");
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
153
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
154 CxJsonValue *value;
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
155 CxJsonStatus result;
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
156 CxJson json0, json1, json2, json3;
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
157
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
158 CX_TEST_DO {
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
159 // empty array
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
160 cxJsonInit(&json0, NULL);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
161 cxJsonFill(&json0, empty_array);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
162 result = cxJsonNext(&json0, &value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
163 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
164 CX_TEST_ASSERT(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
165 CX_TEST_ASSERT(cxJsonIsArray(value));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
166
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
167 cxJsonValueFree(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
168 cxJsonDestroy(&json0);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
169
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
170 // int array
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
171 cxJsonInit(&json1, NULL);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
172 cxJsonFill(&json1, int_array);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
173 result = cxJsonNext(&json1, &value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
174 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
175 CX_TEST_ASSERT(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
176 CX_TEST_ASSERT(cxJsonIsArray(value));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
177 CX_TEST_ASSERT(value->array.data_size == 3);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
178 for(int i=0;i<3;i++) {
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
179 CxJsonValue *v = cxJsonArrGet(value, i);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
180 CX_TEST_ASSERT(v);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
181 CX_TEST_ASSERT(cxJsonIsInteger(v));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
182 CX_TEST_ASSERT(v->integer == i);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
183 }
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
184
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
185 cxJsonValueFree(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
186 cxJsonDestroy(&json1);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
187
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
188 // str array
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
189 cxJsonInit(&json2, NULL);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
190 cxJsonFill(&json2, str_array);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
191 result = cxJsonNext(&json2, &value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
192 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
193 CX_TEST_ASSERT(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
194 CX_TEST_ASSERT(cxJsonIsArray(value));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
195 CX_TEST_ASSERT(value->array.data_size == 2);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
196 CxJsonValue *s0 = cxJsonArrGet(value, 0);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
197 CxJsonValue *s1 = cxJsonArrGet(value, 1);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
198 CX_TEST_ASSERT(s0 && s1);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
199 CX_TEST_ASSERT(cxJsonIsString(s0) && cxJsonIsString(s1));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
200 CX_TEST_ASSERT(cx_strcmp(s0->string, "str1") == 0);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
201 CX_TEST_ASSERT(cx_strcmp(s1->string, "str2") == 0);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
202
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
203 cxJsonValueFree(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
204 cxJsonDestroy(&json2);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
205
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
206 // mixed array
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
207 cxJsonInit(&json3, NULL);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
208 cxJsonFill(&json3, mixed_array);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
209 result = cxJsonNext(&json3, &value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
210 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
211 CX_TEST_ASSERT(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
212 CX_TEST_ASSERT(cxJsonIsArray(value));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
213 CX_TEST_ASSERT(value->array.data_size == 5);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
214 CxJsonValue *m0 = cxJsonArrGet(value, 0);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
215 CxJsonValue *m1 = cxJsonArrGet(value, 1);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
216 CxJsonValue *m2 = cxJsonArrGet(value, 2);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
217 CxJsonValue *m3 = cxJsonArrGet(value, 3);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
218 CxJsonValue *m4 = cxJsonArrGet(value, 4);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
219 CX_TEST_ASSERT(m0 && m1 && m2 && m3 && m4);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
220 CX_TEST_ASSERT(cxJsonIsLiteral(m0));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
221 CX_TEST_ASSERT(cxJsonIsLiteral(m1));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
222 CX_TEST_ASSERT(cxJsonIsInteger(m2));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
223 CX_TEST_ASSERT(cxJsonIsObject(m3));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
224 CX_TEST_ASSERT(cxJsonIsArray(m4));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
225
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
226 cxJsonValueFree(value);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
227 cxJsonDestroy(&json3);
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
228 }
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
229 }
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
230
1556
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
231 CX_TEST(test_json_from_string) {
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
232 cxstring text = cx_str(
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
233 "{\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
234 "\t\"message\":\"success\",\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
235 "\t\"position\":{\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
236 "\t\t\"longitude\":-94.7099,\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
237 "\t\t\"latitude\":51.5539\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
238 "\t},\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
239 "\t\"timestamp\":1729348561,\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
240 "\t\"alive\":true\n"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
241 "}"
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
242 );
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
243
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
244 CX_TEST_DO {
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
245 CxJsonValue *obj;
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
246 CX_TEST_ASSERT(cxJsonFromString(NULL, text, &obj) == CX_JSON_NO_ERROR);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
247
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
248 // check the contents
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
249 CX_TEST_ASSERT(cxJsonIsObject(obj));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
250
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
251 CxJsonValue *message = cxJsonObjGet(obj, "message");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
252 CX_TEST_ASSERT(cxJsonIsString(message));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
253 CX_TEST_ASSERT(0 == cx_strcmp(
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
254 cxJsonAsCxString(message),
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
255 "success")
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
256 );
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
257
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
258 CxJsonValue *position = cxJsonObjGet(obj, "position");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
259 CX_TEST_ASSERT(cxJsonIsObject(position));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
260 CxJsonValue *longitude = cxJsonObjGet(position, "longitude");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
261 CX_TEST_ASSERT(cxJsonIsNumber(longitude));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
262 CX_TEST_ASSERT(!cxJsonIsInteger(longitude));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
263 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(longitude), -94.7099));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
264 CX_TEST_ASSERT(cxJsonAsInteger(longitude) == -94);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
265 CxJsonValue *latitude = cxJsonObjGet(position, "latitude");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
266 CX_TEST_ASSERT(cxJsonIsNumber(latitude));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
267 CX_TEST_ASSERT(!cxJsonIsInteger(latitude));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
268 CX_TEST_ASSERT(0 == cx_vcmp_double(cxJsonAsDouble(latitude), 51.5539));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
269 CX_TEST_ASSERT(cxJsonAsInteger(latitude) == 51);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
270
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
271 CxJsonValue *timestamp = cxJsonObjGet(obj, "timestamp");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
272 CX_TEST_ASSERT(cxJsonIsInteger(timestamp));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
273 CX_TEST_ASSERT(cxJsonIsNumber(timestamp));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
274 CX_TEST_ASSERT(cxJsonAsInteger(timestamp) == 1729348561);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
275 CX_TEST_ASSERT(cxJsonAsDouble(timestamp) == 1729348561.0);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
276
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
277 CxJsonValue *alive = cxJsonObjGet(obj, "alive");
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
278 CX_TEST_ASSERT(cxJsonIsBool(alive));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
279 CX_TEST_ASSERT(cxJsonIsTrue(alive));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
280 CX_TEST_ASSERT(!cxJsonIsFalse(alive));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
281 CX_TEST_ASSERT(cxJsonAsBool(alive));
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
282
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
283 cxJsonValueFree(obj);
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
284 }
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
285 }
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
286
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
287 CX_TEST(test_json_from_string_errors) {
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
288 CX_TEST_DO {
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
289 CxJsonValue *obj = NULL;
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
290 CX_TEST_ASSERT(cxJsonFromString(NULL, "", &obj) == CX_JSON_NO_DATA);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
291 CX_TEST_ASSERT(cxJsonFromString(NULL, cx_str(NULL), &obj) == CX_JSON_NO_DATA);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
292 CX_TEST_ASSERT(cxJsonFromString(NULL, "\"incomplete", &obj) == CX_JSON_INCOMPLETE_DATA);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
293 CX_TEST_ASSERT(cxJsonFromString(NULL, "{ \"incomplete\": ", &obj) == CX_JSON_INCOMPLETE_DATA);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
294 CX_TEST_ASSERT(cxJsonFromString(NULL, "{\"number\": 47110815!}", &obj) == CX_JSON_FORMAT_ERROR_NUMBER);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
295 CX_TEST_ASSERT(cxJsonFromString(NULL, "[ \"unexpected token\" : true ]", &obj) == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
296 CX_TEST_ASSERT(cxJsonFromString(NULL, "} [", &obj) == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
297 CX_TEST_ASSERT(obj && obj->type == CX_JSON_NOTHING);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
298 }
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
299 }
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
300
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
301 CX_TEST(test_json_from_string_multiple_values) {
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
302 CxJsonStatus status;
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
303 CxJsonValue *obj;
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
304 CX_TEST_DO {
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
305 obj = NULL;
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
306 status = cxJsonFromString(NULL, "{ \"obj1\": \"hello\" }\n\"value2\"\n", &obj);
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
307 CX_TEST_ASSERT(obj != NULL);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
308 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
309 CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
310
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
311 obj = NULL;
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
312 status = cxJsonFromString(NULL, "\"value\" \n ] syntax error [", &obj);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
313 CX_TEST_ASSERT(obj != NULL);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
314 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
315 CX_TEST_ASSERT(status == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
316 }
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
317 }
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
318
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
319 CX_TEST(test_json_from_string_untrimmed) {
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
320 CxJsonStatus status;
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
321 CxJsonValue *obj;
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
322 CX_TEST_DO {
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
323 obj = NULL;
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
324 status = cxJsonFromString(NULL, "\n\t{ \"obj1\": \"hello\" } \n", &obj);
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
325 CX_TEST_ASSERT(status == CX_JSON_NO_ERROR);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
326 CX_TEST_ASSERT(cxJsonIsObject(obj));
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
327 CxJsonValue *obj1 = cxJsonObjGet(obj, "obj1");
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
328 CX_TEST_ASSERT(cxJsonIsString(obj1));
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
329 CX_TEST_ASSERT(cx_strcmp(cxJsonAsCxString(obj1), "hello") == 0);
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
330
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
331 cxJsonValueFree(obj);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
332 }
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
333 }
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
334
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
335 CX_TEST(test_json_escaped_strings) {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
336 cxstring text = cx_str(
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
337 "{\n"
1154
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
338 "\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
339 "\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
340 "}"
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
341 );
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
342
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
343 CxJson json;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
344 cxJsonInit(&json, NULL);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
345 CX_TEST_DO {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
346 cxJsonFill(&json, text);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
347 CxJsonValue *obj;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
348 CxJsonStatus result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
349 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
350 CX_TEST_ASSERT(cxJsonIsObject(obj));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
351 CxJsonValue *object = cxJsonObjGet(obj, "object");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
352 CX_TEST_ASSERT(cxJsonIsString(object));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
353 CX_TEST_ASSERT(0 == cx_strcmp(
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
354 cxJsonAsCxString(object),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
355 "{\n\t\"object\":null\n}")
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
356 );
1154
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
357 CxJsonValue *ctrl = cxJsonObjGet(obj, "ctrl-chars");
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
358 CX_TEST_ASSERT(cxJsonIsString(ctrl));
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
359 CX_TEST_ASSERT(0 == cx_strcmp(
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
360 cxJsonAsCxString(ctrl),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
361 "\\foo\r\nbar\f*ring/ring*\b")
1154
afd12f31d28a add missing test coverage for escape sequences
Mike Becker <universe@uap-core.de>
parents: 1152
diff changeset
362 );
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
363 cxJsonValueFree(obj);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
364 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
365 cxJsonDestroy(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
366 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
367
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
368 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
369 cxstring text = cx_str(
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
370 "{\n"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
371 "\"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
372 "\"unicode\":\"\\u00df\\u00DF\",\n"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
373 "\"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
374 "\"wide\":\"\\u03a3\\u29b0\",\n"
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
375 "\"surrogatepair1\":\"\\ud83e\\udff5\",\n"
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
376 "\"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
377 "\"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
378 "}"
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
379 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
380
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
381 CxJson json;
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
382 cxJsonInit(&json, NULL);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
383 CX_TEST_DO {
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
384 cxJsonFill(&json, text);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
385 CxJsonValue *obj;
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
386 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
387 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
388 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
389
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
390 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
391 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
392 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
393 cxJsonAsCxString(ascii),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
394 "ASCII")
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
395 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
396
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
397 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
398 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
399 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
400 cxJsonAsCxString(unicode),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
401 "ßß")
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
402 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
403
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
404 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
405 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
406 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
407 cxJsonAsCxString(mixed),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
408 "mixed ä ö ä ö")
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
409 );
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
410
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
411 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
412 CX_TEST_ASSERT(cxJsonIsString(wide));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
413 CX_TEST_ASSERT(0 == cx_strcmp(cxJsonAsCxString(wide), "Σ⦰"));
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
414
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
415 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
416 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
417 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
418 cxJsonAsCxString(surrogatepair1),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
419 "\xf0\x9f\xaf\xb5")
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
420 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
421
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
422 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
423 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
424 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
425 cxJsonAsCxString(surrogatepair2),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
426 "test\xf0\x9f\xaf\xb1" "AA")
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
427 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
428
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
429 CxJsonValue *mixed2 = cxJsonObjGet(obj, "mixed2");
1177
04ede4de9cec fix unicode tests not working on all platforms
Mike Becker <universe@uap-core.de>
parents: 1157
diff changeset
430 char test[16];
1543
7b66371d6da3 use an anonymous union for the CxJsonValue
Mike Becker <universe@uap-core.de>
parents: 1513
diff changeset
431 strncpy(test, mixed2->string.ptr, 15);
7b66371d6da3 use an anonymous union for the CxJsonValue
Mike Becker <universe@uap-core.de>
parents: 1513
diff changeset
432 CX_TEST_ASSERT(cxJsonIsString(mixed2));
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
433 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
434 cxJsonAsCxString(mixed2),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
435 "123\xce\xa3\xf0\x9f\xaf\x85ß")
1152
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
436 );
e4af44b488bc implement decoder for utf16 surrogate pairs in unescape_string
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1149
diff changeset
437
1149
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
438 cxJsonValueFree(obj);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
439 }
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
440 cxJsonDestroy(&json);
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
441 }
df5665de7344 implement unicode escape sequences in json unescape_string function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1139
diff changeset
442
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
443 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
444 CxJson json;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
445 cxJsonInit(&json, NULL);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
446 CxJsonValue *obj;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
447 CxJsonStatus result;
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
448 CX_TEST_DO {
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
449 cxJsonFill(&json, "\"too few digits \\u123\"");
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
450 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
451 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
452 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
453 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
454 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
455 "too few digits \\u123"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
456 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
457 cxJsonValueFree(obj);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
458 cxJsonFill(&json, "\"too many digits \\u00E456\"");
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
459 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
460 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
461 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
462 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
463 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
464 "too many digits ä56"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
465 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
466 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
467 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
468 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
469 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
470 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
471 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
472 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
473 "only high \\uD800 surrogate"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
474 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
475 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
476 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
477 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
478 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
479 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
480 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
481 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
482 "only low \\uDC00 surrogate"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
483 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
484 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
485 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
486 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
487 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
488 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
489 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
490 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
491 "two high \\uD800\\uD800 surrogates"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
492 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
493 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
494 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
495 result = cxJsonNext(&json, &obj);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
496 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
497 CX_TEST_ASSERT(cxJsonIsString(obj));
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
498 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
499 cxJsonAsCxString(obj),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
500 "high plus bullshit \\uD800\\u567 foo"
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
501 ));
1157
3565ae61a5a2 fix memory leaks
Mike Becker <universe@uap-core.de>
parents: 1156
diff changeset
502 cxJsonValueFree(obj);
1156
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
503 }
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
504 cxJsonDestroy(&json);
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
505 }
96f16b5a0029 add test and implementation for malformed escape sequences
Mike Becker <universe@uap-core.de>
parents: 1154
diff changeset
506
1139
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
507 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
508 CxJson json;
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
509 cxJsonInit(&json, NULL);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
510 CX_TEST_DO {
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
511 // first test, normal scenario
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
512 cxJsonFill(&json, "\"a \\\"test\\\" string\"");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
513 CxJsonValue *val;
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
514 CxJsonStatus result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
515 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
516 CX_TEST_ASSERT(cxJsonIsString(val));
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
517 CX_TEST_ASSERT(0 == cx_strcmp(
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
518 cxJsonAsCxString(val),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
519 "a \"test\" string")
1139
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
520 );
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
521 cxJsonValueFree(val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
522
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
523 // 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
524 cxJsonFill(&json, "\"a \\\"test\\");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
525 result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
526 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
527 cxJsonFill(&json, "\" string\"");
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
528 result = cxJsonNext(&json, &val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
529 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
530 CX_TEST_ASSERT(cxJsonIsString(val));
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
531 CX_TEST_ASSERT(0 == cx_strcmp(
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
532 cxJsonAsCxString(val),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
533 "a \"test\" string")
1139
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
534 );
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
535 cxJsonValueFree(val);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
536 }
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
537 cxJsonDestroy(&json);
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
538 }
7dfa5bcf39ee remove token_escape bool from CxJson struct
Mike Becker <universe@uap-core.de>
parents: 1130
diff changeset
539
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
540 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
541 cxstring text = cx_str(
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
542 "{\"message\":\"success\" , \"__timestamp\":1729348561}");
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
543 cxstring parts[16];
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
544 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
545 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
546 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
547 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
548
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
549 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
550 CxJsonStatus result;
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
551
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
552 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
553 cxJsonInit(&json, NULL);
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
554 CxJsonValue *obj;
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
555
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
556 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
557 while(part < nparts - 1) {
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
558 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
559 part++;
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
560 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
561 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
562 }
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
563 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
564 result = cxJsonNext(&json, &obj);
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
565 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
566 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
567
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
568 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
569 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
570 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
571 cxJsonAsCxString(message),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
572 "success")
939
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
573 );
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
574 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
575 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
576 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
577 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
578
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
579 // 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
580 cxJsonValueFree(obj);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
581
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
582 // 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
583 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
584 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
585
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
586 // Test 2: abort after incomplete token
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
587 cxJsonReset(&json);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
588
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
589 cxJsonFill(&json, "\"incomplete token");
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
590 result = cxJsonNext(&json, &obj);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
591 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
592
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
593 cxJsonDestroy(&json);
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
594 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
595 }
0bb7258366a0 add test for parsing json with multiple incomplete tokens
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 937
diff changeset
596
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
597 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
598 CxTestingAllocator talloc;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
599 cx_testing_allocator_init(&talloc);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
600 const CxAllocator *alloc = &talloc.base;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
601
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
602 cxstring text = cx_str("{\"number\": 47110815!}");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
603 cxstring part1 = cx_strsubsl(text, 0, 16);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
604 cxstring part2 = cx_strsubs(text, 16);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
605
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
606 CX_TEST_DO {
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
607 CxJson json;
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
608 cxJsonInit(&json, alloc);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
609
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
610 CxJsonStatus result;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
611 CxJsonValue *obj;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
612
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
613 cxJsonFill(&json, part1);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
614 result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
615 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
616 cxJsonFill(&json, part2);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
617 result = cxJsonNext(&json, &obj);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
618 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_NUMBER);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
619 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
620
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
621 cxJsonDestroy(&json);
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
622 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
623 }
1075
0cc4b63a0ae0 fix cxJsonDestroy() not freeing uncompleted object member names
Mike Becker <universe@uap-core.de>
parents: 1072
diff changeset
624 cx_testing_allocator_destroy(&talloc);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
625 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
626
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
627 CX_TEST(test_json_parenthesis_mismatch) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
628 CxTestingAllocator talloc;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
629 cx_testing_allocator_init(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
630 const CxAllocator *alloc = &talloc.base;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
631
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
632 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
633 CxJson json;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
634 cxJsonInit(&json, alloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
635
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
636 CxJsonStatus result;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
637 CxJsonValue *obj;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
638
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
639 cxJsonFill(&json, "[0, 1, 2, 3}");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
640 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
641 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
642
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
643 cxJsonReset(&json);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
644 cxJsonFill(&json, "{\"test\": 42]");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
645 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
646 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
647
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
648 cxJsonDestroy(&json);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
649 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
650 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
651 cx_testing_allocator_destroy(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
652 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
653
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
654 CX_TEST(test_json_object_name_is_no_string) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
655 CxTestingAllocator talloc;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
656 cx_testing_allocator_init(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
657 const CxAllocator *alloc = &talloc.base;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
658
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
659 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
660 CxJson json;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
661 cxJsonInit(&json, alloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
662
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
663 CxJsonStatus result;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
664 CxJsonValue *obj;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
665
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
666 cxJsonFill(&json, "{42: \"test\"}");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
667 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
668 CX_TEST_ASSERT(result == CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
669
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
670 cxJsonDestroy(&json);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
671 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
672 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
673 cx_testing_allocator_destroy(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
674 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
675
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
676 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
677 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
678 "{\"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
679
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
680 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
681 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
682
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
683 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
684 CxJson json;
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
685 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
686 CxJsonValue *obj;
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
687
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
688 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
689 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
690 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
691 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
692 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
693
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
694 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
695 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
696 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
697 cxJsonAsCxString(message),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
698 "success")
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
699 );
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
700 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
701 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
702 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
703 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
704
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
705 cxJsonValueFree(obj);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
706 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
707 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
708
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
709 cxJsonDestroy(&json);
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
710 }
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
711 }
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
712
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
713 CX_TEST(test_json_no_fill) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
714 CxJson json;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
715 cxJsonInit(&json, NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
716 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
717 CxJsonValue *obj = NULL;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
718 CxJsonStatus result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
719 CX_TEST_ASSERT(result == CX_JSON_NULL_DATA);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
720 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
721 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
722 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
723 cxJsonDestroy(&json);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
724 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
725
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
726 CX_TEST(test_json_null_fill) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
727 CxJson json;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
728 cxJsonInit(&json, NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
729 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
730 CxJsonStatus result;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
731 CxJsonValue *obj = NULL;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
732 cxstring nullstr = cx_strn(NULL, 0);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
733 cxJsonFill(&json, nullstr);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
734 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
735 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
736 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
737 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
738 obj = NULL;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
739
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
740 cxJsonFill(&json, "[0, 1");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
741 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
742 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
743 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
744 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
745 obj = NULL;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
746
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
747 cxJsonFill(&json, nullstr);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
748 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
749 CX_TEST_ASSERT(result == CX_JSON_INCOMPLETE_DATA);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
750 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
751 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
752 obj = NULL;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
753
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
754 cxJsonFill(&json, ", 2]");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
755 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
756 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
757 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
758 CX_TEST_ASSERT(cxJsonIsArray(obj));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
759 cxJsonValueFree(obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
760
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
761 cxJsonFill(&json, nullstr);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
762 result = cxJsonNext(&json, &obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
763 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
764 CX_TEST_ASSERT(obj != NULL);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
765 CX_TEST_ASSERT(obj->type == CX_JSON_NOTHING);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
766 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
767 cxJsonDestroy(&json);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
768 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
769
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
770 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
771 cxstring text0 = cx_str(
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
772 "{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
773 "\t\"message\":\"success\",\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
774 "\t\"data\":{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
775 "\t\t\"obj\":{\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
776 "\t\t\t\"array\": [1, 2, 3, ?syntaxerror? ]\n"
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
777 "\t\t}\n"
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
778 "\t},\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
779 "\t\"timestamp\":1729348561,\n"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
780 "}"
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
781 );
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
782 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
783 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
784 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
785 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
786
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
787 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
788 CxJsonStatus errors[] = {
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
789 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
790 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
791 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
792 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
793 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
794 };
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
795
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
796 CX_TEST_DO {
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
797 CxJsonStatus result;
941
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
798 CxJson json;
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
799 CxJsonValue *obj = NULL;
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
800
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
801 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
802 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
803 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
804 result = cxJsonNext(&json, &obj);
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
805
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
806 CX_TEST_ASSERT(result == errors[i]);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
807 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
808 cxJsonDestroy(&json);
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
809 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
810 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
811 }
9077724b75a0 fix incomplete json object not resulting in syntax error
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 939
diff changeset
812
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
813 CX_TEST(test_json_object_remove_member) {
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
814 CxTestingAllocator talloc;
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
815 cx_testing_allocator_init(&talloc);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
816 const CxAllocator *alloc = &talloc.base;
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
817 CX_TEST_DO {
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
818 CxJson json;
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
819 cxJsonInit(&json, alloc);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
820 cxJsonFill(&json,
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
821 "{\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
822 "\t\"message\":\"success\",\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
823 "\t\"data\":{\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
824 "\t\t\"obj\":{\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
825 "\t\t\t\"array\": [1, 2, 3]\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
826 "\t\t}\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
827 "\t},\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
828 "\t\"timestamp\":1729348561\n"
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
829 "}"
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
830 );
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
831 CxJsonValue *obj;
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
832 CX_TEST_ASSERT(CX_JSON_NO_ERROR == cxJsonNext(&json, &obj));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
833 cxJsonDestroy(&json);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
834
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
835 CX_TEST_ASSERT(cxJsonIsObject(cxJsonObjGet(obj, "data")));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
836 CxJsonValue *data = cxJsonObjRemove(obj, "data");
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
837 CX_TEST_ASSERT(cxJsonIsObject(data));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
838 CX_TEST_ASSERT(!cxJsonIsObject(cxJsonObjGet(obj, "data")));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
839 CX_TEST_ASSERT(cxJsonIsObject(cxJsonObjGet(data, "obj")));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
840
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
841 CX_TEST_ASSERT(NULL == cxJsonObjRemove(obj, "data"));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
842
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
843 // does not verify, yet, because we extracted an object
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
844 cxJsonValueFree(obj);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
845 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
846
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
847 cxJsonValueFree(data);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
848 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
849 }
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
850 cx_testing_allocator_destroy(&talloc);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
851 }
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
852
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
853 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
854 CxJson json;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
855 CxJsonValue *d1;
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
856 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
857 CX_TEST_DO {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
858 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
859 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
860 cxJsonNext(&json, &d1);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
861
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
862 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
863 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
864 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
865 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
866 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
867 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
868 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
869 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
870 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
871 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
872 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
873 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
874 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
875 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
876 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
877 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
878 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
879 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
880 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
881 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
882 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
883 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
884 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
885 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
886 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
887 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
888 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
889 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
890
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
891 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
892 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
893
978
1da52af18ac3 fix memory leaks in json tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 977
diff changeset
894 cxJsonValueFree(d1);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
895 cxJsonDestroy(&json);
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
896 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
897 }
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
898
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
899 CX_TEST(test_json_number) {
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
900 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
901 cxJsonInit(&json, NULL);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
902 CX_TEST_DO {
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
903 CxJsonValue *v;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
904 CxJsonStatus result;
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
905
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
906 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
907 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
908 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
909 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
910 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
911 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
912
975
96bf02371aef adds test case for numbers - currently fails due to issue #482
Mike Becker <universe@uap-core.de>
parents: 973
diff changeset
913 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
914 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
915 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
916 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
917 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
918 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
919
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
920 cxJsonFill(&json, "0.815e-3 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
921 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
922 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
923 CX_TEST_ASSERT(cxJsonIsNumber(v));
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
924 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
925 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
926
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
927 cxJsonFill(&json, "1.23E4 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
928 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
929 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
930 CX_TEST_ASSERT(cxJsonIsNumber(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
931 CX_TEST_ASSERT(cxJsonAsInteger(v) == 12300);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
932 CX_TEST_ASSERT(cxJsonAsDouble(v) == 12300.0);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
933 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
934
0a7c1bb2372d avoid copying the filled data in the json parser when possible - fixes #530
Mike Becker <universe@uap-core.de>
parents: 1057
diff changeset
935 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
936 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
937 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
938 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
939 // be as precise as possible
1063
e453e717876e implement floating point string to number conversions
Mike Becker <universe@uap-core.de>
parents: 1060
diff changeset
940 // 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
941 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
942 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
943 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
944 cxJsonDestroy(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
945 }
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
946
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
947 CX_TEST(test_json_number_format_errors) {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
948 CxJson json;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
949 cxJsonInit(&json, NULL);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
950 CX_TEST_DO {
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
951 CxJsonValue *v;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
952 CxJsonStatus result;
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
953
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
954 cxJsonFill(&json, "+3.1415 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
955 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
956 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
957 "leading plus is not RFC-8259 compliant");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
958 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
959 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
960
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
961 cxJsonFill(&json, "0.815e-3.0 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
962 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
963 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
964 "exponent must be an integer");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
965 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
966 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
967
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
968 cxJsonFill(&json, "3.14e ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
969 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
970 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
971 "exponent cannot be empty");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
972 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
973 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
974
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
975 cxJsonFill(&json, "3.14e~7 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
976 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
977 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
978 "exponent cannot start with bullshit");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
979 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
980 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
981
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
982 cxJsonFill(&json, "1.23e4f ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
983 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
984 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
985 "non-digits in exponent");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
986 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
987 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
988
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
989 cxJsonFill(&json, "1.23f ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
990 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
991 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
992 "non-digits in value");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
993 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
994 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
995
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
996 cxJsonFill(&json, "1.23.45 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
997 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
998 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
999 "multiple decimal separators");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1000 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1001 cxJsonReset(&json);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1002
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1003 cxJsonFill(&json, "184467440737095516150123456789 ");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1004 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1005 CX_TEST_ASSERTM(result == CX_JSON_FORMAT_ERROR_NUMBER,
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1006 "30 digit int does not fit into 64-bit int");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1007 CX_TEST_ASSERT(v->type == CX_JSON_NOTHING);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1008 cxJsonReset(&json);
973
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
1009 }
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
1010 cxJsonDestroy(&json);
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
1011 }
05910a8994f7 add UCX string support to cxJsonFill()
Mike Becker <universe@uap-core.de>
parents: 966
diff changeset
1012
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1013 CX_TEST(test_json_multiple_values) {
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1014 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1015 cxJsonInit(&json, NULL);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1016 CX_TEST_DO {
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1017 CxJsonValue *v;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
1018 CxJsonStatus result;
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1019
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1020 // read number
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1021 cxJsonFill(&json, "10\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1022 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
1023 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
1024 CX_TEST_ASSERT(cxJsonIsNumber(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1025 CX_TEST_ASSERT(cxJsonAsInteger(v) == 10);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1026 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1027 // read remaining '\n'
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1028 result = cxJsonNext(&json, &v);
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
1029 CX_TEST_ASSERT(result == CX_JSON_NO_DATA);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1030 // read string
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1031 cxJsonFill(&json, "\"hello world\"\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1032 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
1033 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
1034 CX_TEST_ASSERT(cxJsonIsString(v));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1035 CX_TEST_ASSERT(!cx_strcmp(cxJsonAsCxString(v), "hello world"));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1036 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1037 // 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
1038 // read obj
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1039 cxJsonFill(&json, "{ \"value\": \"test\" }\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1040 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
1041 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
1042 CX_TEST_ASSERT(cxJsonIsObject(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1043 CxJsonValue *value = cxJsonObjGet(v, "value");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1044 CX_TEST_ASSERT(cxJsonAsString(value));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1045 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1046 // read array
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1047 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
1048 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
1049 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
1050 CX_TEST_ASSERT(cxJsonIsArray(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1051 CxJsonValue *a0 = cxJsonArrGet(v, 0);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1052 CxJsonValue *a3 = cxJsonArrGet(v, 3);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1053 CX_TEST_ASSERT(cxJsonIsNumber(a0));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1054 CX_TEST_ASSERT(cxJsonAsInteger(a0) == 0);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1055 CX_TEST_ASSERT(cxJsonIsNumber(a3));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1056 CX_TEST_ASSERT(cxJsonAsInteger(a3) == 3);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1057 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1058 // read literal
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1059 cxJsonFill(&json, "true\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1060 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
1061 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
1062 CX_TEST_ASSERT(cxJsonIsLiteral(v));
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1063 CX_TEST_ASSERT(cxJsonIsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1064 CX_TEST_ASSERT(cxJsonIsTrue(v));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1065 CX_TEST_ASSERT(cxJsonAsBool(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1066 cxJsonValueFree(v);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1067 cxJsonFill(&json, "false\n");
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1068 result = cxJsonNext(&json, &v);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1069 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1070 CX_TEST_ASSERT(cxJsonIsLiteral(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1071 CX_TEST_ASSERT(cxJsonIsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1072 CX_TEST_ASSERT(cxJsonIsFalse(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1073 CX_TEST_ASSERT(!cxJsonAsBool(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1074 cxJsonValueFree(v);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1075 cxJsonFill(&json, "null\n");
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1076 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
1077 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1078 CX_TEST_ASSERT(cxJsonIsLiteral(v));
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
1079 CX_TEST_ASSERT(!cxJsonIsBool(v));
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1080 CX_TEST_ASSERT(cxJsonIsNull(v));
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1081 cxJsonValueFree(v);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1082 }
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1083 cxJsonDestroy(&json);
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1084 }
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
1085
1337
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1086 CX_TEST(test_json_array) {
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1087 CxTestingAllocator talloc;
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1088 cx_testing_allocator_init(&talloc);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1089 const CxAllocator *allocator = &talloc.base;
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1090 CX_TEST_DO {
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1091 CxJsonValue *arr = cxJsonCreateArr(allocator);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1092 cxJsonArrAddIntegers(arr, (int64_t[]){ 0, 3, 6, 9, 12, 15}, 6);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1093 CX_TEST_ASSERT(cxJsonArrSize(arr) == 6);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1094 CxJsonValue *e = cxJsonArrGet(arr, 3);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1095 CX_TEST_ASSERT(cxJsonIsNumber(e));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1096 CX_TEST_ASSERT(cxJsonAsInteger(e) == 9);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1097 CX_TEST_ASSERT(cxJsonAsDouble(e) == 9.0);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1098 CX_TEST_ASSERT(cxJsonArrSize(arr) == 6);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1099 e = cxJsonArrGet(arr, 6);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1100 CX_TEST_ASSERT(!cxJsonIsNumber(e));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1101 // also not null, because "nothing" is not null
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1102 CX_TEST_ASSERT(!cxJsonIsNull(e));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1103 CX_TEST_ASSERT(e->type == CX_JSON_NOTHING);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1104 CxJsonValue *removed = cxJsonArrRemove(arr, 2);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1105 CX_TEST_ASSERT(cxJsonIsNumber(removed));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1106 CX_TEST_ASSERT(cxJsonAsInteger(removed) == 6);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1107 CX_TEST_ASSERT(cxJsonArrSize(arr) == 5);
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
1108 e = cxJsonArrGet(arr, 3);
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
1109 CX_TEST_ASSERT(cxJsonIsNumber(e));
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
1110 CX_TEST_ASSERT(cxJsonAsInteger(e) == 12);
1337
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1111 e = cxJsonArrRemove(arr, 5);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1112 CX_TEST_ASSERT(e == NULL);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1113 cxJsonValueFree(arr);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1114 // the removed element still needs to be freed
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1115 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1116 cxJsonValueFree(removed);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1117 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1118 }
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1119 cx_testing_allocator_destroy(&talloc);
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1120 }
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
1121
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1122 CX_TEST(test_json_array_iterator) {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1123 CxJson json;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1124 cxJsonInit(&json, NULL);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1125 CX_TEST_DO {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1126 CxJsonValue *v;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1127 CxJsonStatus result;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1128 cxJsonFill(&json, "[ 0, 3, 6, 9, 12, 15 ]\n");
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1129 result = cxJsonNext(&json, &v);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1130 CX_TEST_ASSERT(result == CX_JSON_NO_ERROR);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1131 CX_TEST_ASSERT(cxJsonIsArray(v));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1132 CxIterator iter = cxJsonArrIter(v);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1133 unsigned i = 0;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1134 cx_foreach(CxJsonValue*, elem, iter) {
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1135 CX_TEST_ASSERT(cxJsonIsNumber(elem));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1136 CX_TEST_ASSERT(i == cxJsonAsInteger(elem));
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1137 i += 3;
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1138 }
1051
7d17bd1103d7 fix another missing free() in json tests
Mike Becker <universe@uap-core.de>
parents: 1033
diff changeset
1139 cxJsonValueFree(v);
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1140 }
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1141 cxJsonDestroy(&json);
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1142 }
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
1143
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1144 CX_TEST(test_json_allocator) {
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1145 CxTestingAllocator talloc;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1146 cx_testing_allocator_init(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1147 CxAllocator *allocator = &talloc.base;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1148
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1149 cxstring text = cx_str(
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1150 "{\n"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1151 "\t\"message\":\"success\",\n"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1152 "\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
1153 "}"
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1154 );
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1155
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1156 CX_TEST_DO {
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1157 CxJson json;
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1158 cxJsonInit(&json, allocator);
996
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1159 cxJsonFill(&json, text);
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1160
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1161 CxJsonValue *obj;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
1162 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
1163 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
1164 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
1165
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1166 // this recursively frees everything
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1167 cxJsonValueFree(obj);
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1168 cxJsonDestroy(&json);
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1169
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1170 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
1171 }
1000
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1172 cx_testing_allocator_destroy(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1173 }
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1174
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1175 CX_TEST(test_json_allocator_parse_error) {
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1176 CxTestingAllocator talloc;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1177 cx_testing_allocator_init(&talloc);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1178 CxAllocator *allocator = &talloc.base;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1179
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1180 cxstring text = cx_str(
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1181 "{\n"
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1182 "\t\"message\":\"success\"\n" // <-- missing comma
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1183 "\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
1184 "}"
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1185 );
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1186
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1187 CX_TEST_DO {
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1188 CxJson json;
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1189 cxJsonInit(&json, allocator);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1190 cxJsonFill(&json, text);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1191
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1192 CxJsonValue *obj = NULL;
1002
1483c47063a8 add status codes to json parser - relates to #431
Mike Becker <universe@uap-core.de>
parents: 1000
diff changeset
1193 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
1194 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
1195 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
1196
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1197 // clean-up any left-over memory
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1198 cxJsonDestroy(&json);
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1199
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1200 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
1201 }
1aecddf7e209 simplify how the json parser works
Mike Becker <universe@uap-core.de>
parents: 997
diff changeset
1202 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
1203 }
333155f234c4 add support for allocators to the json parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 978
diff changeset
1204
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1205 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
1206 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
1207 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
1208 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
1209 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
1210 /*
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1211 * 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
1212 *
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1213 * {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1214 * "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
1215 * "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
1216 * "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
1217 * "nested": {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1218 * "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
1219 * "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
1220 * "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
1221 * "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
1222 * }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1223 * }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1224 */
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1225
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1226
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1227 // 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
1228 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
1229 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
1230 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
1231 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
1232
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1233 // 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
1234 {
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1235 cxJsonObjPutLiteral(obj, "bool", CX_JSON_FALSE);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1236 cxJsonObjPutInteger(obj, "int", 47);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1237 CxJsonValue *strings = cxJsonObjPutArr(obj, "strings");
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1238 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
1239 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
1240 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
1241 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
1242
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1243 CxJsonValue *nested = cxJsonObjPutObj(obj, "nested");
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1244 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
1245 CX_TEST_ASSERT(cxJsonIsObject(nested));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1246 cxJsonObjPutString(nested, "string", "test");
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1247
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1248 cxJsonArrAddNumbers(cxJsonObjPutArr(nested, "floats"),
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1249 (double[]){3.1415, 47.11, 8.15}, 3);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1250 cxJsonArrAddIntegers(cxJsonObjPutArr(nested, "ints"),
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1251 (int64_t[]){4, 8, 15, 16, 23, 42}, 6);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1252 cxJsonArrAddLiterals(cxJsonObjPutArr(nested, "literals"),
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1253 (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
1254 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1255
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1256 // 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
1257 {
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1258 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
1259 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
1260 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
1261 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
1262 CX_TEST_ASSERT(2 == cxJsonArrSize(strings));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1263 CX_TEST_ASSERT(0 == cx_strcmp("hello", cxJsonAsString(cxJsonArrGet(strings, 0))));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1264 CX_TEST_ASSERT(0 == cx_strcmp("world", cxJsonAsString(cxJsonArrGet(strings, 1))));
1057
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1265
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1266 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
1267 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
1268 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
1269 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
1270 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
1271 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
1272 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
1273 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
1274 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
1275 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
1276 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
1277 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
1278 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
1279 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
1280 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
1281 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
1282 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
1283 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
1284 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
1285 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
1286 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
1287 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
1288 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
1289 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
1290 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1291
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1292 // 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
1293 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
1294 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
1295 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1296 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
1297 }
4e8436c3e806 add tests for JSON create functions and fix a bug in cxJsonCreateCxString()
Mike Becker <universe@uap-core.de>
parents: 1051
diff changeset
1298
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1299 CX_TEST(test_json_overwrite_value) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1300 CxTestingAllocator talloc;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1301 cx_testing_allocator_init(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1302 CxAllocator *allocator = &talloc.base;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1303 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1304 CxJsonValue *obj = cxJsonCreateObj(allocator);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1305
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1306 // put some values
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1307 cxJsonObjPutInteger(obj, "test1", 1);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1308 cxJsonObjPutInteger(obj, "test2", 2);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1309 cxJsonObjPutInteger(obj, "test3", 3);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1310
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1311 // overwrite test2
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1312 cxJsonObjPutInteger(obj, "test2", 0);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1313
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1314 // verify the values
1547
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1315 CxMapIterator iter = cxJsonObjIter(obj);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1316 bool found[5] = {0};
1547
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1317 cx_foreach(CxMapEntry *, ov, iter) {
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1318 CxJsonValue *v = ov->value;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1319 CX_TEST_ASSERT(cxJsonIsInteger(v));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1320 int64_t i = cxJsonAsInteger(v);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1321 CX_TEST_ASSERT(i >= 0 && i <= 4);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1322 found[i] = true;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1323 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1324 CX_TEST_ASSERT(found[0]);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1325 CX_TEST_ASSERT(found[1]);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1326 CX_TEST_ASSERT(!found[2]);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1327 CX_TEST_ASSERT(found[3]);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1328 CX_TEST_ASSERT(!found[4]);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1329
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1330 // destroy the value and verify the allocations
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1331 cxJsonValueFree(obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1332 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1333 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1334 cx_testing_allocator_destroy(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1335 }
1072
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
1336
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1337 CX_TEST(test_json_compare_primitives) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1338 CxJsonValue *a[14];
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1339 a[0] = cxJsonCreateLiteral(NULL, CX_JSON_NULL);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1340 a[1] = cxJsonCreateLiteral(NULL, CX_JSON_TRUE);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1341 a[2] = cxJsonCreateLiteral(NULL, CX_JSON_FALSE);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1342 a[3] = cxJsonCreateInteger(NULL, 1234);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1343 a[4] = cxJsonCreateInteger(NULL, 5432);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1344 a[5] = cxJsonCreateInteger(NULL, -10);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1345 a[6] = cxJsonCreateInteger(NULL, 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1346 a[7] = cxJsonCreateNumber(NULL, 0.0f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1347 a[8] = cxJsonCreateNumber(NULL, 13.37f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1348 a[9] = cxJsonCreateNumber(NULL, -123.456f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1349 a[10] = cxJsonCreateNumber(NULL, 1234.0f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1350 a[11] = cxJsonCreateNumber(NULL, -10.3f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1351 a[12] = cxJsonCreateString(NULL, "hello");
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1352 a[13] = cxJsonCreateString(NULL, "world");
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1353
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1354 CxJsonValue *b[14];
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1355 b[0] = cxJsonCreateLiteral(NULL, CX_JSON_NULL);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1356 b[1] = cxJsonCreateLiteral(NULL, CX_JSON_TRUE);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1357 b[2] = cxJsonCreateLiteral(NULL, CX_JSON_FALSE);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1358 b[3] = cxJsonCreateInteger(NULL, 1234);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1359 b[4] = cxJsonCreateInteger(NULL, 5432);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1360 b[5] = cxJsonCreateInteger(NULL, -10);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1361 b[6] = cxJsonCreateInteger(NULL, 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1362 b[7] = cxJsonCreateNumber(NULL, 0.0f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1363 b[8] = cxJsonCreateNumber(NULL, 13.37f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1364 b[9] = cxJsonCreateNumber(NULL, -123.456f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1365 b[10] = cxJsonCreateNumber(NULL, 1234.0f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1366 b[11] = cxJsonCreateNumber(NULL, -10.3f);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1367 b[12] = cxJsonCreateString(NULL, "hello");
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1368 b[13] = cxJsonCreateString(NULL, "world");
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1369
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1370 CX_TEST_DO {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1371 for(int i=0;i<12;i++) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1372 for(int j=0;j<12;j++) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1373 int ret = cxJsonCompare(a[i], b[j]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1374 if(i == j) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1375 CX_TEST_ASSERT(ret == 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1376 } else {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1377 if(cxJsonIsNumber(a[i]) && cxJsonIsNumber(b[j])) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1378 double diff = fabs(cxJsonAsDouble(a[i]) - cxJsonAsDouble(b[j]));
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1379 if(diff < 0.001) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1380 CX_TEST_ASSERT(ret == 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1381 } else {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1382 CX_TEST_ASSERT(ret != 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1383 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1384 } else {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1385 CX_TEST_ASSERT(ret != 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1386 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1387 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1388 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1389 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1390
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1391 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1392 for(int i=0;i<14;i++) {
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1393 cxJsonValueFree(a[i]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1394 cxJsonValueFree(b[i]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1395 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1396 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1397
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1398 CX_TEST(test_json_compare_objects) {
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1399 CxJsonValue *json[10];
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1400 cxJsonFromString(NULL, "{ }", &json[0]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1401 cxJsonFromString(NULL, "{ }", &json[1]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1402 cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[2]);
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1403 cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[7]);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1404 cxJsonFromString(NULL, "{ \"key0\": \"value0\", \"key1\": \"value1\", \"key2\":null }", &json[3]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1405 cxJsonFromString(NULL, "{ \"key1\": \"value1\", \"key2\":null, \"key0\": \"value0\" }", &json[4]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1406
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1407 const char *json_complex_object =
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1408 "{\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1409 " \"bool\": false,\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1410 " \"int\": 47,\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1411 " \"strings\": [ \"hello\", \"world\" ],\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1412 " \"nested\": {\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1413 " \"string\": \"test\",\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1414 " \"floats\": [ 3.1415, 47.11, 8.15 ],\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1415 " \"ints\": [ 4, 8, 15, 16, 23, 42 ],\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1416 " \"literals\": [ true, null, false ],\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1417 " \"objects\": [\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1418 " {},\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1419 " { \"unicode\": \"\\u03a3\\u29b0\" },\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1420 " { \"array\": [ 1,2,3] }\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1421 " ]\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1422 " }\n"
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1423 "}\n";
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1424 cxJsonFromString(NULL, json_complex_object, &json[5]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1425 cxJsonFromString(NULL, json_complex_object, &json[6]);
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1426 const char *json_complex_object_int_array_mismatch =
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1427 "{\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1428 " \"bool\": false,\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1429 " \"int\": 47,\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1430 " \"strings\": [ \"hello\", \"world\" ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1431 " \"nested\": {\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1432 " \"string\": \"test\",\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1433 " \"floats\": [ 3.1415, 47.11, 8.15 ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1434 " \"ints\": [ 4, 8, 16, 15, 23, 42 ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1435 " \"literals\": [ true, null, false ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1436 " \"objects\": [\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1437 " {},\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1438 " { \"unicode\": \"\\u03a3\\u29b0\" },\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1439 " { \"array\": [ 1,2,3] }\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1440 " ]\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1441 " }\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1442 "}\n";
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1443 cxJsonFromString(NULL, json_complex_object_int_array_mismatch, &json[8]);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1444 const char *json_complex_object_different_order =
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1445 "{\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1446 " \"bool\": false,\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1447 " \"nested\": {\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1448 " \"string\": \"test\",\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1449 " \"ints\": [ 4, 8, 15, 16, 23, 42 ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1450 " \"floats\": [ 3.1415, 47.11, 8.15 ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1451 " \"objects\": [\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1452 " {},\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1453 " { \"unicode\": \"\\u03a3\\u29b0\" },\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1454 " { \"array\": [ 1,2,3] }\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1455 " ],\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1456 " \"literals\": [ true, null, false ]\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1457 " },\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1458 " \"int\": 47,\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1459 " \"strings\": [ \"hello\", \"world\" ]\n"
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1460 "}\n";
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1461 cxJsonFromString(NULL, json_complex_object_different_order, &json[9]);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1462
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1463 CX_TEST_DO {
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1464 for (unsigned i = 0; i < cx_nmemb(json); i++) {
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1465 CX_TEST_ASSERT(cxJsonIsObject(json[i]));
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1466 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1467
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1468 CX_TEST_ASSERT(cxJsonCompare(json[0], json[0]) == 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1469 CX_TEST_ASSERT(cxJsonCompare(json[0], json[1]) == 0);
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1470 CX_TEST_ASSERT(cxJsonCompare(json[1], json[0]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1471 CX_TEST_ASSERT(cxJsonCompare(json[2], json[7]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1472 CX_TEST_ASSERT(cxJsonCompare(json[7], json[2]) == 0);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1473
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1474 // compare different objects
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1475 CX_TEST_ASSERT(cxJsonCompare(json[2], json[3]) != 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1476 CX_TEST_ASSERT(cxJsonCompare(json[2], json[5]) != 0);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1477
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1478 // compare equal objects with different orders
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1479 CX_TEST_ASSERT(cxJsonCompare(json[3], json[4]) == 0);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1480
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1481 // test the same complex object
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1482 CX_TEST_ASSERT(cxJsonCompare(json[5], json[6]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1483 CX_TEST_ASSERT(cxJsonCompare(json[6], json[5]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1484
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1485 // object has a deep difference
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1486 CX_TEST_ASSERT(cxJsonCompare(json[5], json[8]) != 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1487 CX_TEST_ASSERT(cxJsonCompare(json[8], json[5]) != 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1488
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1489 // equal except for the member order
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1490 CX_TEST_ASSERT(cxJsonCompare(json[5], json[9]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1491 CX_TEST_ASSERT(cxJsonCompare(json[6], json[9]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1492 CX_TEST_ASSERT(cxJsonCompare(json[9], json[5]) == 0);
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1493 CX_TEST_ASSERT(cxJsonCompare(json[9], json[6]) == 0);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1494 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1495
1588
5c4ee11417c1 extend json compare test
Mike Becker <universe@uap-core.de>
parents: 1586
diff changeset
1496 for(unsigned i=0;i<cx_nmemb(json);i++) {
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1497 cxJsonValueFree(json[i]);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1498 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1499 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1500
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1501 CX_TEST(test_json_compare_arrays) {
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1502 char *str[6];
1589
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1503 str[0] = "[]";
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1504 str[1] = "[[]]";
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1505 str[2] = "[[ {} ], { \"a\": [[[[ {} ], null]]]} ]";
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1506 str[3] = "[ true, false ]";
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1507 str[4] = "[ 0, 1, \"hello\", true, false, null, {}, {\"a\":\"b\"}]";
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1508 str[5] = "[ \"test\", [ 1, 2, [ \"sub\", \"sub1\", [{\"end\":null}]]]]";
1589
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1509
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1510 CxJsonValue *a[6];
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1511 CxJsonValue *b[6];
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1512 for(int i=0;i<6;i++) {
1589
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1513 cxJsonFromString(NULL, str[i], &a[i]);
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1514 cxJsonFromString(NULL, str[i], &b[i]);
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1515 }
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1516
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1517 CX_TEST_DO {
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1518 for(int i=0;i<6;i++) {
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1519 // make sure the test values are arrays
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1520 CX_TEST_ASSERT(cxJsonIsArray(a[i]));
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1521
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1522 for(int j=0;j<6;j++) {
1589
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1523 int ret = cxJsonCompare(a[i], b[j]);
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1524 CX_TEST_ASSERT(i == j ? ret == 0 : ret != 0);
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1525 }
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1526 }
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1527 }
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1528
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
1529 for(int i=0;i<6;i++) {
1589
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1530 cxJsonValueFree(a[i]);
7ab8b302d187 add json array compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1588
diff changeset
1531 cxJsonValueFree(b[i]);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1532 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1533 }
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1534
1595
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1535 CX_TEST(test_json_clone_primitives) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1536 CxJsonValue *a[14];
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1537 a[0] = cxJsonCreateLiteral(NULL, CX_JSON_NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1538 a[1] = cxJsonCreateLiteral(NULL, CX_JSON_TRUE);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1539 a[2] = cxJsonCreateLiteral(NULL, CX_JSON_FALSE);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1540 a[3] = cxJsonCreateInteger(NULL, 1234);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1541 a[4] = cxJsonCreateInteger(NULL, 5432);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1542 a[5] = cxJsonCreateInteger(NULL, -10);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1543 a[6] = cxJsonCreateInteger(NULL, 0);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1544 a[7] = cxJsonCreateNumber(NULL, 0.0f);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1545 a[8] = cxJsonCreateNumber(NULL, 13.37f);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1546 a[9] = cxJsonCreateNumber(NULL, -123.456f);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1547 a[10] = cxJsonCreateNumber(NULL, 1234.0f);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1548 a[11] = cxJsonCreateNumber(NULL, -10.3f);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1549 a[12] = cxJsonCreateString(NULL, "");
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1550 a[13] = cxJsonCreateString(NULL, "test");
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1551
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1552 CX_TEST_DO {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1553 CxJsonValue *n = cxJsonClone(NULL, NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1554 CX_TEST_ASSERT(n != NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1555 CX_TEST_ASSERT(n->type == CX_JSON_NOTHING);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1556
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1557 for(int i=0;i<14;i++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1558 // make sure the test setup is not broken
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1559 CX_TEST_ASSERT(a[i]->type != CX_JSON_NOTHING);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1560
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1561 CxJsonValue *b = cxJsonClone(a[i], NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1562 CX_TEST_ASSERT(b != NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1563 CX_TEST_ASSERT(a[i]->type == b->type);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1564 CX_TEST_ASSERT(cxJsonCompare(a[i], b) == 0);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1565
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1566 // alternative comparison using cxJsonToString
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1567 cxmutstr aStr = cxJsonToString(a[i], NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1568 cxmutstr bStr = cxJsonToString(b, NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1569 CX_TEST_ASSERT(cx_strcmp(aStr, bStr) == 0);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1570 cxFree(cxDefaultAllocator, aStr.ptr);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1571 cxFree(cxDefaultAllocator, bStr.ptr);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1572
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1573 cxJsonValueFree(b);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1574 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1575
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1576 CxJsonValue *nan1 = cxJsonCreateNumber(NULL, NAN);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1577 CxJsonValue *nan2 = cxJsonClone(nan1, NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1578 CX_TEST_ASSERT(nan2 != NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1579 CX_TEST_ASSERT(nan2->type == CX_JSON_NUMBER);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1580 CX_TEST_ASSERT(isnan(nan2->number));
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1581
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1582 cxJsonValueFree(nan1);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1583 cxJsonValueFree(nan2);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1584 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1585
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1586 for(int i=0;i<14;i++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1587 cxJsonValueFree(a[i]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1588 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1589 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1590
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1591 #ifndef TEST_CLONE_OBJECTS_LARGE_OBJ
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1592 #define TEST_CLONE_OBJECTS_LARGE_OBJ 100
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1593 #endif
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1594 #ifndef TEST_CLONE_OBJECTS_LARGE_ARR
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1595 #define TEST_CLONE_OBJECTS_LARGE_ARR 200
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1596 #endif
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1597 CX_TEST(test_json_clone_objects) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1598 CxJsonValue *a[10];
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1599
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1600 cxJsonFromString(NULL, "{}", &a[0]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1601 cxJsonFromString(NULL, "{ \"key\":\"value\" }", &a[1]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1602 cxJsonFromString(NULL, "{ \"abc\": {} }", &a[2]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1603 cxJsonFromString(NULL, "{ \"abc\": [ false ] }", &a[3]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1604 cxJsonFromString(NULL, "{ \"a4\": { \"x1\": 123, \"x2\": 456 } }", &a[4]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1605 cxJsonFromString(NULL, "{ \"a5\": [ true, false, null ] }", &a[5]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1606 cxJsonFromString(NULL, "{ \"a5\": [ true, false, null, {} ] }", &a[6]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1607 cxJsonFromString(NULL, "{ \"string\": \"hello\", \"int\": 12, \"literal\":true }", &a[7]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1608 cxJsonFromString(NULL,
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1609 "{ \"x0\": {\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1610 " \"x1\": {\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1611 " \"x2\": {\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1612 " \"x3\": {\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1613 " \"x4\": [\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1614 " 1, 2, [3, [4, [[[{\"x5\":6}]]]]]\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1615 " ]\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1616 " }\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1617 " }\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1618 " }\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1619 " }\n"
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1620 "}",
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1621 &a[8]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1622 a[9] = cxJsonCreateObj(NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1623
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1624 // fill the very large object (a[9])
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1625 for(int i=0;i<TEST_CLONE_OBJECTS_LARGE_OBJ;i++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1626 char buf[32];
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1627 snprintf(buf, 32, "int%d", i);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1628 cxJsonObjPutInteger(a[9], buf, i);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1629
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1630
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1631 CxJsonValue *arr = cxJsonCreateArr(NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1632 int64_t *ints = calloc(TEST_CLONE_OBJECTS_LARGE_ARR, sizeof(int64_t));
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1633 for(int n=0;n<TEST_CLONE_OBJECTS_LARGE_ARR;n++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1634 ints[i] = n;
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1635 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1636 cxJsonArrAddIntegers(arr, ints, TEST_CLONE_OBJECTS_LARGE_ARR);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1637 free(ints);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1638 cxJsonObjPut(a[9], "array", arr);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1639 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1640
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1641 CX_TEST_DO {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1642 // TODO: only the first test works yet, change i<1 to i<10 for all tests
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1643 for(int i=0;i<1;i++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1644 CX_TEST_ASSERT(cxJsonIsObject(a[i]));
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1645
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1646 CxJsonValue *b = cxJsonClone(a[i], NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1647
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1648 CX_TEST_ASSERT(b != NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1649 CX_TEST_ASSERT(b->type == a[i]->type);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1650 CX_TEST_ASSERT(cxJsonCompare(a[i], b) == 0);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1651
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1652 // TODO: cxJsonToString(b, NULL) segfaults
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1653 //cxmutstr a_str = cxJsonToString(a[i], NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1654 //cxmutstr b_str = cxJsonToString(b, NULL);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1655 //CX_TEST_ASSERT(cx_strcmp(a_str, b_str) == 0);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1656
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1657 cxJsonValueFree(b);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1658 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1659 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1660
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1661 for(int i=0;i<10;i++) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1662 cxJsonValueFree(a[i]);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1663 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1664 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1665
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1666 CX_TEST(test_json_clone_arrays) {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1667
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1668 CX_TEST_DO {
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1669
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1670 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1671 }
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1672
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
1673
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
1674
1573
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1675 static CxJsonValue *test_json_write_create_test_object(const CxAllocator *allocator) {
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1676 CxJsonValue *obj = cxJsonCreateObj(allocator);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1677 cxJsonObjPutLiteral(obj, "bool", CX_JSON_FALSE);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1678 cxJsonObjPutNumber(obj, "int", 47); // purposely use PutNumber to put an int
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1679 CxJsonValue *strings = cxJsonObjPutArr(obj, "strings");
1582
32b82c424252 removes the CX_STR() macro and instead makes the cx_str() inlinable
Mike Becker <universe@uap-core.de>
parents: 1573
diff changeset
1680 cxJsonArrAddCxStrings(strings, (cxstring[]) {cx_str("hello"), cx_str("world")}, 2);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1681 CxJsonValue *nested = cxJsonObjPutObj(obj, "nested");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1682 CxJsonValue *objects = cxJsonObjPutArr(nested, "objects");
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1683 CxJsonValue *obj_in_arr[2] = {cxJsonCreateObj(allocator), cxJsonCreateObj(allocator)};
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1684 cxJsonObjPutInteger(obj_in_arr[0], "name1", 1);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1685 cxJsonObjPutInteger(obj_in_arr[0], "name2", 3);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1686 cxJsonObjPutInteger(obj_in_arr[1], "name2", 7);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1687 cxJsonObjPutInteger(obj_in_arr[1], "name1", 3);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1688 cxJsonArrAddValues(objects, obj_in_arr, 2);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1689 cxJsonArrAddNumbers(cxJsonObjPutArr(nested, "floats"),
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1690 (double[]){3.1415, 47.11, 8.15}, 3);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1691 cxJsonArrAddLiterals(cxJsonObjPutArr(nested, "literals"),
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1692 (CxJsonLiteral[]){CX_JSON_TRUE, CX_JSON_NULL, CX_JSON_FALSE}, 3);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1693 CxJsonValue *ints = cxJsonObjPutArr(nested, "ints");
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1694 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
1695 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
1696 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
1697 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
1698 cxJsonArrAddIntegers(ints, (int64_t[]){42}, 1);
1573
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1699 return obj;
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1700 }
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1701
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1702 CX_TEST_SUBROUTINE(test_json_write_sub,
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1703 const CxAllocator *allocator,
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1704 cxstring expected,
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1705 const CxJsonWriter *writer
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1706 ) {
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1707 // create the value
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1708 CxJsonValue *obj = test_json_write_create_test_object(allocator);
1080
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1709
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1710 // 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
1711 CxBuffer buf;
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1712 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
1713 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
1714 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
1715 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
1716
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1717 // 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
1718 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
1719
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1720 // destroy everything
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1721 cxBufferDestroy(&buf);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1722 cxJsonValueFree(obj);
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1723 }
e16f4f336e3c add test case for pretty printing with tabs - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1078
diff changeset
1724
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1725 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
1726 CxTestingAllocator talloc;
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1727 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
1728 CxAllocator *allocator = &talloc.base;
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1729 CX_TEST_DO {
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1730 // expected value
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1731 cxstring expected = cx_str(
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1732 "{\"bool\":false,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1733 "\"int\":47,"
1547
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1734 "\"strings\":[\"hello\",\"world\"],"
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1735 "\"nested\":{"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1736 "\"objects\":[{"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1737 "\"name1\":1,"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1738 "\"name2\":3"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1739 "},{"
1547
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1740 "\"name2\":7,"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1741 "\"name1\":3"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1742 "}],"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1743 "\"floats\":[3.1415,47.11,8.15],"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1744 "\"literals\":[true,null,false],"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1745 "\"ints\":[4,8,15,[16,23],42]"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1746 "}"
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1747 "}"
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1748 );
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1749
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1750 CxJsonWriter writer = cxJsonWriterCompact();
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1751 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1752 // try again, but this time with implicitly defaulted writer
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1753 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, NULL);
1081
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1754 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
1755 }
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1756 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
1757 }
33c9d7e7d830 remove code duplication from writer tests - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1080
diff changeset
1758
1078
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1759 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
1760 CxTestingAllocator talloc;
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1761 cx_testing_allocator_init(&talloc);
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1762 CxAllocator *allocator = &talloc.base;
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1763 CX_TEST_DO {
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1764 cxstring expected = cx_str(
1078
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1765 "{\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1766 " \"bool\": false,\n"
ffa8bb4e9288 implement JSON pretty printing - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1075
diff changeset
1767 " \"int\": 47,\n"
1082
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1768 " \"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
1769 " \"nested\": {\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1770 " \"objects\": [{\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1771 " \"name1\": 1,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1772 " \"name2\": 3\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1773 " }, {\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1774 " \"name2\": 7,\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1775 " \"name1\": 3\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1776 " }],\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1777 " \"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
1778 " \"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
1779 " \"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
1780 " }\n"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1781 "}"
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1782 );
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1783
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1784 CxJsonWriter writer = cxJsonWriterPretty(true);
1547
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1785 CX_TEST_CALL_SUBROUTINE(test_json_write_sub, allocator, expected, &writer);
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1786 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1787 }
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1788 cx_testing_allocator_destroy(&talloc);
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1789 }
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1790
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1791 CX_TEST(test_json_write_pretty_default_tabs) {
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1792 CxTestingAllocator talloc;
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1793 cx_testing_allocator_init(&talloc);
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1794 CxAllocator *allocator = &talloc.base;
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1795 CX_TEST_DO {
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1796 cxstring expected = cx_str(
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1797 "{\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1798 "\t\"bool\": false,\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1799 "\t\"int\": 47,\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1800 "\t\"strings\": [\"hello\", \"world\"],\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1801 "\t\"nested\": {\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1802 "\t\t\"objects\": [{\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1803 "\t\t\t\"name1\": 1,\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1804 "\t\t\t\"name2\": 3\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1805 "\t\t}, {\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1806 "\t\t\t\"name2\": 7,\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1807 "\t\t\t\"name1\": 3\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1808 "\t\t}],\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1809 "\t\t\"floats\": [3.1415, 47.11, 8.15],\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1810 "\t\t\"literals\": [true, null, false],\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1811 "\t\t\"ints\": [4, 8, 15, [16, 23], 42]\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1812 "\t}\n"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1813 "}"
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1814 );
12da0654e4a9 replace JSON object member array with kv-list - resolves #762
Mike Becker <universe@uap-core.de>
parents: 1543
diff changeset
1815 CxJsonWriter writer = cxJsonWriterPretty(false);
1082
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1816 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
1817 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
1818 }
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1819 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
1820 }
46cdc8689fc4 implement index array to preserve order of json object members
Mike Becker <universe@uap-core.de>
parents: 1081
diff changeset
1821
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1822 CX_TEST(test_json_write_pretty_deep_nesting) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1823 CxTestingAllocator talloc;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1824 cx_testing_allocator_init(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1825 CxAllocator *allocator = &talloc.base;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1826 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1827 cxstring expected = cx_str(
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1828 "{\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1829 " \"test\": {\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1830 " \"test\": {\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1831 " \"test\": {\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1832 " \"test\": {\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1833 " \"test\": {\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1834 " \"test\": 47\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1835 " }\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1836 " }\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1837 " }\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1838 " }\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1839 " }\n"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1840 "}"
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1841 );
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1842
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1843 CxJsonValue *obj = cxJsonCreateObj(allocator);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1844 CxJsonValue *test = obj;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1845 for (unsigned i = 0 ; i < 5 ; i++) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1846 test = cxJsonObjPutObj(test, "test");
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1847 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1848 cxJsonObjPutInteger(test, "test", 47);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1849
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1850 CxJsonWriter writer = cxJsonWriterPretty(true);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1851 writer.indent = 8;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1852 CxBuffer buf;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1853 cxBufferInit(&buf, NULL, 512, NULL, CX_BUFFER_DEFAULT);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1854 int result = cxJsonWrite(&buf, obj, cxBufferWriteFunc, &writer);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1855 cxBufferTerminate(&buf); // makes debugging easier
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1856 CX_TEST_ASSERT(result == 0);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1857
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1858 // compare the string
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1859 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), expected));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1860
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1861 // destroy everything
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1862 cxBufferDestroy(&buf);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1863 cxJsonValueFree(obj);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1864
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1865 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1866 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1867 cx_testing_allocator_destroy(&talloc);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1868 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1869
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1870 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
1871 CxJsonValue* num = cxJsonCreateNumber(NULL, 3.141592653589793);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1872 CxJsonWriter writer = cxJsonWriterCompact();
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1873 CxBuffer buf;
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1874 cxBufferInit(&buf, NULL, 32, NULL, 0);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1875 CX_TEST_DO {
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1876 // test default settings (6 digits)
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1877 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1878 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "3.141592"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1879
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1880 // test too many digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1881 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1882 writer.frac_max_digits = 200;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1883 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1884 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "3.141592653589793"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1885
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1886 // test 0 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1887 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1888 writer.frac_max_digits = 0;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1889 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1890 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "3"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1891
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1892 // test 2 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1893 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1894 writer.frac_max_digits = 2;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1895 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1896 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "3.14"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1897
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1898 // test 3 digits
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1899 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1900 writer.frac_max_digits = 3;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1901 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1902 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "3.141"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1903
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1904 // test 6 digits, but two are left of the decimal point
1543
7b66371d6da3 use an anonymous union for the CxJsonValue
Mike Becker <universe@uap-core.de>
parents: 1513
diff changeset
1905 num->number = 47.110815;
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1906 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1907 writer.frac_max_digits = 6;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1908 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1909 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "47.110815"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1910
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1911 // test 4 digits with exponent
1543
7b66371d6da3 use an anonymous union for the CxJsonValue
Mike Becker <universe@uap-core.de>
parents: 1513
diff changeset
1912 num->number = 5.11223344e23;
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1913 cxBufferReset(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1914 writer.frac_max_digits = 4;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1915 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1916 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "5.1122e+23"));
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1917 }
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1918 cxBufferDestroy(&buf);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1919 cxJsonValueFree(num);
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1920 }
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
1921
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1922 CX_TEST(test_json_write_string_escape) {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1923 /**
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1924 * 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
1925 * " quotation mark
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1926 * \ reverse solidus
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1927 * / 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
1928 * b backspace
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1929 * f form feed
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1930 * n line feed
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1931 * r carriage return
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1932 * t tab
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1933 * 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
1934 * 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
1935 */
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1936 CxJsonValue* str = cxJsonCreateString(NULL,
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1937 "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
1938 CxJsonWriter writer = cxJsonWriterCompact();
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1939 CxBuffer buf;
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1940 cxBufferInit(&buf, NULL, 128, NULL, 0);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1941 CX_TEST_DO {
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1942 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer));
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1943 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1944 "\"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
1945 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1946 cxBufferDestroy(&buf);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1947 cxJsonValueFree(str);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1948 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1949
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1950 CX_TEST(test_json_write_name_escape) {
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1951 CxJsonValue* obj = cxJsonCreateObj(NULL);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1952 cxJsonObjPutLiteral(obj,
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1953 "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
1954 CxJsonWriter writer = cxJsonWriterCompact();
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1955 CxBuffer buf;
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1956 cxBufferInit(&buf, NULL, 128, NULL, 0);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1957 CX_TEST_DO {
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1958 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, obj, cxBufferWriteFunc, &writer));
1119
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1959 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size),
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1960 "{\"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
1961 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1962 cxBufferDestroy(&buf);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1963 cxJsonValueFree(obj);
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1964 }
ff4d7e76f85a implement string escape - resolves #526
Mike Becker <universe@uap-core.de>
parents: 1117
diff changeset
1965
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1966 CX_TEST(test_json_write_solidus) {
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1967 CxJsonValue* str = cxJsonCreateString(NULL,"test/solidus");
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1968 CxJsonWriter writer = cxJsonWriterCompact();
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1969 CxBuffer buf;
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1970 cxBufferInit(&buf, NULL, 16, NULL, 0);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1971 CX_TEST_DO {
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1972 // default: do not escape
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1973 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1974 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "\"test/solidus\""));
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1975
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1976 // enable escaping
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1977 writer.escape_slash = true;
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1978 cxBufferReset(&buf);
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1979 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1980 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), "\"test\\/solidus\""));
1123
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1981 }
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1982 cxBufferDestroy(&buf);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1983 cxJsonValueFree(str);
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1984 }
2b83302d595a make escaping slashes optional - fixes #569
Mike Becker <universe@uap-core.de>
parents: 1119
diff changeset
1985
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1986 CX_TEST(test_json_write_nothing) {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1987 CxBuffer buf;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1988 cxBufferInit(&buf, NULL, 16, NULL, 0);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1989 CX_TEST_DO {
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1990 CxJsonValue nothing;
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1991 nothing.type = CX_JSON_NOTHING;
1548
12315ee158ad fixes cxJsonWrite() incorrectly returning non-zero when strings needed to be escaped
Mike Becker <universe@uap-core.de>
parents: 1547
diff changeset
1992 CX_TEST_ASSERT(0 == cxJsonWrite(&buf, &nothing, cxBufferWriteFunc, NULL));
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1993 CX_TEST_ASSERT(buf.size == 0);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1994 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1995 cxBufferDestroy(&buf);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1996 }
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
1997
1573
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1998 CX_TEST(test_json_to_string) {
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
1999 CxTestingAllocator talloc;
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2000 cx_testing_allocator_init(&talloc);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2001 CxAllocator *allocator = &talloc.base;
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2002 CX_TEST_DO {
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2003 // expected value
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2004 cxstring expected = cx_str(
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2005 "{\"bool\":false,"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2006 "\"int\":47,"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2007 "\"strings\":[\"hello\",\"world\"],"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2008 "\"nested\":{"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2009 "\"objects\":[{"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2010 "\"name1\":1,"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2011 "\"name2\":3"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2012 "},{"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2013 "\"name2\":7,"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2014 "\"name1\":3"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2015 "}],"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2016 "\"floats\":[3.1415,47.11,8.15],"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2017 "\"literals\":[true,null,false],"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2018 "\"ints\":[4,8,15,[16,23],42]"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2019 "}"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2020 "}"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2021 );
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2022
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2023 CxJsonValue *obj = test_json_write_create_test_object(allocator);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2024 cxmutstr result = cxJsonToString(obj, allocator);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2025 CX_TEST_ASSERT(0 == cx_strcmp(result, expected));
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2026 CX_TEST_ASSERT(result.ptr[result.length] == '\0');
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2027
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2028 cx_strfree_a(allocator, &result);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2029 cxJsonValueFree(obj);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2030
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2031 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2032 }
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2033 cx_testing_allocator_destroy(&talloc);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2034 }
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2035
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2036 CX_TEST(test_json_to_pretty_string) {
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2037 CxTestingAllocator talloc;
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2038 cx_testing_allocator_init(&talloc);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2039 CxAllocator *allocator = &talloc.base;
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2040 CX_TEST_DO {
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2041 cxstring expected = cx_str(
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2042 "{\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2043 " \"bool\": false,\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2044 " \"int\": 47,\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2045 " \"strings\": [\"hello\", \"world\"],\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2046 " \"nested\": {\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2047 " \"objects\": [{\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2048 " \"name1\": 1,\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2049 " \"name2\": 3\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2050 " }, {\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2051 " \"name2\": 7,\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2052 " \"name1\": 3\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2053 " }],\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2054 " \"floats\": [3.1415, 47.11, 8.15],\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2055 " \"literals\": [true, null, false],\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2056 " \"ints\": [4, 8, 15, [16, 23], 42]\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2057 " }\n"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2058 "}"
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2059 );
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2060
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2061 CxJsonValue *obj = test_json_write_create_test_object(allocator);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2062 cxmutstr result = cxJsonToPrettyString(obj, allocator);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2063 CX_TEST_ASSERT(0 == cx_strcmp(result, expected));
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2064 CX_TEST_ASSERT(result.ptr[result.length] == '\0');
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2065
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2066 cx_strfree_a(allocator, &result);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2067 cxJsonValueFree(obj);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2068
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2069 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2070 }
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2071 cx_testing_allocator_destroy(&talloc);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2072 }
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2073
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2074 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
2075 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
2076
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
2077 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
2078 cx_test_register(suite, test_json_simple_object);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2079 cx_test_register(suite, test_json_large_object);
1596
2d2c4ec38133 fix unexpected token error when parsing an empty json array
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1595
diff changeset
2080 cx_test_register(suite, test_json_simple_array);
1556
afdaa70034f8 add cxJsonFromString() - resolves #771
Mike Becker <universe@uap-core.de>
parents: 1548
diff changeset
2081 cx_test_register(suite, test_json_from_string);
1563
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
2082 cx_test_register(suite, test_json_from_string_errors);
6e2f83ef6f5a fix memory leak in the json parser and add more tests for cxJsonFromString - relates to #777
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1556
diff changeset
2083 cx_test_register(suite, test_json_from_string_multiple_values);
1567
f60f23b362e9 fix cxJsonFromString() ignoring unexpected trailing data + fix wrong handling of trailing whitespaces in general
Mike Becker <universe@uap-core.de>
parents: 1563
diff changeset
2084 cx_test_register(suite, test_json_from_string_untrimmed);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
2085 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
2086 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
2087 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
2088 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
2089 cx_test_register(suite, test_json_object_incomplete_token);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2090 cx_test_register(suite, test_json_parenthesis_mismatch);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2091 cx_test_register(suite, test_json_object_name_is_no_string);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
2092 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
2093 cx_test_register(suite, test_json_object_error);
1338
cc153bffea28 add cxJsonObjRemove() #627
Mike Becker <universe@uap-core.de>
parents: 1337
diff changeset
2094 cx_test_register(suite, test_json_object_remove_member);
1007
81b2986d2b04 fix that cxBufferSeek() cannot move pos past the end - fixes #523
Mike Becker <universe@uap-core.de>
parents: 1002
diff changeset
2095 cx_test_register(suite, test_json_subsequent_fill);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2096 cx_test_register(suite, test_json_no_fill);
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2097 cx_test_register(suite, test_json_null_fill);
946
b428424c0214 avoid state buffer allocation for JSON with reasonable nesting depth
Mike Becker <universe@uap-core.de>
parents: 941
diff changeset
2098 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
2099 cx_test_register(suite, test_json_number);
1015
a0922b925d2a increase test coverage
Mike Becker <universe@uap-core.de>
parents: 1007
diff changeset
2100 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
2101 cx_test_register(suite, test_json_multiple_values);
1337
6dfa1eb58ce3 add cxJsonArrayRemove()
Mike Becker <universe@uap-core.de>
parents: 1247
diff changeset
2102 cx_test_register(suite, test_json_array);
1033
e3009345984b add cxJsonArrIter() - fixes #524
Mike Becker <universe@uap-core.de>
parents: 1032
diff changeset
2103 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
2104 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
2105 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
2106 cx_test_register(suite, test_json_create_value);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2107 cx_test_register(suite, test_json_overwrite_value);
1586
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
2108 cx_test_register(suite, test_json_compare_primitives);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
2109 cx_test_register(suite, test_json_compare_objects);
7f1cadc3ebc1 add json compare tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1582
diff changeset
2110 cx_test_register(suite, test_json_compare_arrays);
1595
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
2111 cx_test_register(suite, test_json_clone_primitives);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
2112 cx_test_register(suite, test_json_clone_objects);
2e0353a9bc30 add json clone tests, obj tests still dysfunctional - relates to #785
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1589
diff changeset
2113 cx_test_register(suite, test_json_clone_arrays);
1072
c89283cd559b first mvp for the json writer - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1063
diff changeset
2114 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
2115 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
2116 cx_test_register(suite, test_json_write_pretty_default_tabs);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2117 cx_test_register(suite, test_json_write_pretty_deep_nesting);
1117
54df904472b0 add fractional number formatting - relates to #526
Mike Becker <universe@uap-core.de>
parents: 1112
diff changeset
2118 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
2119 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
2120 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
2121 cx_test_register(suite, test_json_write_solidus);
1513
4d641c6a2f82 implement better strings for json.c + complete test coverage
Mike Becker <universe@uap-core.de>
parents: 1338
diff changeset
2122 cx_test_register(suite, test_json_write_nothing);
1573
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2123 cx_test_register(suite, test_json_to_string);
cd2e974410ad add cxJsonToString() and cxJsonToPrettyString() - resolves #778
Mike Becker <universe@uap-core.de>
parents: 1567
diff changeset
2124 cx_test_register(suite, test_json_to_pretty_string);
977
a941b01b684f add test for reading multiple json values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 975
diff changeset
2125
937
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2126 return suite;
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2127 }
10123f4d5618 add first draft of json implementation - relates to #431
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2128

mercurial