Skip to content

Commit 6cea343

Browse files
update cases
1 parent 707247b commit 6cea343

File tree

1 file changed

+146
-129
lines changed

1 file changed

+146
-129
lines changed

code/tests/cases/test_fson.c

Lines changed: 146 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@
3636
FOSSIL_TEST_SUITE(c_fson_fixture);
3737

3838
FOSSIL_SETUP(c_fson_fixture) {
39-
// Setup for FSON tests
39+
// Setup the test fixture
4040
}
4141

4242
FOSSIL_TEARDOWN(c_fson_fixture) {
43-
// Teardown for FSON tests
43+
// Teardown the test fixture
4444
}
4545

4646
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -51,152 +51,169 @@ FOSSIL_TEARDOWN(c_fson_fixture) {
5151
// as samples for library usage.
5252
// * * * * * * * * * * * * * * * * * * * * * * * *
5353

54-
FOSSIL_TEST_CASE(c_test_fson_new_types_and_free) {
55-
fossil_media_fson_value_t *v_null = fossil_media_fson_new_null();
56-
fossil_media_fson_value_t *v_bool = fossil_media_fson_new_bool(1);
57-
fossil_media_fson_value_t *v_i32 = fossil_media_fson_new_i32(123);
58-
fossil_media_fson_value_t *v_str = fossil_media_fson_new_string("hello");
59-
fossil_media_fson_value_t *v_arr = fossil_media_fson_new_array();
60-
fossil_media_fson_value_t *v_obj = fossil_media_fson_new_object();
61-
fossil_media_fson_value_t *v_f64 = fossil_media_fson_new_f64(3.1415926535);
62-
fossil_media_fson_value_t *v_u32 = fossil_media_fson_new_u32(1);
63-
fossil_media_fson_value_t *v_u16 = fossil_media_fson_new_u16(1024);
64-
fossil_media_fson_value_t *v_f32 = fossil_media_fson_new_f32(30.0f);
65-
fossil_media_fson_value_t *v_char = fossil_media_fson_new_char(65);
66-
ASSUME_NOT_CNULL(v_null);
67-
ASSUME_NOT_CNULL(v_bool);
68-
ASSUME_NOT_CNULL(v_i32);
69-
ASSUME_NOT_CNULL(v_str);
70-
ASSUME_NOT_CNULL(v_arr);
71-
ASSUME_NOT_CNULL(v_obj);
72-
ASSUME_NOT_CNULL(v_f64);
73-
ASSUME_NOT_CNULL(v_u32);
74-
ASSUME_NOT_CNULL(v_u16);
75-
ASSUME_NOT_CNULL(v_f32);
76-
ASSUME_NOT_CNULL(v_char);
77-
fossil_media_fson_free(v_null);
78-
fossil_media_fson_free(v_bool);
79-
fossil_media_fson_free(v_i32);
80-
fossil_media_fson_free(v_str);
81-
fossil_media_fson_free(v_arr);
82-
fossil_media_fson_free(v_obj);
83-
fossil_media_fson_free(v_f64);
84-
fossil_media_fson_free(v_u32);
85-
fossil_media_fson_free(v_u16);
86-
fossil_media_fson_free(v_f32);
87-
fossil_media_fson_free(v_char);
54+
FOSSIL_TEST_CASE(c_test_fson_parse_null) {
55+
fossil_media_fson_error_t err = {0};
56+
const char *json =
57+
"{\n"
58+
" null: null\n"
59+
"}";
60+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
61+
ASSUME_NOT_CNULL(val);
62+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "null");
63+
fossil_media_fson_free(val);
8864
}
8965

90-
FOSSIL_TEST_CASE(c_test_fson_array_append_get_size) {
91-
fossil_media_fson_value_t *arr = fossil_media_fson_new_array();
92-
fossil_media_fson_value_t *v1 = fossil_media_fson_new_i8(1);
93-
fossil_media_fson_value_t *v2 = fossil_media_fson_new_i8(2);
94-
int rc1 = fossil_media_fson_array_append(arr, v1);
95-
int rc2 = fossil_media_fson_array_append(arr, v2);
96-
ASSUME_ITS_EQUAL_I32(rc1, FOSSIL_MEDIA_FSON_OK);
97-
ASSUME_ITS_EQUAL_I32(rc2, FOSSIL_MEDIA_FSON_OK);
98-
ASSUME_NOT_CNULL(fossil_media_fson_array_get(arr, 0));
99-
ASSUME_NOT_CNULL(fossil_media_fson_array_get(arr, 1));
100-
ASSUME_ITS_EQUAL_I32((int)fossil_media_fson_array_size(arr), 2);
101-
102-
// Test array with objects
103-
fossil_media_fson_value_t *colors = fossil_media_fson_new_array();
104-
fossil_media_fson_array_append(colors, fossil_media_fson_new_object());
105-
fossil_media_fson_array_append(colors, fossil_media_fson_new_object());
106-
fossil_media_fson_array_append(colors, fossil_media_fson_new_object());
107-
ASSUME_ITS_EQUAL_I32((int)fossil_media_fson_array_size(colors), 3);
108-
109-
fossil_media_fson_free(arr);
110-
fossil_media_fson_free(colors);
66+
FOSSIL_TEST_CASE(c_test_fson_parse_bool) {
67+
fossil_media_fson_error_t err = {0};
68+
const char *json_true =
69+
"{\n"
70+
" flag: bool: true\n"
71+
"}";
72+
const char *json_false =
73+
"{\n"
74+
" flag: bool: false\n"
75+
"}";
76+
fossil_media_fson_value_t *val_true = fossil_media_fson_parse(json_true, &err);
77+
fossil_media_fson_value_t *val_false = fossil_media_fson_parse(json_false, &err);
78+
ASSUME_NOT_CNULL(val_true);
79+
ASSUME_NOT_CNULL(val_false);
80+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val_true->type), "bool");
81+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val_false->type), "bool");
82+
fossil_media_fson_free(val_true);
83+
fossil_media_fson_free(val_false);
11184
}
11285

