• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GLib testing framework examples and tests
2  *
3  * Copyright (C) 2008 Red Hat, Inc.
4  *
5  * This work is provided "as is"; redistribution and modification
6  * in whole or in part, in any medium, physical or electronic is
7  * permitted without restriction.
8  *
9  * This work is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12  *
13  * In no event shall the authors or contributors be liable for any
14  * direct, indirect, incidental, special, exemplary, or consequential
15  * damages (including, but not limited to, procurement of substitute
16  * goods or services; loss of use, data, or profits; or business
17  * interruption) however caused and on any theory of liability, whether
18  * in contract, strict liability, or tort (including negligence or
19  * otherwise) arising in any way out of the use of this software, even
20  * if advised of the possibility of such damage.
21  *
22  * Authors: David Zeuthen <davidz@redhat.com>
23  */
24 
25 #include <glib/glib.h>
26 #include <gio/gio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 
30 static void
test_g_icon_to_string(void)31 test_g_icon_to_string (void)
32 {
33   GIcon *icon;
34   GIcon *icon2;
35   GIcon *icon3;
36   GIcon *icon4;
37   GIcon *icon5;
38   GEmblem *emblem1;
39   GEmblem *emblem2;
40   const char *uri;
41   GFile *location;
42   char *data;
43   GError *error;
44   gint origin;
45   GIcon *i;
46   GFile *file;
47 
48   error = NULL;
49 
50   /* check that GFileIcon and GThemedIcon serialize to the encoding specified */
51 
52   uri = "file:///some/native/path/to/an/icon.png";
53   location = g_file_new_for_uri (uri);
54   icon = g_file_icon_new (location);
55 
56   g_object_get (icon, "file", &file, NULL);
57   g_assert (file == location);
58   g_object_unref (file);
59 
60   data = g_icon_to_string (icon);
61   g_assert_cmpstr (data, ==, G_DIR_SEPARATOR_S "some" G_DIR_SEPARATOR_S "native" G_DIR_SEPARATOR_S "path" G_DIR_SEPARATOR_S "to" G_DIR_SEPARATOR_S "an" G_DIR_SEPARATOR_S "icon.png");
62   icon2 = g_icon_new_for_string (data, &error);
63   g_assert_no_error (error);
64   g_assert (g_icon_equal (icon, icon2));
65   g_free (data);
66   g_object_unref (icon);
67   g_object_unref (icon2);
68   g_object_unref (location);
69 
70   uri = "file:///some/native/path/to/an/icon with spaces.png";
71   location = g_file_new_for_uri (uri);
72   icon = g_file_icon_new (location);
73   data = g_icon_to_string (icon);
74   g_assert_cmpstr (data, ==, G_DIR_SEPARATOR_S "some" G_DIR_SEPARATOR_S "native" G_DIR_SEPARATOR_S "path" G_DIR_SEPARATOR_S "to" G_DIR_SEPARATOR_S "an" G_DIR_SEPARATOR_S "icon with spaces.png");
75   icon2 = g_icon_new_for_string (data, &error);
76   g_assert_no_error (error);
77   g_assert (g_icon_equal (icon, icon2));
78   g_free (data);
79   g_object_unref (icon);
80   g_object_unref (icon2);
81   g_object_unref (location);
82 
83   uri = "sftp:///some/non-native/path/to/an/icon.png";
84   location = g_file_new_for_uri (uri);
85   icon = g_file_icon_new (location);
86   data = g_icon_to_string (icon);
87   g_assert_cmpstr (data, ==, "sftp:///some/non-native/path/to/an/icon.png");
88   icon2 = g_icon_new_for_string (data, &error);
89   g_assert_no_error (error);
90   g_assert (g_icon_equal (icon, icon2));
91   g_free (data);
92   g_object_unref (icon);
93   g_object_unref (icon2);
94   g_object_unref (location);
95 
96 #if 0
97   uri = "sftp:///some/non-native/path/to/an/icon with spaces.png";
98   location = g_file_new_for_uri (uri);
99   icon = g_file_icon_new (location);
100   data = g_icon_to_string (icon);
101   g_assert_cmpstr (data, ==, "sftp:///some/non-native/path/to/an/icon%20with%20spaces.png");
102   icon2 = g_icon_new_for_string (data, &error);
103   g_assert_no_error (error);
104   g_assert (g_icon_equal (icon, icon2));
105   g_free (data);
106   g_object_unref (icon);
107   g_object_unref (icon2);
108   g_object_unref (location);
109 #endif
110 
111   icon = g_themed_icon_new_with_default_fallbacks ("some-icon-symbolic");
112   g_themed_icon_append_name (G_THEMED_ICON (icon), "some-other-icon");
113   data = g_icon_to_string (icon);
114   g_assert_cmpstr (data, ==, ". GThemedIcon "
115                              "some-icon-symbolic some-symbolic some-other-icon some-other some "
116                              "some-icon some-other-icon-symbolic some-other-symbolic");
117   g_free (data);
118   g_object_unref (icon);
119 
120   icon = g_themed_icon_new ("network-server");
121   data = g_icon_to_string (icon);
122   g_assert_cmpstr (data, ==, "network-server");
123   icon2 = g_icon_new_for_string (data, &error);
124   g_assert_no_error (error);
125   g_assert (g_icon_equal (icon, icon2));
126   g_free (data);
127   g_object_unref (icon);
128   g_object_unref (icon2);
129 
130   icon = g_themed_icon_new_with_default_fallbacks ("network-server");
131   data = g_icon_to_string (icon);
132   g_assert_cmpstr (data, ==, ". GThemedIcon network-server network network-server-symbolic network-symbolic");
133   icon2 = g_icon_new_for_string (data, &error);
134   g_assert_no_error (error);
135   g_assert (g_icon_equal (icon, icon2));
136   g_free (data);
137   g_object_unref (icon);
138   g_object_unref (icon2);
139 
140   /* Check that we can serialize from well-known specified formats */
141   icon = g_icon_new_for_string ("network-server%", &error);
142   g_assert_no_error (error);
143   icon2 = g_themed_icon_new ("network-server%");
144   g_assert (g_icon_equal (icon, icon2));
145   g_object_unref (icon);
146   g_object_unref (icon2);
147 
148   icon = g_icon_new_for_string ("/path/to/somewhere.png", &error);
149   g_assert_no_error (error);
150   location = g_file_new_for_commandline_arg ("/path/to/somewhere.png");
151   icon2 = g_file_icon_new (location);
152   g_assert (g_icon_equal (icon, icon2));
153   g_object_unref (icon);
154   g_object_unref (icon2);
155   g_object_unref (location);
156 
157   icon = g_icon_new_for_string ("/path/to/somewhere with whitespace.png", &error);
158   g_assert_no_error (error);
159   data = g_icon_to_string (icon);
160   g_assert_cmpstr (data, ==, G_DIR_SEPARATOR_S "path" G_DIR_SEPARATOR_S "to" G_DIR_SEPARATOR_S "somewhere with whitespace.png");
161   g_free (data);
162   location = g_file_new_for_commandline_arg ("/path/to/somewhere with whitespace.png");
163   icon2 = g_file_icon_new (location);
164   g_assert (g_icon_equal (icon, icon2));
165   g_object_unref (location);
166   g_object_unref (icon2);
167   location = g_file_new_for_commandline_arg ("/path/to/somewhere%20with%20whitespace.png");
168   icon2 = g_file_icon_new (location);
169   g_assert (!g_icon_equal (icon, icon2));
170   g_object_unref (location);
171   g_object_unref (icon2);
172   g_object_unref (icon);
173 
174   icon = g_icon_new_for_string ("sftp:///path/to/somewhere.png", &error);
175   g_assert_no_error (error);
176   data = g_icon_to_string (icon);
177   g_assert_cmpstr (data, ==, "sftp:///path/to/somewhere.png");
178   g_free (data);
179   location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere.png");
180   icon2 = g_file_icon_new (location);
181   g_assert (g_icon_equal (icon, icon2));
182   g_object_unref (icon);
183   g_object_unref (icon2);
184   g_object_unref (location);
185 
186 #if 0
187   icon = g_icon_new_for_string ("sftp:///path/to/somewhere with whitespace.png", &error);
188   g_assert_no_error (error);
189   data = g_icon_to_string (icon);
190   g_assert_cmpstr (data, ==, "sftp:///path/to/somewhere%20with%20whitespace.png");
191   g_free (data);
192   location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere with whitespace.png");
193   icon2 = g_file_icon_new (location);
194   g_assert (g_icon_equal (icon, icon2));
195   g_object_unref (location);
196   g_object_unref (icon2);
197   location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere%20with%20whitespace.png");
198   icon2 = g_file_icon_new (location);
199   g_assert (g_icon_equal (icon, icon2));
200   g_object_unref (location);
201   g_object_unref (icon2);
202   g_object_unref (icon);
203 #endif
204 
205   /* Check that GThemedIcon serialization works */
206 
207   icon = g_themed_icon_new ("network-server");
208   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
209   data = g_icon_to_string (icon);
210   icon2 = g_icon_new_for_string (data, &error);
211   g_assert_no_error (error);
212   g_assert (g_icon_equal (icon, icon2));
213   g_free (data);
214   g_object_unref (icon);
215   g_object_unref (icon2);
216 
217   icon = g_themed_icon_new ("icon name with whitespace");
218   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
219   data = g_icon_to_string (icon);
220   icon2 = g_icon_new_for_string (data, &error);
221   g_assert_no_error (error);
222   g_assert (g_icon_equal (icon, icon2));
223   g_free (data);
224   g_object_unref (icon);
225   g_object_unref (icon2);
226 
227   icon = g_themed_icon_new_with_default_fallbacks ("network-server-xyz");
228   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
229   data = g_icon_to_string (icon);
230   icon2 = g_icon_new_for_string (data, &error);
231   g_assert_no_error (error);
232   g_assert (g_icon_equal (icon, icon2));
233   g_free (data);
234   g_object_unref (icon);
235   g_object_unref (icon2);
236 
237   /* Check that GEmblemedIcon serialization works */
238 
239   icon = g_themed_icon_new ("face-smirk");
240   icon2 = g_themed_icon_new ("emblem-important");
241   g_themed_icon_append_name (G_THEMED_ICON (icon2), "emblem-shared");
242   location = g_file_new_for_uri ("file:///some/path/somewhere.png");
243   icon3 = g_file_icon_new (location);
244   g_object_unref (location);
245   emblem1 = g_emblem_new_with_origin (icon2, G_EMBLEM_ORIGIN_DEVICE);
246   emblem2 = g_emblem_new_with_origin (icon3, G_EMBLEM_ORIGIN_LIVEMETADATA);
247   icon4 = g_emblemed_icon_new (icon, emblem1);
248   g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (icon4), emblem2);
249   data = g_icon_to_string (icon4);
250   icon5 = g_icon_new_for_string (data, &error);
251   g_assert_no_error (error);
252   g_assert (g_icon_equal (icon4, icon5));
253 
254   g_object_get (emblem1, "origin", &origin, "icon", &i, NULL);
255   g_assert (origin == G_EMBLEM_ORIGIN_DEVICE);
256   g_assert (i == icon2);
257   g_object_unref (i);
258 
259   g_object_unref (emblem1);
260   g_object_unref (emblem2);
261   g_object_unref (icon);
262   g_object_unref (icon2);
263   g_object_unref (icon3);
264   g_object_unref (icon4);
265   g_object_unref (icon5);
266   g_free (data);
267 }
268 
269 static void
test_g_icon_serialize(void)270 test_g_icon_serialize (void)
271 {
272   GIcon *icon;
273   GIcon *icon2;
274   GIcon *icon3;
275   GIcon *icon4;
276   GIcon *icon5;
277   GEmblem *emblem1;
278   GEmblem *emblem2;
279   GFile *location;
280   GVariant *data;
281   gint origin;
282   GIcon *i;
283 
284   /* Check that we can deserialize from well-known specified formats */
285   data = g_variant_new_string ("network-server%");
286   icon = g_icon_deserialize (g_variant_ref_sink (data));
287   g_variant_unref (data);
288   icon2 = g_themed_icon_new ("network-server%");
289   g_assert (g_icon_equal (icon, icon2));
290   g_object_unref (icon);
291   g_object_unref (icon2);
292 
293   data = g_variant_new_string ("/path/to/somewhere.png");
294   icon = g_icon_deserialize (g_variant_ref_sink (data));
295   g_variant_unref (data);
296   location = g_file_new_for_commandline_arg ("/path/to/somewhere.png");
297   icon2 = g_file_icon_new (location);
298   g_assert (g_icon_equal (icon, icon2));
299   g_object_unref (icon);
300   g_object_unref (icon2);
301   g_object_unref (location);
302 
303   data = g_variant_new_string ("/path/to/somewhere with whitespace.png");
304   icon = g_icon_deserialize (g_variant_ref_sink (data));
305   g_variant_unref (data);
306   location = g_file_new_for_commandline_arg ("/path/to/somewhere with whitespace.png");
307   icon2 = g_file_icon_new (location);
308   g_assert (g_icon_equal (icon, icon2));
309   g_object_unref (location);
310   g_object_unref (icon2);
311   location = g_file_new_for_commandline_arg ("/path/to/somewhere%20with%20whitespace.png");
312   icon2 = g_file_icon_new (location);
313   g_assert (!g_icon_equal (icon, icon2));
314   g_object_unref (location);
315   g_object_unref (icon2);
316   g_object_unref (icon);
317 
318   data = g_variant_new_string ("sftp:///path/to/somewhere.png");
319   icon = g_icon_deserialize (g_variant_ref_sink (data));
320   g_variant_unref (data);
321   location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere.png");
322   icon2 = g_file_icon_new (location);
323   g_assert (g_icon_equal (icon, icon2));
324   g_object_unref (icon);
325   g_object_unref (icon2);
326   g_object_unref (location);
327 
328   /* Check that GThemedIcon serialization works */
329 
330   icon = g_themed_icon_new ("network-server");
331   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
332   data = g_icon_serialize (icon);
333   icon2 = g_icon_deserialize (data);
334   g_assert (g_icon_equal (icon, icon2));
335   g_variant_unref (data);
336   g_object_unref (icon);
337   g_object_unref (icon2);
338 
339   icon = g_themed_icon_new ("icon name with whitespace");
340   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
341   data = g_icon_serialize (icon);
342   icon2 = g_icon_deserialize (data);
343   g_assert (g_icon_equal (icon, icon2));
344   g_variant_unref (data);
345   g_object_unref (icon);
346   g_object_unref (icon2);
347 
348   icon = g_themed_icon_new_with_default_fallbacks ("network-server-xyz");
349   g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
350   data = g_icon_serialize (icon);
351   icon2 = g_icon_deserialize (data);
352   g_assert (g_icon_equal (icon, icon2));
353   g_variant_unref (data);
354   g_object_unref (icon);
355   g_object_unref (icon2);
356 
357   /* Check that GEmblemedIcon serialization works */
358 
359   icon = g_themed_icon_new ("face-smirk");
360   icon2 = g_themed_icon_new ("emblem-important");
361   g_themed_icon_append_name (G_THEMED_ICON (icon2), "emblem-shared");
362   location = g_file_new_for_uri ("file:///some/path/somewhere.png");
363   icon3 = g_file_icon_new (location);
364   g_object_unref (location);
365   emblem1 = g_emblem_new_with_origin (icon2, G_EMBLEM_ORIGIN_DEVICE);
366   emblem2 = g_emblem_new_with_origin (icon3, G_EMBLEM_ORIGIN_LIVEMETADATA);
367   icon4 = g_emblemed_icon_new (icon, emblem1);
368   g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (icon4), emblem2);
369   data = g_icon_serialize (icon4);
370   icon5 = g_icon_deserialize (data);
371   g_assert (g_icon_equal (icon4, icon5));
372 
373   g_object_get (emblem1, "origin", &origin, "icon", &i, NULL);
374   g_assert (origin == G_EMBLEM_ORIGIN_DEVICE);
375   g_assert (i == icon2);
376   g_object_unref (i);
377 
378   g_object_unref (emblem1);
379   g_object_unref (emblem2);
380   g_object_unref (icon);
381   g_object_unref (icon2);
382   g_object_unref (icon3);
383   g_object_unref (icon4);
384   g_object_unref (icon5);
385   g_variant_unref (data);
386 }
387 
388 static void
test_themed_icon(void)389 test_themed_icon (void)
390 {
391   GIcon *icon1, *icon2, *icon3, *icon4;
392   const gchar *const *names;
393   const gchar *names2[] = { "first-symbolic", "testicon", "last", NULL };
394   gchar *str;
395   gboolean fallbacks;
396   GVariant *variant;
397 
398   icon1 = g_themed_icon_new ("testicon");
399 
400   g_object_get (icon1, "use-default-fallbacks", &fallbacks, NULL);
401   g_assert (!fallbacks);
402 
403   names = g_themed_icon_get_names (G_THEMED_ICON (icon1));
404   g_assert_cmpint (g_strv_length ((gchar **)names), ==, 2);
405   g_assert_cmpstr (names[0], ==, "testicon");
406   g_assert_cmpstr (names[1], ==, "testicon-symbolic");
407 
408   g_themed_icon_prepend_name (G_THEMED_ICON (icon1), "first-symbolic");
409   g_themed_icon_append_name (G_THEMED_ICON (icon1), "last");
410   names = g_themed_icon_get_names (G_THEMED_ICON (icon1));
411   g_assert_cmpint (g_strv_length ((gchar **)names), ==, 6);
412   g_assert_cmpstr (names[0], ==, "first-symbolic");
413   g_assert_cmpstr (names[1], ==, "testicon");
414   g_assert_cmpstr (names[2], ==, "last");
415   g_assert_cmpstr (names[3], ==, "first");
416   g_assert_cmpstr (names[4], ==, "testicon-symbolic");
417   g_assert_cmpstr (names[5], ==, "last-symbolic");
418   g_assert_cmpuint (g_icon_hash (icon1), ==, 1812785139);
419 
420   icon2 = g_themed_icon_new_from_names ((gchar**)names2, -1);
421   g_assert (g_icon_equal (icon1, icon2));
422 
423   str = g_icon_to_string (icon2);
424   icon3 = g_icon_new_for_string (str, NULL);
425   g_assert (g_icon_equal (icon2, icon3));
426   g_free (str);
427 
428   variant = g_icon_serialize (icon3);
429   icon4 = g_icon_deserialize (variant);
430   g_assert (g_icon_equal (icon3, icon4));
431   g_assert (g_icon_hash (icon3) == g_icon_hash (icon4));
432   g_variant_unref (variant);
433 
434   g_object_unref (icon1);
435   g_object_unref (icon2);
436   g_object_unref (icon3);
437   g_object_unref (icon4);
438 }
439 
440 static void
test_emblemed_icon(void)441 test_emblemed_icon (void)
442 {
443   GIcon *icon;
444   GIcon *icon1, *icon2, *icon3, *icon4, *icon5;
445   GEmblem *emblem, *emblem1, *emblem2;
446   GList *emblems;
447   GVariant *variant;
448 
449   icon1 = g_themed_icon_new ("testicon");
450   icon2 = g_themed_icon_new ("testemblem");
451   emblem1 = g_emblem_new (icon2);
452   emblem2 = g_emblem_new_with_origin (icon2, G_EMBLEM_ORIGIN_TAG);
453 
454   icon3 = g_emblemed_icon_new (icon1, emblem1);
455   emblems = g_emblemed_icon_get_emblems (G_EMBLEMED_ICON (icon3));
456   g_assert_cmpint (g_list_length (emblems), ==, 1);
457   g_assert (g_emblemed_icon_get_icon (G_EMBLEMED_ICON (icon3)) == icon1);
458 
459   icon4 = g_emblemed_icon_new (icon1, emblem1);
460   g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (icon4), emblem2);
461   emblems = g_emblemed_icon_get_emblems (G_EMBLEMED_ICON (icon4));
462   g_assert_cmpint (g_list_length (emblems), ==, 2);
463 
464   g_assert (!g_icon_equal (icon3, icon4));
465 
466   variant = g_icon_serialize (icon4);
467   icon5 = g_icon_deserialize (variant);
468   g_assert (g_icon_equal (icon4, icon5));
469   g_assert (g_icon_hash (icon4) == g_icon_hash (icon5));
470   g_variant_unref (variant);
471 
472   emblem = emblems->data;
473   g_assert (g_emblem_get_icon (emblem) == icon2);
474   g_assert (g_emblem_get_origin (emblem) == G_EMBLEM_ORIGIN_UNKNOWN);
475 
476   emblem = emblems->next->data;
477   g_assert (g_emblem_get_icon (emblem) == icon2);
478   g_assert (g_emblem_get_origin (emblem) == G_EMBLEM_ORIGIN_TAG);
479 
480   g_emblemed_icon_clear_emblems (G_EMBLEMED_ICON (icon4));
481   g_assert (g_emblemed_icon_get_emblems (G_EMBLEMED_ICON (icon4)) == NULL);
482 
483   g_assert (g_icon_hash (icon4) != g_icon_hash (icon2));
484   g_object_get (icon4, "gicon", &icon, NULL);
485   g_assert (icon == icon1);
486   g_object_unref (icon);
487 
488   g_object_unref (icon1);
489   g_object_unref (icon2);
490   g_object_unref (icon3);
491   g_object_unref (icon4);
492   g_object_unref (icon5);
493 
494   g_object_unref (emblem1);
495   g_object_unref (emblem2);
496 }
497 
498 static void
load_cb(GObject * source_object,GAsyncResult * res,gpointer data)499 load_cb (GObject      *source_object,
500          GAsyncResult *res,
501          gpointer      data)
502 {
503   GLoadableIcon *icon = G_LOADABLE_ICON (source_object);
504   GMainLoop *loop = data;
505   GError *error = NULL;
506   GInputStream *stream;
507 
508   stream = g_loadable_icon_load_finish (icon, res, NULL, &error);
509   g_assert_no_error (error);
510   g_assert (G_IS_INPUT_STREAM (stream));
511   g_object_unref (stream);
512   g_main_loop_quit (loop);
513 }
514 
515 static void
loadable_icon_tests(GLoadableIcon * icon)516 loadable_icon_tests (GLoadableIcon *icon)
517 {
518   GError *error = NULL;
519   GInputStream *stream;
520   GMainLoop *loop;
521 
522   stream = g_loadable_icon_load (icon, 20, NULL, NULL, &error);
523   g_assert_no_error (error);
524   g_assert (G_IS_INPUT_STREAM (stream));
525   g_object_unref (stream);
526 
527   loop = g_main_loop_new (NULL, FALSE);
528   g_loadable_icon_load_async (icon, 20, NULL, load_cb, loop);
529   g_main_loop_run (loop);
530   g_main_loop_unref (loop);
531 }
532 
533 static void
test_file_icon(void)534 test_file_icon (void)
535 {
536   GFile *file;
537   GIcon *icon;
538   GIcon *icon2;
539   GIcon *icon3;
540   GIcon *icon4;
541   gchar *str;
542   GVariant *variant;
543 
544   file = g_file_new_for_path (g_test_get_filename (G_TEST_DIST, "g-icon.c", NULL));
545   icon = g_file_icon_new (file);
546   g_object_unref (file);
547 
548   loadable_icon_tests (G_LOADABLE_ICON (icon));
549 
550   str = g_icon_to_string (icon);
551   icon2 = g_icon_new_for_string (str, NULL);
552   g_assert (g_icon_equal (icon, icon2));
553   g_free (str);
554 
555   file = g_file_new_for_path ("/\1\2\3/\244");
556   icon4 = g_file_icon_new (file);
557 
558   variant = g_icon_serialize (icon4);
559   icon3 = g_icon_deserialize (variant);
560   g_assert (g_icon_equal (icon4, icon3));
561   g_assert (g_icon_hash (icon4) == g_icon_hash (icon3));
562   g_variant_unref (variant);
563 
564   g_object_unref (icon);
565   g_object_unref (icon2);
566   g_object_unref (icon3);
567   g_object_unref (icon4);
568   g_object_unref (file);
569 }
570 
571 static void
test_bytes_icon(void)572 test_bytes_icon (void)
573 {
574   GBytes *bytes;
575   GBytes *bytes2;
576   GIcon *icon;
577   GIcon *icon2;
578   GIcon *icon3;
579   GVariant *variant;
580   const gchar *data = "1234567890987654321";
581 
582   bytes = g_bytes_new_static (data, strlen (data));
583   icon = g_bytes_icon_new (bytes);
584   icon2 = g_bytes_icon_new (bytes);
585 
586   g_assert (g_bytes_icon_get_bytes (G_BYTES_ICON (icon)) == bytes);
587   g_assert (g_icon_equal (icon, icon2));
588   g_assert (g_icon_hash (icon) == g_icon_hash (icon2));
589 
590   g_object_get (icon, "bytes", &bytes2, NULL);
591   g_assert (bytes == bytes2);
592   g_bytes_unref (bytes2);
593 
594   variant = g_icon_serialize (icon);
595   icon3 = g_icon_deserialize (variant);
596   g_assert (g_icon_equal (icon, icon3));
597   g_assert (g_icon_hash (icon) == g_icon_hash (icon3));
598 
599   loadable_icon_tests (G_LOADABLE_ICON (icon));
600 
601   g_variant_unref (variant);
602   g_object_unref (icon);
603   g_object_unref (icon2);
604   g_object_unref (icon3);
605   g_bytes_unref (bytes);
606 }
607 
608 int
main(int argc,char * argv[])609 main (int   argc,
610       char *argv[])
611 {
612   g_test_init (&argc, &argv, NULL);
613 
614   g_test_add_func ("/icons/to-string", test_g_icon_to_string);
615   g_test_add_func ("/icons/serialize", test_g_icon_serialize);
616   g_test_add_func ("/icons/themed", test_themed_icon);
617   g_test_add_func ("/icons/emblemed", test_emblemed_icon);
618   g_test_add_func ("/icons/file", test_file_icon);
619   g_test_add_func ("/icons/bytes", test_bytes_icon);
620 
621   return g_test_run();
622 }
623