1 #include <gtk/gtk.h>
2 
3 static const char *icon_names[] = {
4   /*** Icons used in code or templates, sorted alphabetically ***/
5   "audio-volume-high",
6   "audio-volume-high-symbolic",
7   "audio-volume-low",
8   "audio-volume-low-symbolic",
9   "audio-volume-medium",
10   "audio-volume-medium-symbolic",
11   "audio-volume-muted",
12   "audio-volume-muted-symbolic",
13   "application-x-executable-symbolic",
14   "bookmark-new-symbolic",
15   "changes-allow-symbolic",
16   "changes-prevent-symbolic",
17   "dialog-password-symbolic",
18   "dialog-warning-symbolic",
19   "document-open-symbolic",
20   "document-save-as-symbolic",
21   "document-save-symbolic",
22   "edit-clear-symbolic",
23   "edit-clear-all-symbolic",
24   "edit-cut-symbolic",
25   "edit-delete-symbolic",
26   "edit-find-symbolic",
27   "edit-paste-symbolic",
28   "emblem-important-symbolic",
29   "emblem-system-symbolic",
30   "emoji-activities-symbolic",
31   "emoji-body-symbolic",
32   "emoji-flags-symbolic",
33   "emoji-food-symbolic",
34   "emoji-nature-symbolic",
35   "emoji-objects-symbolic",
36   "emoji-people-symbolic",
37   "emoji-recent-symbolic",
38   "emoji-symbols-symbolic",
39   "emoji-travel-symbolic",
40   "find-location-symbolic",
41   "folder-new-symbolic",
42   "folder-pictures-symbolic",
43   "go-down-symbolic",
44   "go-up-symbolic",
45   "orientation-landscape-symbolic",
46   "orientation-landscape-inverse-symbolic",
47   "orientation-portrait-symbolic",
48   "orientation-portrait-inverse-symbolic",
49   "insert-image",
50   "insert-object-symbolic",
51   "list-add-symbolic",
52   "list-remove-symbolic",
53   "media-eject-symbolic",
54   "media-playback-pause-symbolic",
55   "media-playback-start-symbolic",
56   "media-playlist-repeat",
57   "media-record-symbolic",
58   "network-server-symbolic",
59   "object-select-symbolic",
60   "open-menu-symbolic",
61   "pan-down-symbolic",
62   "pan-end-symbolic",
63   "pan-start-symbolic",
64   "pan-up-symbolic",
65   "user-trash-symbolic",
66   "view-list-symbolic",
67   "window-close-symbolic",
68   "window-maximize-symbolic",
69   "window-minimize-symbolic",
70   "window-restore-symbolic"
71 };
72 
73 static void
test_icon_existence(gconstpointer icon_name)74 test_icon_existence (gconstpointer icon_name)
75 {
76   GtkIconTheme *icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
77   GtkIconPaintable *info;
78 
79   /* Not using generic fallback and builtins here, as we explicitly want to check the
80    * icon theme.
81    * The icon size is randomly chosen.
82    */
83   info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, NULL, 16, 1, GTK_TEXT_DIR_LTR, 0);
84   if (info == NULL)
85     {
86       g_test_message ("Failed to look up icon for \"%s\"", (char *) icon_name);
87       g_test_fail ();
88       return;
89     }
90 
91   g_object_unref (info);
92 }
93 
94 int
main(int argc,char * argv[])95 main (int argc, char *argv[])
96 {
97   guint i;
98   char *test_name;
99   char *theme;
100 
101   gtk_test_init (&argc, &argv);
102 
103   g_object_get (gtk_settings_get_default (), "gtk-icon-theme-name", &theme, NULL);
104   g_test_message ("Testing icon theme: %s", theme);
105   g_free (theme);
106 
107   for (i = 0; i < G_N_ELEMENTS (icon_names); i++)
108     {
109       test_name = g_strdup_printf ("/check-icon-names/%s", icon_names[i]);
110       g_test_add_data_func (test_name, icon_names[i], test_icon_existence);
111       g_free (test_name);
112     }
113 
114   return g_test_run();
115 }
116