113-
FOSSIL_TEST_CASE(c_test_fson_type_name_and_helpers) {
114-
fossil_media_fson_value_t *v_null = fossil_media_fson_new_null();
115-
fossil_media_fson_value_t *v_arr = fossil_media_fson_new_array();
116-
fossil_media_fson_value_t *v_obj = fossil_media_fson_new_object();
117-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_is_null(v_null), 1);
118-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_is_array(v_arr), 1);
119-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_is_object(v_obj), 1);
120-
ASSUME_NOT_CNULL(fossil_media_fson_type_name(v_null->type));
121-
fossil_media_fson_free(v_null);
122-
fossil_media_fson_free(v_arr);
123-
fossil_media_fson_free(v_obj);
86+
FOSSIL_TEST_CASE(c_test_fson_parse_number) {
87+
fossil_media_fson_error_t err = {0};
88+
const char *json =
89+
"{\n"
90+
" num: f64: 42.5\n"
91+
"}";
92+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
93+
ASSUME_NOT_CNULL(val);
94+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "f64");
95+
fossil_media_fson_free(val);
12496
}
12597

126-
FOSSIL_TEST_CASE(c_test_fson_array_object_reserve) {
127-
fossil_media_fson_value_t *arr = fossil_media_fson_new_array();
128-
fossil_media_fson_value_t *obj = fossil_media_fson_new_object();
129-
int rc1 = fossil_media_fson_array_reserve(arr, 10);
130-
int rc2 = fossil_media_fson_object_reserve(obj, 10);
131-
ASSUME_ITS_EQUAL_I32(rc1, FOSSIL_MEDIA_FSON_OK);
132-
ASSUME_ITS_EQUAL_I32(rc2, FOSSIL_MEDIA_FSON_OK);
133-
fossil_media_fson_free(arr);
134-
fossil_media_fson_free(obj);
98+
FOSSIL_TEST_CASE(c_test_fson_parse_string) {
99+
fossil_media_fson_error_t err = {0};
100+
const char *json =
101+
"{\n"
102+
" msg: cstr: \"hello\"\n"
103+
"}";
104+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
105+
ASSUME_NOT_CNULL(val);
106+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "cstr");
107+
fossil_media_fson_free(val);
108+
}
109+
110+
FOSSIL_TEST_CASE(c_test_fson_parse_array) {
111+
fossil_media_fson_error_t err = {0};
112+
const char *json =
113+
"{\n"
114+
" arr: array: [\n"
115+
" 1: i32: 1,\n"
116+
" 2: i32: 2,\n"
117+
" 3: i32: 3\n"
118+
" ]\n"
119+
"}";
120+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
121+
ASSUME_NOT_CNULL(val);
122+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "array");
123+
ASSUME_ITS_EQUAL_SIZE(fossil_media_fson_array_size(val), 3);
124+
fossil_media_fson_free(val);
125+
}
126+
127+
FOSSIL_TEST_CASE(c_test_fson_parse_object) {
128+
fossil_media_fson_error_t err = {0};
129+
const char *json =
130+
"{\n"
131+
" obj: object: {\n"
132+
" a: i32: 1,\n"
133+
" b: i32: 2\n"
134+
" }\n"
135+
"}";
136+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
137+
ASSUME_NOT_CNULL(val);
138+
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "object");
139+
fossil_media_fson_free(val);
140+
}
141+
142+
FOSSIL_TEST_CASE(c_test_fson_stringify_roundtrip) {
143+
fossil_media_fson_error_t err = {0};
144+
const char *json =
145+
"{\n"
146+
" foo: array: [\n"
147+
" 1: i32: 1,\n"
148+
" true: bool: true,\n"
149+
" null: null: null\n"
150+
" ]\n"
151+
"}";
152+
char *out = fossil_media_fson_roundtrip(json, 0, &err);
153+
ASSUME_NOT_CNULL(out);
154+
free(out);
135155
}
136156

