5 create_app (gpointer data
)
7 const gchar
*path
= data
;
10 const gchar
*contents
=
17 file
= g_build_filename (path
, "app.desktop", NULL
);
19 g_file_set_contents (file
, contents
, -1, &error
);
20 g_assert_no_error (error
);
24 return G_SOURCE_REMOVE
;
28 delete_app (gpointer data
)
30 const gchar
*path
= data
;
33 file
= g_build_filename (path
, "app.desktop", NULL
);
39 return G_SOURCE_REMOVE
;
42 static gboolean changed_fired
;
45 changed_cb (GAppInfoMonitor
*monitor
, GMainLoop
*loop
)
48 g_main_loop_quit (loop
);
52 quit_loop (gpointer data
)
54 GMainLoop
*loop
= data
;
56 g_main_loop_quit (loop
);
58 return G_SOURCE_REMOVE
;
62 test_app_monitor (void)
65 GAppInfoMonitor
*monitor
;
68 path
= g_build_filename (g_get_user_data_dir (), "applications", NULL
);
71 /* FIXME: this shouldn't be required */
72 g_list_free_full (g_app_info_get_all (), g_object_unref
);
74 monitor
= g_app_info_monitor_get ();
75 loop
= g_main_loop_new (NULL
, FALSE
);
77 g_signal_connect (monitor
, "changed", G_CALLBACK (changed_cb
), loop
);
79 g_idle_add (create_app
, path
);
80 g_timeout_add_seconds (3, quit_loop
, loop
);
82 g_main_loop_run (loop
);
83 g_assert (changed_fired
);
84 changed_fired
= FALSE
;
86 /* FIXME: this shouldn't be required */
87 g_list_free_full (g_app_info_get_all (), g_object_unref
);
89 g_idle_add (delete_app
, path
);
90 g_timeout_add_seconds (3, quit_loop
, loop
);
92 g_main_loop_run (loop
);
93 g_assert (changed_fired
);
95 g_main_loop_unref (loop
);
97 g_object_unref (monitor
);
102 main (int argc
, char *argv
[])
106 path
= g_mkdtemp (g_strdup ("app_monitor_XXXXXX"));
107 g_setenv ("XDG_DATA_DIRS", path
, TRUE
);
108 g_setenv ("XDG_DATA_HOME", path
, TRUE
);
110 g_test_init (&argc
, &argv
, NULL
);
112 g_test_add_func ("/monitor/app", test_app_monitor
);
114 return g_test_run ();