summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2022-10-23 17:09:33 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2022-10-25 14:33:25 +0200
commit37e61d66c3561a20ce9c0302840d0842eb450d5d (patch)
tree4d28bbc5e3f1134115d71affbad00c9db9b1c0ec
parent6bbc72d2c4fbb88448c3efc072efdebae9afda5e (diff)
downloadglib-37e61d66c3561a20ce9c0302840d0842eb450d5d.tar.gz
gio/tests/desktop-app-info: Add test to check failure on launch as manager
Trying to use invalid Fd's numbers so that this would fail early.
-rw-r--r--gio/tests/desktop-app-info.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gio/tests/desktop-app-info.c b/gio/tests/desktop-app-info.c
index cd9f0e5af..9b76fd4fa 100644
--- a/gio/tests/desktop-app-info.c
+++ b/gio/tests/desktop-app-info.c
@@ -1130,6 +1130,58 @@ test_launch_as_manager (void)
g_assert_finalize_object (context);
}
+static void
+test_launch_as_manager_fail (void)
+{
+ GAppLaunchContext *context;
+ GDesktopAppInfo *appinfo;
+ GError *error = NULL;
+ gboolean retval;
+ const gchar *path;
+ gboolean launch_started = FALSE;
+ gboolean launched = FALSE;
+ gboolean failed = FALSE;
+
+ g_test_summary ("Tests that launch-errors are properly handled, we force " \
+ "this by using invalid FD's values when launching as manager");
+
+ path = g_test_get_filename (G_TEST_BUILT, "appinfo-test.desktop", NULL);
+ appinfo = g_desktop_app_info_new_from_filename (path);
+
+ if (appinfo == NULL)
+ {
+ g_test_skip ("appinfo-test binary not installed");
+ return;
+ }
+
+ context = g_object_new (test_launch_context_get_type (), NULL);
+ g_signal_connect (context, "launch-started",
+ G_CALLBACK (on_launch_started),
+ &launch_started);
+ g_signal_connect (context, "launched",
+ G_CALLBACK (on_launched),
+ &launched);
+ g_signal_connect (context, "launch-failed",
+ G_CALLBACK (on_launch_failed),
+ &failed);
+
+ retval = g_desktop_app_info_launch_uris_as_manager_with_fds (appinfo,
+ NULL, context, 0,
+ NULL, NULL,
+ NULL, NULL,
+ 3000, 3001, 3002,
+ &error);
+ g_assert_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED);
+ g_assert_false (retval);
+ g_assert_true (launch_started);
+ g_assert_false (launched);
+ g_assert_true (failed);
+
+ g_clear_error (&error);
+ g_object_unref (appinfo);
+ g_assert_finalize_object (context);
+}
+
static GAppInfo *
create_app_info_toucher (const char *name,
const char *touched_file_name,
@@ -1554,6 +1606,7 @@ main (int argc,
g_test_add_func ("/desktop-app-info/implements", test_implements);
g_test_add_func ("/desktop-app-info/show-in", test_show_in);
g_test_add_func ("/desktop-app-info/launch-as-manager", test_launch_as_manager);
+ g_test_add_func ("/desktop-app-info/launch-as-manager/fail", test_launch_as_manager_fail);
g_test_add_func ("/desktop-app-info/launch-default-uri-handler", test_default_uri_handler);
g_test_add_func ("/desktop-app-info/launch-default-uri-handler-async", test_default_uri_handler_async);
g_test_add_func ("/desktop-app-info/id", test_id);