137157
FOSSIL_TEST_CASE(c_test_fson_clone_and_equals) {
138-
fossil_media_fson_value_t *v1 = fossil_media_fson_new_i32(123);
139-
fossil_media_fson_value_t *v2 = fossil_media_fson_clone(v1);
140-
ASSUME_NOT_CNULL(v2);
141-
int eq = fossil_media_fson_equals(v1, v2);
158+
fossil_media_fson_error_t err = {0};
159+
const char *json =
160+
"{\n"
161+
" obj: object: {\n"
162+
" a: i32: 1,\n"
163+
" b: array: [\n"
164+
" true: bool: true,\n"
165+
" null: null: null\n"
166+
" ]\n"
167+
" }\n"
168+
"}";
169+
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
170+
ASSUME_NOT_CNULL(val);
171+
172+
fossil_media_fson_value_t *clone = fossil_media_fson_clone(val);
173+
ASSUME_NOT_CNULL(clone);
174+
175+
int eq = fossil_media_fson_equals(val, clone);
142176
ASSUME_ITS_EQUAL_I32(eq, 1);
143177

144-
// Clone complex object
145-
fossil_media_fson_value_t *obj = fossil_media_fson_new_object();
146-
fossil_media_fson_object_set(obj, "name", fossil_media_fson_new_string("Nested Object"));
147-
fossil_media_fson_object_set(obj, "value", fossil_media_fson_new_i32(42));
148-
fossil_media_fson_value_t *obj_clone = fossil_media_fson_clone(obj);
149-
ASSUME_NOT_CNULL(obj_clone);
150-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_equals(obj, obj_clone), 1);
151-
152-
fossil_media_fson_free(v1);
153-
fossil_media_fson_free(v2);
154-
fossil_media_fson_free(obj);
155-
fossil_media_fson_free(obj_clone);
178+
fossil_media_fson_free(val);
179+
fossil_media_fson_free(clone);
156180
}
157181

