• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <glib.h>
2 #include <stdlib.h>
3 
4 static void
test_quark_basic(void)5 test_quark_basic (void)
6 {
7   GQuark quark;
8   const gchar *orig = "blargh";
9   gchar *copy;
10   const gchar *str;
11 
12   quark = g_quark_try_string ("no-such-quark");
13   g_assert (quark == 0);
14 
15   copy = g_strdup (orig);
16   quark = g_quark_from_static_string (orig);
17   g_assert (quark != 0);
18   g_assert (g_quark_from_string (orig) == quark);
19   g_assert (g_quark_from_string (copy) == quark);
20   g_assert (g_quark_try_string (orig) == quark);
21 
22   str = g_quark_to_string (quark);
23   g_assert_cmpstr (str, ==, orig);
24 
25   g_free (copy);
26 }
27 
28 static void
test_quark_string(void)29 test_quark_string (void)
30 {
31   const gchar *orig = "string1";
32   gchar *copy;
33   const gchar *str1;
34   const gchar *str2;
35 
36   copy = g_strdup (orig);
37 
38   str1 = g_intern_static_string (orig);
39   str2 = g_intern_string (copy);
40   g_assert (str1 == str2);
41   g_assert (str1 == orig);
42 
43   g_free (copy);
44 }
45 
46 static void
test_dataset_basic(void)47 test_dataset_basic (void)
48 {
49   gpointer location = (gpointer)test_dataset_basic;
50   gpointer other = (gpointer)test_quark_basic;
51   gpointer data = "test1";
52   gpointer ret;
53 
54   g_dataset_set_data (location, "test1", data);
55 
56   ret = g_dataset_get_data (location, "test1");
57   g_assert (ret == data);
58 
59   ret = g_dataset_get_data (location, "test2");
60   g_assert (ret == NULL);
61 
62   ret = g_dataset_get_data (other, "test1");
63   g_assert (ret == NULL);
64 
65   g_dataset_set_data (location, "test1", "new-value");
66   ret = g_dataset_get_data (location, "test1");
67   g_assert (ret != data);
68 
69   g_dataset_remove_data (location, "test1");
70   ret = g_dataset_get_data (location, "test1");
71   g_assert (ret == NULL);
72 
73   ret = g_dataset_get_data (location, NULL);
74   g_assert (ret == NULL);
75 }
76 
77 static gint destroy_count;
78 
79 static void
notify(gpointer data)80 notify (gpointer data)
81 {
82   destroy_count++;
83 }
84 
85 static void
test_dataset_full(void)86 test_dataset_full (void)
87 {
88   gpointer location = (gpointer)test_dataset_full;
89 
90   g_dataset_set_data_full (location, "test1", "test1", notify);
91 
92   destroy_count = 0;
93   g_dataset_set_data (location, "test1", NULL);
94   g_assert (destroy_count == 1);
95 
96   g_dataset_set_data_full (location, "test1", "test1", notify);
97 
98   destroy_count = 0;
99   g_dataset_remove_data (location, "test1");
100   g_assert (destroy_count == 1);
101 
102   g_dataset_set_data_full (location, "test1", "test1", notify);
103 
104   destroy_count = 0;
105   g_dataset_remove_no_notify (location, "test1");
106   g_assert (destroy_count == 0);
107 }
108 
109 static void
foreach(GQuark id,gpointer data,gpointer user_data)110 foreach (GQuark   id,
111          gpointer data,
112          gpointer user_data)
113 {
114   gint *counter = user_data;
115 
116   *counter += 1;
117 }
118 
119 static void
test_dataset_foreach(void)120 test_dataset_foreach (void)
121 {
122   gpointer location = (gpointer)test_dataset_foreach;
123   gint my_count;
124 
125   my_count = 0;
126   g_dataset_set_data_full (location, "test1", "test1", notify);
127   g_dataset_set_data_full (location, "test2", "test2", notify);
128   g_dataset_set_data_full (location, "test3", "test3", notify);
129   g_dataset_foreach (location, foreach, &my_count);
130   g_assert (my_count == 3);
131 
132   g_dataset_destroy (location);
133 }
134 
135 static void
test_dataset_destroy(void)136 test_dataset_destroy (void)
137 {
138   gpointer location = (gpointer)test_dataset_destroy;
139 
140   destroy_count = 0;
141   g_dataset_set_data_full (location, "test1", "test1", notify);
142   g_dataset_set_data_full (location, "test2", "test2", notify);
143   g_dataset_set_data_full (location, "test3", "test3", notify);
144   g_dataset_destroy (location);
145   g_assert (destroy_count == 3);
146 }
147 
148 static void
test_dataset_id(void)149 test_dataset_id (void)
150 {
151   gpointer location = (gpointer)test_dataset_id;
152   gpointer other = (gpointer)test_quark_basic;
153   gpointer data = "test1";
154   gpointer ret;
155   GQuark quark;
156 
157   quark = g_quark_from_string ("test1");
158 
159   g_dataset_id_set_data (location, quark, data);
160 
161   ret = g_dataset_id_get_data (location, quark);
162   g_assert (ret == data);
163 
164   ret = g_dataset_id_get_data (location, g_quark_from_string ("test2"));
165   g_assert (ret == NULL);
166 
167   ret = g_dataset_id_get_data (other, quark);
168   g_assert (ret == NULL);
169 
170   g_dataset_id_set_data (location, quark, "new-value");
171   ret = g_dataset_id_get_data (location, quark);
172   g_assert (ret != data);
173 
174   g_dataset_id_remove_data (location, quark);
175   ret = g_dataset_id_get_data (location, quark);
176   g_assert (ret == NULL);
177 
178   ret = g_dataset_id_get_data (location, 0);
179   g_assert (ret == NULL);
180 }
181 
182 static GData *list;
183 
184 static void
free_one(gpointer data)185 free_one (gpointer data)
186 {
187   /* recurse */
188   g_datalist_clear (&list);
189 }
190 
191 static void
test_datalist_clear(void)192 test_datalist_clear (void)
193 {
194   /* Need to use a subprocess because it will deadlock if it fails */
195   if (g_test_subprocess ())
196     {
197       g_datalist_init (&list);
198       g_datalist_set_data_full (&list, "one", GINT_TO_POINTER (1), free_one);
199       g_datalist_set_data_full (&list, "two", GINT_TO_POINTER (2), NULL);
200       g_datalist_clear (&list);
201       g_assert (list == NULL);
202       return;
203     }
204 
205   g_test_trap_subprocess (NULL, 500000, 0);
206   g_test_trap_assert_passed ();
207 }
208 
209 static void
test_datalist_basic(void)210 test_datalist_basic (void)
211 {
212   GData *list = NULL;
213   gpointer data;
214   gpointer ret;
215 
216   g_datalist_init (&list);
217   data = "one";
218   g_datalist_set_data (&list, "one", data);
219   ret = g_datalist_get_data (&list, "one");
220   g_assert (ret == data);
221 
222   ret = g_datalist_get_data (&list, "two");
223   g_assert (ret == NULL);
224 
225   ret = g_datalist_get_data (&list, NULL);
226   g_assert (ret == NULL);
227 
228   g_datalist_clear (&list);
229 }
230 
231 static void
test_datalist_id(void)232 test_datalist_id (void)
233 {
234   GData *list = NULL;
235   gpointer data;
236   gpointer ret;
237 
238   g_datalist_init (&list);
239   data = "one";
240   g_datalist_id_set_data (&list, g_quark_from_string ("one"), data);
241   ret = g_datalist_id_get_data (&list, g_quark_from_string ("one"));
242   g_assert (ret == data);
243 
244   ret = g_datalist_id_get_data (&list, g_quark_from_string ("two"));
245   g_assert (ret == NULL);
246 
247   ret = g_datalist_id_get_data (&list, 0);
248   g_assert (ret == NULL);
249 
250   g_datalist_clear (&list);
251 }
252 
253 int
main(int argc,char * argv[])254 main (int argc, char *argv[])
255 {
256   g_test_init (&argc, &argv, NULL);
257 
258   g_test_add_func ("/quark/basic", test_quark_basic);
259   g_test_add_func ("/quark/string", test_quark_string);
260   g_test_add_func ("/dataset/basic", test_dataset_basic);
261   g_test_add_func ("/dataset/id", test_dataset_id);
262   g_test_add_func ("/dataset/full", test_dataset_full);
263   g_test_add_func ("/dataset/foreach", test_dataset_foreach);
264   g_test_add_func ("/dataset/destroy", test_dataset_destroy);
265   g_test_add_func ("/datalist/basic", test_datalist_basic);
266   g_test_add_func ("/datalist/id", test_datalist_id);
267   g_test_add_func ("/datalist/recursive-clear", test_datalist_clear);
268 
269   return g_test_run ();
270 }
271