1 #include <glib-object.h>
4 test_param_value (void)
10 g_value_init (&value, G_TYPE_PARAM);
11 g_assert (G_VALUE_HOLDS_PARAM (&value));
13 p = g_param_spec_int ("my-int", "My Int", "Blurb", 0, 20, 10, G_PARAM_READWRITE);
15 g_value_take_param (&value, p);
16 p2 = g_value_get_param (&value);
19 pp = g_param_spec_uint ("my-uint", "My UInt", "Blurb", 0, 10, 5, G_PARAM_READWRITE);
20 g_value_set_param (&value, pp);
22 p2 = g_value_dup_param (&value);
23 g_assert (p2 == pp); /* param specs use ref/unref for copy/free */
24 g_param_spec_unref (p2);
26 g_value_unset (&value);
29 static gint destroy_count;
32 my_destroy (gpointer data)
38 test_param_qdata (void)
44 q = g_quark_from_string ("bla");
46 p = g_param_spec_int ("my-int", "My Int", "Blurb", 0, 20, 10, G_PARAM_READWRITE);
47 g_param_spec_set_qdata (p, q, "bla");
48 bla = g_param_spec_get_qdata (p, q);
49 g_assert_cmpstr (bla, ==, "bla");
51 g_assert_cmpint (destroy_count, ==, 0);
52 g_param_spec_set_qdata_full (p, q, "bla", my_destroy);
53 g_param_spec_set_qdata_full (p, q, "blabla", my_destroy);
54 g_assert_cmpint (destroy_count, ==, 1);
55 g_assert_cmpstr (g_param_spec_steal_qdata (p, q), ==, "blabla");
56 g_assert_cmpint (destroy_count, ==, 1);
57 g_assert (g_param_spec_get_qdata (p, q) == NULL);
59 g_param_spec_ref_sink (p);
61 g_param_spec_unref (p);
65 test_param_validate (void)
68 GValue value = { 0, };
70 p = g_param_spec_int ("my-int", "My Int", "Blurb", 0, 20, 10, G_PARAM_READWRITE);
72 g_value_init (&value, G_TYPE_INT);
73 g_value_set_int (&value, 100);
74 g_assert (!g_param_value_defaults (p, &value));
75 g_assert (g_param_value_validate (p, &value));
76 g_assert_cmpint (g_value_get_int (&value), ==, 20);
78 g_param_value_set_default (p, &value);
79 g_assert (g_param_value_defaults (p, &value));
80 g_assert_cmpint (g_value_get_int (&value), ==, 10);
82 g_param_spec_unref (p);
86 test_param_strings (void)
90 /* test canonicalization */
91 p = g_param_spec_int ("my_int:bla", "My Int", "Blurb", 0, 20, 10, G_PARAM_READWRITE);
93 g_assert_cmpstr (g_param_spec_get_name (p), ==, "my-int-bla");
94 g_assert_cmpstr (g_param_spec_get_nick (p), ==, "My Int");
95 g_assert_cmpstr (g_param_spec_get_blurb (p), ==, "Blurb");
97 g_param_spec_unref (p);
99 /* test nick defaults to name */
100 p = g_param_spec_int ("my-int", NULL, NULL, 0, 20, 10, G_PARAM_READWRITE);
102 g_assert_cmpstr (g_param_spec_get_name (p), ==, "my-int");
103 g_assert_cmpstr (g_param_spec_get_nick (p), ==, "my-int");
104 g_assert (g_param_spec_get_blurb (p) == NULL);
106 g_param_spec_unref (p);
110 test_param_convert (void)
116 p = g_param_spec_int ("my-int", "My Int", "Blurb", 0, 20, 10, G_PARAM_READWRITE);
117 g_value_init (&v1, G_TYPE_UINT);
118 g_value_set_uint (&v1, 43);
120 g_value_init (&v2, G_TYPE_INT);
121 g_value_set_int (&v2, -4);
123 g_assert (!g_param_value_convert (p, &v1, &v2, TRUE));
124 g_assert_cmpint (g_value_get_int (&v2), ==, -4);
126 g_assert (g_param_value_convert (p, &v1, &v2, FALSE));
127 g_assert_cmpint (g_value_get_int (&v2), ==, 20);
129 g_param_spec_unref (p);
133 test_value_transform (void)
136 GValue dest = { 0, };
138 #define CHECK_INT_CONVERSION(type, getter, value) \
139 g_assert (g_value_type_transformable (G_TYPE_INT, type)); \
140 g_value_init (&src, G_TYPE_INT); \
141 g_value_init (&dest, type); \
142 g_value_set_int (&src, value); \
143 g_assert (g_value_transform (&src, &dest)); \
144 g_assert_cmpint (g_value_get_##getter (&dest), ==, value); \
145 g_value_unset (&src); \
146 g_value_unset (&dest);
148 CHECK_INT_CONVERSION(G_TYPE_CHAR, char, -124)
149 CHECK_INT_CONVERSION(G_TYPE_CHAR, char, 124)
150 CHECK_INT_CONVERSION(G_TYPE_UCHAR, uchar, 0)
151 CHECK_INT_CONVERSION(G_TYPE_UCHAR, uchar, 255)
152 CHECK_INT_CONVERSION(G_TYPE_INT, int, -12345)
153 CHECK_INT_CONVERSION(G_TYPE_INT, int, 12345)
154 CHECK_INT_CONVERSION(G_TYPE_UINT, uint, 0)
155 CHECK_INT_CONVERSION(G_TYPE_UINT, uint, 12345)
156 CHECK_INT_CONVERSION(G_TYPE_LONG, long, -12345678)
157 CHECK_INT_CONVERSION(G_TYPE_ULONG, ulong, 12345678)
158 CHECK_INT_CONVERSION(G_TYPE_INT64, int64, -12345678)
159 CHECK_INT_CONVERSION(G_TYPE_UINT64, uint64, 12345678)
160 CHECK_INT_CONVERSION(G_TYPE_FLOAT, float, 12345678)
161 CHECK_INT_CONVERSION(G_TYPE_DOUBLE, double, 12345678)
163 #define CHECK_UINT_CONVERSION(type, getter, value) \
164 g_assert (g_value_type_transformable (G_TYPE_UINT, type)); \
165 g_value_init (&src, G_TYPE_UINT); \
166 g_value_init (&dest, type); \
167 g_value_set_uint (&src, value); \
168 g_assert (g_value_transform (&src, &dest)); \
169 g_assert_cmpint (g_value_get_##getter (&dest), ==, value); \
170 g_value_unset (&src); \
171 g_value_unset (&dest);
173 CHECK_UINT_CONVERSION(G_TYPE_CHAR, char, 124)
174 CHECK_UINT_CONVERSION(G_TYPE_CHAR, char, 124)
175 CHECK_UINT_CONVERSION(G_TYPE_UCHAR, uchar, 0)
176 CHECK_UINT_CONVERSION(G_TYPE_UCHAR, uchar, 255)
177 CHECK_UINT_CONVERSION(G_TYPE_INT, int, 12345)
178 CHECK_UINT_CONVERSION(G_TYPE_INT, int, 12345)
179 CHECK_UINT_CONVERSION(G_TYPE_UINT, uint, 0)
180 CHECK_UINT_CONVERSION(G_TYPE_UINT, uint, 12345)
181 CHECK_UINT_CONVERSION(G_TYPE_LONG, long, 12345678)
182 CHECK_UINT_CONVERSION(G_TYPE_ULONG, ulong, 12345678)
183 CHECK_UINT_CONVERSION(G_TYPE_INT64, int64, 12345678)
184 CHECK_UINT_CONVERSION(G_TYPE_UINT64, uint64, 12345678)
185 CHECK_UINT_CONVERSION(G_TYPE_FLOAT, float, 12345678)
186 CHECK_UINT_CONVERSION(G_TYPE_DOUBLE, double, 12345678)
188 #define CHECK_BOOLEAN_CONVERSION(type, setter, value) \
189 g_assert (g_value_type_transformable (type, G_TYPE_BOOLEAN)); \
190 g_value_init (&src, type); \
191 g_value_init (&dest, G_TYPE_BOOLEAN); \
192 g_value_set_##setter (&src, value); \
193 g_assert (g_value_transform (&src, &dest)); \
194 g_assert_cmpint (g_value_get_boolean (&dest), ==, TRUE); \
195 g_value_set_##setter (&src, 0); \
196 g_assert (g_value_transform (&src, &dest)); \
197 g_assert_cmpint (g_value_get_boolean (&dest), ==, FALSE); \
198 g_value_unset (&src); \
199 g_value_unset (&dest);
201 CHECK_BOOLEAN_CONVERSION(G_TYPE_INT, int, -12345)
202 CHECK_BOOLEAN_CONVERSION(G_TYPE_UINT, uint, 12345)
203 CHECK_BOOLEAN_CONVERSION(G_TYPE_LONG, long, -12345678)
204 CHECK_BOOLEAN_CONVERSION(G_TYPE_ULONG, ulong, 12345678)
205 CHECK_BOOLEAN_CONVERSION(G_TYPE_INT64, int64, -12345678)
206 CHECK_BOOLEAN_CONVERSION(G_TYPE_UINT64, uint64, 12345678)
208 #define CHECK_STRING_CONVERSION(int_type, setter, int_value) \
209 g_assert (g_value_type_transformable (int_type, G_TYPE_STRING)); \
210 g_value_init (&src, int_type); \
211 g_value_init (&dest, G_TYPE_STRING); \
212 g_value_set_##setter (&src, int_value); \
213 g_assert (g_value_transform (&src, &dest)); \
214 g_assert_cmpstr (g_value_get_string (&dest), ==, #int_value); \
215 g_value_unset (&src); \
216 g_value_unset (&dest);
218 CHECK_STRING_CONVERSION(G_TYPE_INT, int, -12345)
219 CHECK_STRING_CONVERSION(G_TYPE_UINT, uint, 12345)
220 CHECK_STRING_CONVERSION(G_TYPE_LONG, long, -12345678)
221 CHECK_STRING_CONVERSION(G_TYPE_ULONG, ulong, 12345678)
222 CHECK_STRING_CONVERSION(G_TYPE_INT64, int64, -12345678)
223 CHECK_STRING_CONVERSION(G_TYPE_UINT64, uint64, 12345678)
224 CHECK_STRING_CONVERSION(G_TYPE_FLOAT, float, 0.500000)
225 CHECK_STRING_CONVERSION(G_TYPE_DOUBLE, double, -1.234567)
227 g_assert (!g_value_type_transformable (G_TYPE_STRING, G_TYPE_CHAR));
228 g_value_init (&src, G_TYPE_STRING);
229 g_value_init (&dest, G_TYPE_CHAR);
230 g_value_set_static_string (&src, "bla");
231 g_value_set_char (&dest, 'c');
232 g_assert (!g_value_transform (&src, &dest));
233 g_assert_cmpint (g_value_get_char (&dest), ==, 'c');
234 g_value_unset (&src);
235 g_value_unset (&dest);
239 main (int argc, char *argv[])
242 g_test_init (&argc, &argv, NULL);
244 g_test_add_func ("/param/value", test_param_value);
245 g_test_add_func ("/param/strings", test_param_strings);
246 g_test_add_func ("/param/qdata", test_param_qdata);
247 g_test_add_func ("/param/validate", test_param_validate);
248 g_test_add_func ("/param/convert", test_param_convert);
249 g_test_add_func ("/value/transform", test_value_transform);
251 return g_test_run ();