158-
FOSSIL_TEST_CASE(c_test_fson_number_getters) {
159-
fossil_media_fson_value_t *vi8 = fossil_media_fson_new_i8(-8);
160-
fossil_media_fson_value_t *vu16 = fossil_media_fson_new_u16(65535);
161-
fossil_media_fson_value_t *vf32 = fossil_media_fson_new_f32(3.14f);
162-
int8_t i8; uint16_t u16; float f32;
163-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_i8(vi8, &i8), FOSSIL_MEDIA_FSON_OK);
164-
ASSUME_ITS_EQUAL_I32(i8, -8);
165-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_u16(vu16, &u16), FOSSIL_MEDIA_FSON_OK);
166-
ASSUME_ITS_EQUAL_I32(u16, 65535);
167-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_f32(vf32, &f32), FOSSIL_MEDIA_FSON_OK);
168-
ASSUME_ITS_TRUE(f32 > 3.13f && f32 < 3.15f);
169-
170-
// Test octal, hex, bin
171-
fossil_media_fson_value_t *voct = fossil_media_fson_new_oct(077);
172-
fossil_media_fson_value_t *vhex = fossil_media_fson_new_hex(0xFF);
173-
fossil_media_fson_value_t *vbin = fossil_media_fson_new_bin(42);
174-
uint64_t oct, hex, bin;
175-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_oct(voct, &oct), FOSSIL_MEDIA_FSON_OK);
176-
ASSUME_ITS_EQUAL_I32(oct, 077);
177-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_hex(vhex, &hex), FOSSIL_MEDIA_FSON_OK);
178-
ASSUME_ITS_EQUAL_I32(hex, 0xFF);
179-
ASSUME_ITS_EQUAL_I32(fossil_media_fson_get_bin(vbin, &bin), FOSSIL_MEDIA_FSON_OK);
180-
ASSUME_ITS_EQUAL_I32(bin, 42);
181-
182-
fossil_media_fson_free(vi8);
183-
fossil_media_fson_free(vu16);
184-
fossil_media_fson_free(vf32);
185-
fossil_media_fson_free(voct);
186-
fossil_media_fson_free(vhex);
187-
fossil_media_fson_free(vbin);
182+
FOSSIL_TEST_CASE(c_test_fson_equals_not_equal) {
183+
fossil_media_fson_error_t err = {0};
184+
const char *json1 =
185+
"{\n"
186+
" x: i32: 42\n"
187+
"}";
188+
const char *json2 =
189+
"{\n"
190+
" x: i32: 43\n"
191+
"}";
192+
fossil_media_fson_value_t *val1 = fossil_media_fson_parse(json1, &err);
193+
fossil_media_fson_value_t *val2 = fossil_media_fson_parse(json2, &err);
194+
ASSUME_NOT_CNULL(val1);
195+
ASSUME_NOT_CNULL(val2);
196+
197+
int eq = fossil_media_fson_equals(val1, val2);
198+
ASSUME_ITS_EQUAL_I32(eq, 0);
199+
200+
fossil_media_fson_free(val1);
201+
fossil_media_fson_free(val2);
188202
}
189203

190204
// * * * * * * * * * * * * * * * * * * * * * * * *
191205
// * Fossil Logic Test Pool
192206
// * * * * * * * * * * * * * * * * * * * * * * * *
193207
FOSSIL_TEST_GROUP(c_fson_tests) {
194-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_new_types_and_free);
195-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_array_append_get_size);
196-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_type_name_and_helpers);
197-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_array_object_reserve);
208+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_null);
209+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_bool);
210+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_number);
211+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_string);
212+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_array);
213+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_object);
214+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_stringify_roundtrip);
198215
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_clone_and_equals);
199-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_number_getters);
216+
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_equals_not_equal);
200217

201218
FOSSIL_TEST_REGISTER(c_fson_fixture);
202-
}
219+
} // end of tests

0 commit comments

Comments
 (0)