Branch data Line data Source code
1 : :
2 : : #include <locale.h>
3 : : #include <string.h>
4 : :
5 : : #include <glib/gstdio.h>
6 : : #include <gio/gio.h>
7 : : #include <gio/gdesktopappinfo.h>
8 : :
9 : : /* Should be called inside a #GTestDBus environment. */
10 : : static void
11 : 3 : test_launch_for_app_info (GAppInfo *appinfo)
12 : : {
13 : 3 : GError *error = NULL;
14 : : gboolean success;
15 : : GFile *file;
16 : : GList *l;
17 : : const gchar *path;
18 : : gchar *uri;
19 : :
20 : 3 : success = g_app_info_launch (appinfo, NULL, NULL, &error);
21 : 3 : g_assert_no_error (error);
22 : 3 : g_assert_true (success);
23 : :
24 : 3 : success = g_app_info_launch_uris (appinfo, NULL, NULL, &error);
25 : 3 : g_assert_no_error (error);
26 : 3 : g_assert_true (success);
27 : :
28 : 3 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test.desktop", NULL);
29 : 3 : file = g_file_new_for_path (path);
30 : 3 : l = NULL;
31 : 3 : l = g_list_append (l, file);
32 : :
33 : 3 : success = g_app_info_launch (appinfo, l, NULL, &error);
34 : 3 : g_assert_no_error (error);
35 : 3 : g_assert_true (success);
36 : 3 : g_list_free (l);
37 : 3 : g_object_unref (file);
38 : :
39 : 3 : l = NULL;
40 : 3 : uri = g_strconcat ("file://", g_test_get_dir (G_TEST_BUILT), "/appinfo-test.desktop", NULL);
41 : 3 : l = g_list_append (l, uri);
42 : 3 : l = g_list_append (l, "file:///etc/group#adm");
43 : :
44 : 3 : success = g_app_info_launch_uris (appinfo, l, NULL, &error);
45 : 3 : g_assert_no_error (error);
46 : 3 : g_assert_true (success);
47 : :
48 : 3 : g_list_free (l);
49 : 3 : g_free (uri);
50 : 3 : }
51 : :
52 : : static gboolean
53 : 3 : skip_missing_dbus_daemon (void)
54 : : {
55 : 3 : gchar *path = g_find_program_in_path ("dbus-daemon");
56 : 3 : if (path == NULL)
57 : : {
58 : 0 : g_test_skip ("dbus-daemon is required to run this test");
59 : 0 : return TRUE;
60 : : }
61 : 3 : g_free (path);
62 : 3 : return FALSE;
63 : : }
64 : :
65 : : static void
66 : 1 : test_launch (void)
67 : : {
68 : 1 : GTestDBus *bus = NULL;
69 : : GAppInfo *appinfo;
70 : : const gchar *path;
71 : :
72 : 1 : if (skip_missing_dbus_daemon ())
73 : 0 : return;
74 : :
75 : : /* Set up a test session bus to keep D-Bus traffic off the real session bus. */
76 : 1 : bus = g_test_dbus_new (G_TEST_DBUS_NONE);
77 : 1 : g_test_dbus_up (bus);
78 : :
79 : 1 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test.desktop", NULL);
80 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
81 : 1 : g_assert_true (G_IS_APP_INFO (appinfo));
82 : :
83 : 1 : test_launch_for_app_info (appinfo);
84 : 1 : g_object_unref (appinfo);
85 : :
86 : 1 : g_test_dbus_down (bus);
87 : 1 : g_clear_object (&bus);
88 : : }
89 : :
90 : : static void
91 : 1 : test_launch_no_app_id (void)
92 : : {
93 : 1 : const gchar desktop_file_base_contents[] =
94 : : "[Desktop Entry]\n"
95 : : "Type=Application\n"
96 : : "GenericName=generic-appinfo-test\n"
97 : : "Name=appinfo-test\n"
98 : : "Name[de]=appinfo-test-de\n"
99 : : "X-GNOME-FullName=example\n"
100 : : "X-GNOME-FullName[de]=Beispiel\n"
101 : : "Comment=GAppInfo example\n"
102 : : "Comment[de]=GAppInfo Beispiel\n"
103 : : "Icon=testicon.svg\n"
104 : : "Terminal=false\n"
105 : : "StartupNotify=true\n"
106 : : "StartupWMClass=appinfo-class\n"
107 : : "MimeType=image/png;image/jpeg;\n"
108 : : "Keywords=keyword1;test keyword;\n"
109 : : "Categories=GNOME;GTK;\n";
110 : :
111 : 1 : GTestDBus *bus = NULL;
112 : : gchar *exec_line_variants[2];
113 : : gsize i;
114 : :
115 : 1 : if (skip_missing_dbus_daemon ())
116 : 0 : return;
117 : :
118 : 1 : exec_line_variants[0] = g_strdup_printf (
119 : : "Exec=%s/appinfo-test --option %%U %%i --name %%c --filename %%k %%m %%%%",
120 : : g_test_get_dir (G_TEST_BUILT));
121 : 1 : exec_line_variants[1] = g_strdup_printf (
122 : : "Exec=%s/appinfo-test --option %%u %%i --name %%c --filename %%k %%m %%%%",
123 : : g_test_get_dir (G_TEST_BUILT));
124 : :
125 : 1 : g_test_bug ("https://bugzilla.gnome.org/show_bug.cgi?id=791337");
126 : :
127 : : /* Set up a test session bus to keep D-Bus traffic off the real session bus. */
128 : 1 : bus = g_test_dbus_new (G_TEST_DBUS_NONE);
129 : 1 : g_test_dbus_up (bus);
130 : :
131 : 3 : for (i = 0; i < G_N_ELEMENTS (exec_line_variants); i++)
132 : : {
133 : : gchar *desktop_file_contents;
134 : : GKeyFile *fake_desktop_file;
135 : : GAppInfo *appinfo;
136 : : gboolean loaded;
137 : :
138 : 2 : g_test_message ("Exec line variant #%" G_GSIZE_FORMAT, i);
139 : :
140 : 2 : desktop_file_contents = g_strdup_printf ("%s\n%s",
141 : : desktop_file_base_contents,
142 : : exec_line_variants[i]);
143 : :
144 : : /* We load a desktop file from memory to force the app not
145 : : * to have an app ID, which would check different codepaths.
146 : : */
147 : 2 : fake_desktop_file = g_key_file_new ();
148 : 2 : loaded = g_key_file_load_from_data (fake_desktop_file, desktop_file_contents, -1, G_KEY_FILE_NONE, NULL);
149 : 2 : g_assert_true (loaded);
150 : :
151 : 2 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_keyfile (fake_desktop_file);
152 : 2 : g_assert_nonnull (appinfo);
153 : :
154 : 2 : test_launch_for_app_info (appinfo);
155 : :
156 : 2 : g_free (desktop_file_contents);
157 : 2 : g_object_unref (appinfo);
158 : 2 : g_key_file_unref (fake_desktop_file);
159 : : }
160 : :
161 : 1 : g_test_dbus_down (bus);
162 : 1 : g_clear_object (&bus);
163 : :
164 : 1 : g_free (exec_line_variants[1]);
165 : 1 : g_free (exec_line_variants[0]);
166 : : }
167 : :
168 : : static void
169 : 4 : test_locale (const char *locale)
170 : : {
171 : : GAppInfo *appinfo;
172 : 4 : gchar *orig = NULL;
173 : : const gchar *path;
174 : :
175 : 4 : orig = g_strdup (setlocale (LC_ALL, NULL));
176 : 4 : g_setenv ("LANGUAGE", locale, TRUE);
177 : 4 : setlocale (LC_ALL, "");
178 : :
179 : 4 : path = g_test_get_filename (G_TEST_DIST, "appinfo-test-static.desktop", NULL);
180 : 4 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
181 : :
182 : 4 : if (g_strcmp0 (locale, "C") == 0)
183 : : {
184 : 1 : g_assert_cmpstr (g_app_info_get_name (appinfo), ==, "appinfo-test");
185 : 1 : g_assert_cmpstr (g_app_info_get_description (appinfo), ==, "GAppInfo example");
186 : 1 : g_assert_cmpstr (g_app_info_get_display_name (appinfo), ==, "example");
187 : : }
188 : 3 : else if (g_str_has_prefix (locale, "en"))
189 : : {
190 : 1 : g_assert_cmpstr (g_app_info_get_name (appinfo), ==, "appinfo-test");
191 : 1 : g_assert_cmpstr (g_app_info_get_description (appinfo), ==, "GAppInfo example");
192 : 1 : g_assert_cmpstr (g_app_info_get_display_name (appinfo), ==, "example");
193 : : }
194 : 2 : else if (g_str_has_prefix (locale, "de"))
195 : : {
196 : 2 : g_assert_cmpstr (g_app_info_get_name (appinfo), ==, "appinfo-test-de");
197 : 2 : g_assert_cmpstr (g_app_info_get_description (appinfo), ==, "GAppInfo Beispiel");
198 : 2 : g_assert_cmpstr (g_app_info_get_display_name (appinfo), ==, "Beispiel");
199 : : }
200 : :
201 : 4 : g_object_unref (appinfo);
202 : :
203 : 4 : g_setenv ("LANGUAGE", orig, TRUE);
204 : 4 : setlocale (LC_ALL, "");
205 : 4 : g_free (orig);
206 : 4 : }
207 : :
208 : : static void
209 : 1 : test_text (void)
210 : : {
211 : 1 : test_locale ("C");
212 : 1 : test_locale ("en_US");
213 : 1 : test_locale ("de");
214 : 1 : test_locale ("de_DE.UTF-8");
215 : 1 : }
216 : :
217 : : static void
218 : 1 : test_basic (void)
219 : : {
220 : : GAppInfo *appinfo;
221 : : GAppInfo *appinfo2;
222 : : GIcon *icon, *icon2;
223 : : const gchar *path;
224 : :
225 : 1 : path = g_test_get_filename (G_TEST_DIST, "appinfo-test-static.desktop", NULL);
226 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
227 : 1 : g_assert_nonnull (appinfo);
228 : :
229 : 1 : g_assert_cmpstr (g_app_info_get_id (appinfo), ==, "appinfo-test-static.desktop");
230 : 1 : g_assert_nonnull (strstr (g_app_info_get_executable (appinfo), "true"));
231 : :
232 : 1 : icon = g_app_info_get_icon (appinfo);
233 : 1 : g_assert_true (G_IS_THEMED_ICON (icon));
234 : 1 : icon2 = g_themed_icon_new ("testicon");
235 : 1 : g_assert_true (g_icon_equal (icon, icon2));
236 : 1 : g_object_unref (icon2);
237 : :
238 : 1 : appinfo2 = g_app_info_dup (appinfo);
239 : 1 : g_assert_cmpstr (g_app_info_get_id (appinfo), ==, g_app_info_get_id (appinfo2));
240 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, g_app_info_get_commandline (appinfo2));
241 : :
242 : 1 : g_object_unref (appinfo);
243 : 1 : g_object_unref (appinfo2);
244 : 1 : }
245 : :
246 : : static void
247 : 1 : test_show_in (void)
248 : : {
249 : : GAppInfo *appinfo;
250 : : const gchar *path;
251 : :
252 : 1 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test.desktop", NULL);
253 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
254 : 1 : g_assert_true (G_IS_APP_INFO (appinfo));
255 : :
256 : 1 : g_assert_true (g_app_info_should_show (appinfo));
257 : 1 : g_object_unref (appinfo);
258 : :
259 : 1 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test-gnome.desktop", NULL);
260 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
261 : 1 : g_assert_true (g_app_info_should_show (appinfo));
262 : 1 : g_object_unref (appinfo);
263 : :
264 : 1 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test-notgnome.desktop", NULL);
265 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
266 : 1 : g_assert_false (g_app_info_should_show (appinfo));
267 : 1 : g_object_unref (appinfo);
268 : 1 : }
269 : :
270 : : static void
271 : 1 : test_commandline (void)
272 : : {
273 : : GAppInfo *appinfo;
274 : : GError *error;
275 : : gchar *cmdline;
276 : : gchar *cmdline_out;
277 : :
278 : 1 : cmdline = g_strconcat (g_test_get_dir (G_TEST_BUILT), "/appinfo-test --option", NULL);
279 : 1 : cmdline_out = g_strconcat (cmdline, " %u", NULL);
280 : :
281 : 1 : error = NULL;
282 : 1 : appinfo = g_app_info_create_from_commandline (cmdline,
283 : : "cmdline-app-test",
284 : : G_APP_INFO_CREATE_SUPPORTS_URIS,
285 : : &error);
286 : 1 : g_assert_no_error (error);
287 : 1 : g_assert_nonnull (appinfo);
288 : 1 : g_assert_cmpstr (g_app_info_get_name (appinfo), ==, "cmdline-app-test");
289 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, cmdline_out);
290 : 1 : g_assert_true (g_app_info_supports_uris (appinfo));
291 : 1 : g_assert_false (g_app_info_supports_files (appinfo));
292 : :
293 : 1 : g_object_unref (appinfo);
294 : :
295 : 1 : g_free (cmdline_out);
296 : 1 : cmdline_out = g_strconcat (cmdline, " %f", NULL);
297 : :
298 : 1 : error = NULL;
299 : 1 : appinfo = g_app_info_create_from_commandline (cmdline,
300 : : "cmdline-app-test",
301 : : G_APP_INFO_CREATE_NONE,
302 : : &error);
303 : 1 : g_assert_no_error (error);
304 : 1 : g_assert_nonnull (appinfo);
305 : 1 : g_assert_cmpstr (g_app_info_get_name (appinfo), ==, "cmdline-app-test");
306 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, cmdline_out);
307 : 1 : g_assert_false (g_app_info_supports_uris (appinfo));
308 : 1 : g_assert_true (g_app_info_supports_files (appinfo));
309 : :
310 : 1 : g_object_unref (appinfo);
311 : :
312 : 1 : g_free (cmdline);
313 : 1 : g_free (cmdline_out);
314 : 1 : }
315 : :
316 : : static void
317 : 1 : test_launch_context (void)
318 : : {
319 : : GAppLaunchContext *context;
320 : : GAppInfo *appinfo;
321 : : gchar *str;
322 : : gchar *cmdline;
323 : :
324 : 1 : cmdline = g_strconcat (g_test_get_dir (G_TEST_BUILT), "/appinfo-test --option", NULL);
325 : :
326 : 1 : context = g_app_launch_context_new ();
327 : 1 : appinfo = g_app_info_create_from_commandline (cmdline,
328 : : "cmdline-app-test",
329 : : G_APP_INFO_CREATE_SUPPORTS_URIS,
330 : : NULL);
331 : :
332 : 1 : str = g_app_launch_context_get_display (context, appinfo, NULL);
333 : 1 : g_assert_null (str);
334 : :
335 : 1 : str = g_app_launch_context_get_startup_notify_id (context, appinfo, NULL);
336 : 1 : g_assert_null (str);
337 : :
338 : 1 : g_object_unref (appinfo);
339 : 1 : g_object_unref (context);
340 : :
341 : 1 : g_free (cmdline);
342 : 1 : }
343 : :
344 : : static gboolean launched_reached;
345 : :
346 : : static void
347 : 1 : launched (GAppLaunchContext *context,
348 : : GAppInfo *info,
349 : : GVariant *platform_data,
350 : : gpointer user_data)
351 : : {
352 : : gint pid;
353 : :
354 : 1 : pid = 0;
355 : 1 : g_assert_true (g_variant_lookup (platform_data, "pid", "i", &pid));
356 : 1 : g_assert_cmpint (pid, !=, 0);
357 : :
358 : 1 : launched_reached = TRUE;
359 : 1 : }
360 : :
361 : : static void
362 : 0 : launch_failed (GAppLaunchContext *context,
363 : : const gchar *startup_notify_id)
364 : : {
365 : : g_assert_not_reached ();
366 : : }
367 : :
368 : : static void
369 : 1 : test_launch_context_signals (void)
370 : : {
371 : 1 : GTestDBus *bus = NULL;
372 : : GAppLaunchContext *context;
373 : : GAppInfo *appinfo;
374 : 1 : GError *error = NULL;
375 : : gboolean success;
376 : : gchar *cmdline;
377 : :
378 : 1 : if (skip_missing_dbus_daemon ())
379 : 0 : return;
380 : :
381 : : /* Set up a test session bus to keep D-Bus traffic off the real session bus. */
382 : 1 : bus = g_test_dbus_new (G_TEST_DBUS_NONE);
383 : 1 : g_test_dbus_up (bus);
384 : :
385 : 1 : cmdline = g_strconcat (g_test_get_dir (G_TEST_BUILT), "/appinfo-test --option", NULL);
386 : :
387 : 1 : context = g_app_launch_context_new ();
388 : 1 : g_signal_connect (context, "launched", G_CALLBACK (launched), NULL);
389 : 1 : g_signal_connect (context, "launch_failed", G_CALLBACK (launch_failed), NULL);
390 : 1 : appinfo = g_app_info_create_from_commandline (cmdline,
391 : : "cmdline-app-test",
392 : : G_APP_INFO_CREATE_SUPPORTS_URIS,
393 : : NULL);
394 : :
395 : 1 : success = g_app_info_launch (appinfo, NULL, context, &error);
396 : 1 : g_assert_no_error (error);
397 : 1 : g_assert_true (success);
398 : :
399 : 1 : g_assert_true (launched_reached);
400 : :
401 : 1 : g_object_unref (appinfo);
402 : 1 : g_object_unref (context);
403 : :
404 : 1 : g_free (cmdline);
405 : :
406 : 1 : g_test_dbus_down (bus);
407 : 1 : g_clear_object (&bus);
408 : : }
409 : :
410 : : static void
411 : 1 : test_tryexec (void)
412 : : {
413 : : GAppInfo *appinfo;
414 : : const gchar *path;
415 : :
416 : 1 : path = g_test_get_filename (G_TEST_BUILT, "appinfo-test2.desktop", NULL);
417 : 1 : appinfo = (GAppInfo*)g_desktop_app_info_new_from_filename (path);
418 : :
419 : 1 : g_assert_null (appinfo);
420 : 1 : }
421 : :
422 : : /* Test that we can set an appinfo as default for a mime type or
423 : : * file extension, and also add and remove handled mime types.
424 : : */
425 : : static void
426 : 1 : test_associations (void)
427 : : {
428 : : GAppInfo *appinfo;
429 : : GAppInfo *appinfo2;
430 : 1 : GError *error = NULL;
431 : : gboolean result;
432 : : GList *list;
433 : : gchar *cmdline;
434 : 1 : gchar *update_desktop_database = NULL, *update_mime_database = NULL;
435 : :
436 : 1 : update_desktop_database = g_find_program_in_path ("update-desktop-database");
437 : 1 : update_mime_database = g_find_program_in_path ("update-mime-database");
438 : :
439 : 1 : if (update_desktop_database == NULL || update_mime_database == NULL)
440 : : {
441 : 0 : g_test_skip ("update-desktop-database and update-mime-database are needed to change file associations");
442 : 0 : g_free (update_desktop_database);
443 : 0 : g_free (update_mime_database);
444 : 0 : return;
445 : : }
446 : :
447 : 1 : g_free (update_desktop_database);
448 : 1 : g_free (update_mime_database);
449 : :
450 : 1 : cmdline = g_strconcat (g_test_get_dir (G_TEST_BUILT), "/appinfo-test --option", NULL);
451 : 1 : appinfo = g_app_info_create_from_commandline (cmdline,
452 : : "cmdline-app-test",
453 : : G_APP_INFO_CREATE_SUPPORTS_URIS,
454 : : NULL);
455 : 1 : g_free (cmdline);
456 : :
457 : 1 : result = g_app_info_set_as_default_for_type (appinfo, "application/x-glib-test", &error);
458 : 1 : g_assert_no_error (error);
459 : 1 : g_assert_true (result);
460 : :
461 : 1 : appinfo2 = g_app_info_get_default_for_type ("application/x-glib-test", FALSE);
462 : :
463 : 1 : g_assert_nonnull (appinfo2);
464 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, g_app_info_get_commandline (appinfo2));
465 : :
466 : 1 : g_object_unref (appinfo2);
467 : :
468 : 1 : result = g_app_info_set_as_default_for_extension (appinfo, "gio-tests", &error);
469 : 1 : g_assert_no_error (error);
470 : 1 : g_assert_true (result);
471 : :
472 : 1 : appinfo2 = g_app_info_get_default_for_type ("application/x-extension-gio-tests", FALSE);
473 : :
474 : 1 : g_assert_nonnull (appinfo2);
475 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, g_app_info_get_commandline (appinfo2));
476 : :
477 : 1 : g_object_unref (appinfo2);
478 : :
479 : 1 : result = g_app_info_add_supports_type (appinfo, "application/x-gio-test", &error);
480 : 1 : g_assert_no_error (error);
481 : 1 : g_assert_true (result);
482 : :
483 : 1 : list = g_app_info_get_all_for_type ("application/x-gio-test");
484 : 1 : g_assert_cmpint (g_list_length (list), ==, 1);
485 : 1 : appinfo2 = list->data;
486 : 1 : g_assert_cmpstr (g_app_info_get_commandline (appinfo), ==, g_app_info_get_commandline (appinfo2));
487 : 1 : g_object_unref (appinfo2);
488 : 1 : g_list_free (list);
489 : :
490 : 1 : g_assert_true (g_app_info_can_remove_supports_type (appinfo));
491 : 1 : result = g_app_info_remove_supports_type (appinfo, "application/x-gio-test", &error);
492 : 1 : g_assert_no_error (error);
493 : 1 : g_assert_true (result);
494 : :
495 : 1 : g_assert_true (g_app_info_can_delete (appinfo));
496 : 1 : g_assert_true (g_app_info_delete (appinfo));
497 : 1 : g_object_unref (appinfo);
498 : : }
499 : :
500 : : static void
501 : 1 : test_environment (void)
502 : : {
503 : : GAppLaunchContext *ctx;
504 : : gchar **env;
505 : : const gchar *path;
506 : :
507 : 1 : g_unsetenv ("FOO");
508 : 1 : g_unsetenv ("BLA");
509 : 1 : path = g_getenv ("PATH");
510 : :
511 : 1 : ctx = g_app_launch_context_new ();
512 : :
513 : 1 : env = g_app_launch_context_get_environment (ctx);
514 : :
515 : 1 : g_assert_null (g_environ_getenv (env, "FOO"));
516 : 1 : g_assert_null (g_environ_getenv (env, "BLA"));
517 : 1 : g_assert_cmpstr (g_environ_getenv (env, "PATH"), ==, path);
518 : :
519 : 1 : g_strfreev (env);
520 : :
521 : 1 : g_app_launch_context_setenv (ctx, "FOO", "bar");
522 : 1 : g_app_launch_context_setenv (ctx, "BLA", "bla");
523 : :
524 : 1 : env = g_app_launch_context_get_environment (ctx);
525 : :
526 : 1 : g_assert_cmpstr (g_environ_getenv (env, "FOO"), ==, "bar");
527 : 1 : g_assert_cmpstr (g_environ_getenv (env, "BLA"), ==, "bla");
528 : 1 : g_assert_cmpstr (g_environ_getenv (env, "PATH"), ==, path);
529 : :
530 : 1 : g_strfreev (env);
531 : :
532 : 1 : g_app_launch_context_setenv (ctx, "FOO", "baz");
533 : 1 : g_app_launch_context_unsetenv (ctx, "BLA");
534 : :
535 : 1 : env = g_app_launch_context_get_environment (ctx);
536 : :
537 : 1 : g_assert_cmpstr (g_environ_getenv (env, "FOO"), ==, "baz");
538 : 1 : g_assert_null (g_environ_getenv (env, "BLA"));
539 : :
540 : 1 : g_strfreev (env);
541 : :
542 : 1 : g_object_unref (ctx);
543 : 1 : }
544 : :
545 : : static void
546 : 1 : test_startup_wm_class (void)
547 : : {
548 : : GDesktopAppInfo *appinfo;
549 : : const char *wm_class;
550 : : const gchar *path;
551 : :
552 : 1 : path = g_test_get_filename (G_TEST_DIST, "appinfo-test-static.desktop", NULL);
553 : 1 : appinfo = g_desktop_app_info_new_from_filename (path);
554 : 1 : wm_class = g_desktop_app_info_get_startup_wm_class (appinfo);
555 : :
556 : 1 : g_assert_cmpstr (wm_class, ==, "appinfo-class");
557 : :
558 : 1 : g_object_unref (appinfo);
559 : 1 : }
560 : :
561 : : static void
562 : 1 : test_supported_types (void)
563 : : {
564 : : GAppInfo *appinfo;
565 : : const char * const *content_types;
566 : : const gchar *path;
567 : :
568 : 1 : path = g_test_get_filename (G_TEST_DIST, "appinfo-test-static.desktop", NULL);
569 : 1 : appinfo = G_APP_INFO (g_desktop_app_info_new_from_filename (path));
570 : 1 : content_types = g_app_info_get_supported_types (appinfo);
571 : :
572 : 1 : g_assert_cmpint (g_strv_length ((char**)content_types), ==, 2);
573 : 1 : g_assert_cmpstr (content_types[0], ==, "image/png");
574 : :
575 : 1 : g_object_unref (appinfo);
576 : 1 : }
577 : :
578 : : static void
579 : 1 : test_from_keyfile (void)
580 : : {
581 : : GDesktopAppInfo *info;
582 : : GKeyFile *kf;
583 : 1 : GError *error = NULL;
584 : : const gchar *categories;
585 : : gchar **categories_list;
586 : : gsize categories_count;
587 : : gchar **keywords;
588 : : const gchar *file;
589 : : const gchar *name;
590 : : const gchar *path;
591 : :
592 : 1 : path = g_test_get_filename (G_TEST_DIST, "appinfo-test-static.desktop", NULL);
593 : 1 : kf = g_key_file_new ();
594 : 1 : g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, &error);
595 : 1 : g_assert_no_error (error);
596 : 1 : info = g_desktop_app_info_new_from_keyfile (kf);
597 : 1 : g_key_file_unref (kf);
598 : 1 : g_assert_nonnull (info);
599 : :
600 : 1 : g_object_get (info, "filename", &file, NULL);
601 : 1 : g_assert_null (file);
602 : :
603 : 1 : file = g_desktop_app_info_get_filename (info);
604 : 1 : g_assert_null (file);
605 : 1 : categories = g_desktop_app_info_get_categories (info);
606 : 1 : g_assert_cmpstr (categories, ==, "GNOME;GTK;");
607 : 1 : categories_list = g_desktop_app_info_get_string_list (info, "Categories", &categories_count);
608 : 1 : g_assert_cmpint (categories_count, ==, 2);
609 : 1 : g_assert_cmpint (g_strv_length (categories_list), ==, 2);
610 : 1 : g_assert_cmpstr (categories_list[0], ==, "GNOME");
611 : 1 : g_assert_cmpstr (categories_list[1], ==, "GTK");
612 : 1 : keywords = (gchar **)g_desktop_app_info_get_keywords (info);
613 : 1 : g_assert_cmpint (g_strv_length (keywords), ==, 2);
614 : 1 : g_assert_cmpstr (keywords[0], ==, "keyword1");
615 : 1 : g_assert_cmpstr (keywords[1], ==, "test keyword");
616 : 1 : name = g_desktop_app_info_get_generic_name (info);
617 : 1 : g_assert_cmpstr (name, ==, "generic-appinfo-test");
618 : 1 : g_assert_false (g_desktop_app_info_get_nodisplay (info));
619 : :
620 : 1 : g_strfreev (categories_list);
621 : 1 : g_object_unref (info);
622 : 1 : }
623 : :
624 : : int
625 : 1 : main (int argc, char *argv[])
626 : : {
627 : 1 : g_setenv ("XDG_CURRENT_DESKTOP", "GNOME", TRUE);
628 : :
629 : 1 : g_test_init (&argc, &argv, G_TEST_OPTION_ISOLATE_DIRS, NULL);
630 : :
631 : 1 : g_test_add_func ("/appinfo/basic", test_basic);
632 : 1 : g_test_add_func ("/appinfo/text", test_text);
633 : 1 : g_test_add_func ("/appinfo/launch", test_launch);
634 : 1 : g_test_add_func ("/appinfo/launch/no-appid", test_launch_no_app_id);
635 : 1 : g_test_add_func ("/appinfo/show-in", test_show_in);
636 : 1 : g_test_add_func ("/appinfo/commandline", test_commandline);
637 : 1 : g_test_add_func ("/appinfo/launch-context", test_launch_context);
638 : 1 : g_test_add_func ("/appinfo/launch-context-signals", test_launch_context_signals);
639 : 1 : g_test_add_func ("/appinfo/tryexec", test_tryexec);
640 : 1 : g_test_add_func ("/appinfo/associations", test_associations);
641 : 1 : g_test_add_func ("/appinfo/environment", test_environment);
642 : 1 : g_test_add_func ("/appinfo/startup-wm-class", test_startup_wm_class);
643 : 1 : g_test_add_func ("/appinfo/supported-types", test_supported_types);
644 : 1 : g_test_add_func ("/appinfo/from-keyfile", test_from_keyfile);
645 : :
646 : 1 : return g_test_run ();
647 : : }
|