Add a missing json_object_get() so we don't try to use a freed object in test1.
[platform/upstream/json-c.git] / tests / test1.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stddef.h>
4 #include <string.h>
5 #include <assert.h>
6
7 #include "json.h"
8 #include "parse_flags.h"
9
10 static int sort_fn (const void *j1, const void *j2)
11 {
12         json_object * const *jso1, * const *jso2;
13         int i1, i2;
14
15         jso1 = (json_object* const*)j1;
16         jso2 = (json_object* const*)j2;
17         if (!*jso1 && !*jso2)
18                 return 0;
19         if (!*jso1)
20                 return -1;
21         if (!*jso2)
22                 return 1;
23
24         i1 = json_object_get_int(*jso1);
25         i2 = json_object_get_int(*jso2);
26
27         return i1 - i2;
28 }
29
30 #ifdef TEST_FORMATTED
31 #define json_object_to_json_string(obj) json_object_to_json_string_ext(obj,sflags)
32 #else
33 /* no special define */
34 #endif
35
36 int main(int argc, char **argv)
37 {
38         json_object *my_string, *my_int, *my_object, *my_array;
39         int i;
40 #ifdef TEST_FORMATTED
41         int sflags = 0;
42 #endif
43
44         MC_SET_DEBUG(1);
45
46 #ifdef TEST_FORMATTED
47         sflags = parse_flags(argc, argv);
48 #endif
49
50         my_string = json_object_new_string("\t");
51         printf("my_string=%s\n", json_object_get_string(my_string));
52         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
53         json_object_put(my_string);
54
55         my_string = json_object_new_string("\\");
56         printf("my_string=%s\n", json_object_get_string(my_string));
57         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
58         json_object_put(my_string);
59
60         my_string = json_object_new_string("foo");
61         printf("my_string=%s\n", json_object_get_string(my_string));
62         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
63
64         my_int = json_object_new_int(9);
65         printf("my_int=%d\n", json_object_get_int(my_int));
66         printf("my_int.to_string()=%s\n", json_object_to_json_string(my_int));
67
68         my_array = json_object_new_array();
69         json_object_array_add(my_array, json_object_new_int(1));
70         json_object_array_add(my_array, json_object_new_int(2));
71         json_object_array_add(my_array, json_object_new_int(3));
72         json_object_array_put_idx(my_array, 4, json_object_new_int(5));
73         printf("my_array=\n");
74         for(i=0; i < json_object_array_length(my_array); i++)
75         {
76                 json_object *obj = json_object_array_get_idx(my_array, i);
77                 printf("\t[%d]=%s\n", i, json_object_to_json_string(obj));
78         }
79         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));    
80
81         json_object_put(my_array);
82
83         my_array = json_object_new_array();
84         json_object_array_add(my_array, json_object_new_int(3));
85         json_object_array_add(my_array, json_object_new_int(1));
86         json_object_array_add(my_array, json_object_new_int(2));
87         json_object_array_put_idx(my_array, 4, json_object_new_int(0));
88         printf("my_array=\n");
89         for(i=0; i < json_object_array_length(my_array); i++)
90         {
91                 json_object *obj = json_object_array_get_idx(my_array, i);
92                 printf("\t[%d]=%s\n", i, json_object_to_json_string(obj));
93         }
94         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));    
95         json_object_array_sort(my_array, sort_fn);
96         printf("my_array=\n");
97         for(i=0; i < json_object_array_length(my_array); i++)
98         {
99                 json_object *obj = json_object_array_get_idx(my_array, i);
100                 printf("\t[%d]=%s\n", i, json_object_to_json_string(obj));
101         }
102         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));    
103
104         my_object = json_object_new_object();
105         json_object_object_add(my_object, "abc", json_object_new_int(12));
106         json_object_object_add(my_object, "foo", json_object_new_string("bar"));
107         json_object_object_add(my_object, "bool0", json_object_new_boolean(0));
108         json_object_object_add(my_object, "bool1", json_object_new_boolean(1));
109         json_object_object_add(my_object, "baz", json_object_new_string("bang"));
110
111         json_object *baz_obj = json_object_new_string("fark");
112         json_object_get(baz_obj);
113         json_object_object_add(my_object, "baz", baz_obj);
114         json_object_object_del(my_object, "baz");
115
116         /* baz_obj should still be valid */
117         printf("baz_obj.to_string()=%s\n", json_object_to_json_string(baz_obj));
118         json_object_put(baz_obj);
119
120         /*json_object_object_add(my_object, "arr", my_array);*/
121         printf("my_object=\n");
122         json_object_object_foreach(my_object, key, val)
123         {
124                 printf("\t%s: %s\n", key, json_object_to_json_string(val));
125         }
126         printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object));
127
128         json_object_put(my_string);
129         json_object_put(my_int);
130         json_object_put(my_object);
131         json_object_put(my_array);
132
133         return 0;
134 }