From cade87b9fd03a2d3e234c55a413476a49a7edbe4 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Tue, 21 Dec 2021 15:07:08 +0100 Subject: [PATCH] tests: Use file monitoring to wait for file creation Doing this is faster and also means that the mainloop will be iterated while the test is waiting for file creation. The mainloop iteration is necessary as GLib may need to wait for a DBus reply from systemd before the application is executed. --- gio/tests/desktop-app-info.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/gio/tests/desktop-app-info.c b/gio/tests/desktop-app-info.c index 4a5de6017..2dc1a2ccd 100644 --- a/gio/tests/desktop-app-info.c +++ b/gio/tests/desktop-app-info.c @@ -324,20 +324,16 @@ wait_for_file (const gchar *want_this, const gchar *but_not_this, const gchar *or_this) { - guint retries = 600; + GFile *file = g_file_new_for_path (want_this); + GFileMonitor *monitor; + + monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL); + g_object_unref (file); - /* I hate time-based conditions in tests, but this will wait up to one - * whole minute for "touch file" to finish running. I think it should - * be OK. - * - * 600 * 100ms = 60 seconds. - */ while (access (want_this, F_OK) != 0) - { - g_usleep (100000); /* 100ms */ - g_assert_cmpuint (retries, >, 0); - retries--; - } + g_main_context_iteration (NULL, TRUE); + + g_object_unref (monitor); g_assert_cmpuint (access (but_not_this, F_OK), !=, 0); g_assert_cmpuint (access (or_this, F_OK), !=, 0);