3636FOSSIL_TEST_SUITE (c_fson_fixture );
3737
3838FOSSIL_SETUP (c_fson_fixture ) {
39- // Setup for FSON tests
39+ // Setup the test fixture
4040}
4141
4242FOSSIL_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
137157FOSSIL_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// * * * * * * * * * * * * * * * * * * * * * * * *
193207FOSSIL_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