tizen 2.3.1 release
[external/libjson-glib.git] / json-glib / tests / serialize-simple.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #include <glib-object.h>
6
7 #include <json-glib/json-glib.h>
8 #include <json-glib/json-gobject.h>
9
10 #define TEST_TYPE_OBJECT                (test_object_get_type ())
11 #define TEST_OBJECT(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_OBJECT, TestObject))
12 #define TEST_IS_OBJECT(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_OBJECT))
13 #define TEST_OBJECT_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
14 #define TEST_IS_OBJECT_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
15 #define TEST_OBJECT_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
16
17 typedef struct _TestObject              TestObject;
18 typedef struct _TestObjectClass         TestObjectClass;
19
20 struct _TestObject
21 {
22   GObject parent_instance;
23
24   gint foo;
25   gboolean bar;
26   gchar *baz;
27 };
28
29 struct _TestObjectClass
30 {
31   GObjectClass parent_class;
32 };
33
34 GType test_object_get_type (void);
35
36 /*** implementation ***/
37
38 enum
39 {
40   PROP_0,
41
42   PROP_FOO,
43   PROP_BAR,
44   PROP_BAZ
45 };
46
47 G_DEFINE_TYPE (TestObject, test_object, G_TYPE_OBJECT);
48
49 static void
50 test_object_finalize (GObject *gobject)
51 {
52   g_free (TEST_OBJECT (gobject)->baz);
53
54   G_OBJECT_CLASS (test_object_parent_class)->finalize (gobject);
55 }
56
57 static void
58 test_object_set_property (GObject      *gobject,
59                           guint         prop_id,
60                           const GValue *value,
61                           GParamSpec   *pspec)
62 {
63   switch (prop_id)
64     {
65     case PROP_FOO:
66       TEST_OBJECT (gobject)->foo = g_value_get_int (value);
67       break;
68     case PROP_BAR:
69       TEST_OBJECT (gobject)->bar = g_value_get_boolean (value);
70       break;
71     case PROP_BAZ:
72       g_free (TEST_OBJECT (gobject)->baz);
73       TEST_OBJECT (gobject)->baz = g_value_dup_string (value);
74       break;
75     default:
76       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
77     }
78 }
79
80 static void
81 test_object_get_property (GObject    *gobject,
82                           guint       prop_id,
83                           GValue     *value,
84                           GParamSpec *pspec)
85 {
86   switch (prop_id)
87     {
88     case PROP_FOO:
89       g_value_set_int (value, TEST_OBJECT (gobject)->foo);
90       break;
91     case PROP_BAR:
92       g_value_set_boolean (value, TEST_OBJECT (gobject)->bar);
93       break;
94     case PROP_BAZ:
95       g_value_set_string (value, TEST_OBJECT (gobject)->baz);
96       break;
97     default:
98       G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
99     }
100 }
101
102 static void
103 test_object_class_init (TestObjectClass *klass)
104 {
105   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
106
107   gobject_class->set_property = test_object_set_property;
108   gobject_class->get_property = test_object_get_property;
109   gobject_class->finalize = test_object_finalize;
110
111   g_object_class_install_property (gobject_class,
112                                    PROP_FOO,
113                                    g_param_spec_int ("foo", "Foo", "Foo",
114                                                      0, G_MAXINT, 42,
115                                                      G_PARAM_READWRITE));
116   g_object_class_install_property (gobject_class,
117                                    PROP_BAR,
118                                    g_param_spec_boolean ("bar", "Bar", "Bar",
119                                                          FALSE,
120                                                          G_PARAM_READWRITE));
121   g_object_class_install_property (gobject_class,
122                                    PROP_BAZ,
123                                    g_param_spec_string ("baz", "Baz", "Baz",
124                                                         NULL,
125                                                         G_PARAM_READWRITE));
126 }
127
128 static void
129 test_object_init (TestObject *object)
130 {
131   object->foo = 42;
132   object->bar = FALSE;
133   object->baz = g_strdup ("Test");
134 }
135
136 static void
137 test_serialize (void)
138 {
139   TestObject *obj = g_object_new (TEST_TYPE_OBJECT, "bar", TRUE, NULL);
140   gchar *data;
141   gsize len;
142
143   data = json_gobject_to_data (G_OBJECT (obj), &len);
144
145   g_assert (data != NULL);
146   g_assert_cmpint (len, >, 0);
147   g_assert_cmpint (len, ==, strlen (data));
148
149   if (g_test_verbose ())
150     g_print ("TestObject:\n%s\n", data);
151
152   g_free (data);
153   g_object_unref (obj);
154 }
155
156 int
157 main (int   argc,
158       char *argv[])
159 {
160   g_test_init (&argc, &argv, NULL);
161
162   g_test_add_func ("/serialize/gobject", test_serialize);
163
164   return g_test_run ();
165 }