1 /* GTK - The GIMP Toolkit
2 * gtkrecentmanager.c: a manager for the recently used resources
4 * Copyright (C) 2006 Emmanuele Bassi
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 #include <glib/gstdio.h>
23 const gchar *uri = "file:///tmp/testrecentchooser.txt";
24 const gchar *uri2 = "file:///tmp/testrecentchooser2.txt";
27 recent_manager_get_default (void)
29 GtkRecentManager *manager;
30 GtkRecentManager *manager2;
32 manager = gtk_recent_manager_get_default ();
33 g_assert (manager != NULL);
35 manager2 = gtk_recent_manager_get_default ();
36 g_assert (manager == manager2);
40 recent_manager_add (void)
42 GtkRecentManager *manager;
43 GtkRecentData *recent_data;
46 manager = gtk_recent_manager_get_default ();
48 recent_data = g_slice_new0 (GtkRecentData);
50 /* mime type is mandatory */
51 recent_data->mime_type = NULL;
52 recent_data->app_name = "testrecentchooser";
53 recent_data->app_exec = "testrecentchooser %u";
54 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
56 res = gtk_recent_manager_add_full (manager,
60 g_test_trap_assert_failed ();
62 /* app name is mandatory */
63 recent_data->mime_type = "text/plain";
64 recent_data->app_name = NULL;
65 recent_data->app_exec = "testrecentchooser %u";
66 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
68 res = gtk_recent_manager_add_full (manager,
72 g_test_trap_assert_failed ();
74 /* app exec is mandatory */
75 recent_data->mime_type = "text/plain";
76 recent_data->app_name = "testrecentchooser";
77 recent_data->app_exec = NULL;
78 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
80 res = gtk_recent_manager_add_full (manager,
84 g_test_trap_assert_failed ();
86 recent_data->mime_type = "text/plain";
87 recent_data->app_name = "testrecentchooser";
88 recent_data->app_exec = "testrecentchooser %u";
89 res = gtk_recent_manager_add_full (manager,
92 g_assert (res == TRUE);
94 g_slice_free (GtkRecentData, recent_data);
103 check_bulk (GtkRecentManager *manager,
106 AddManyClosure *closure = data;
108 if (g_test_verbose ())
109 g_print (G_STRLOC ": counter = %d\n", closure->counter);
111 g_assert_cmpint (closure->counter, ==, 100);
113 if (g_main_loop_is_running (closure->main_loop))
114 g_main_loop_quit (closure->main_loop);
118 recent_manager_add_many (void)
120 GtkRecentManager *manager = g_object_new (GTK_TYPE_RECENT_MANAGER,
121 "filename", "recently-used.xbel",
123 AddManyClosure *closure = g_new (AddManyClosure, 1);
124 GtkRecentData *data = g_slice_new0 (GtkRecentData);
127 closure->main_loop = g_main_loop_new (NULL, FALSE);
128 closure->counter = 0;
130 g_signal_connect (manager, "changed", G_CALLBACK (check_bulk), closure);
132 for (i = 0; i < 100; i++)
136 data->mime_type = "text/plain";
137 data->app_name = "testrecentchooser";
138 data->app_exec = "testrecentchooser %u";
140 if (g_test_verbose ())
141 g_print (G_STRLOC ": adding item %d\n", i);
143 new_uri = g_strdup_printf ("file:///doesnotexist-%d.txt", i);
144 gtk_recent_manager_add_full (manager, new_uri, data);
147 closure->counter += 1;
150 g_main_loop_run (closure->main_loop);
152 g_main_loop_unref (closure->main_loop);
153 g_slice_free (GtkRecentData, data);
155 g_object_unref (manager);
157 g_assert_cmpint (g_unlink ("recently-used.xbel"), ==, 0);
161 recent_manager_has_item (void)
163 GtkRecentManager *manager;
166 manager = gtk_recent_manager_get_default ();
168 res = gtk_recent_manager_has_item (manager, "file:///tmp/testrecentdoesnotexist.txt");
169 g_assert (res == FALSE);
171 res = gtk_recent_manager_has_item (manager, uri);
172 g_assert (res == TRUE);
176 recent_manager_move_item (void)
178 GtkRecentManager *manager;
182 manager = gtk_recent_manager_get_default ();
185 res = gtk_recent_manager_move_item (manager,
186 "file:///tmp/testrecentdoesnotexist.txt",
189 g_assert (res == FALSE);
190 g_assert (error != NULL);
191 g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
192 g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
193 g_error_free (error);
196 res = gtk_recent_manager_move_item (manager, uri, uri2, &error);
197 g_assert (res == TRUE);
198 g_assert (error == NULL);
200 res = gtk_recent_manager_has_item (manager, uri);
201 g_assert (res == FALSE);
203 res = gtk_recent_manager_has_item (manager, uri2);
204 g_assert (res == TRUE);
208 recent_manager_lookup_item (void)
210 GtkRecentManager *manager;
214 manager = gtk_recent_manager_get_default ();
217 info = gtk_recent_manager_lookup_item (manager,
218 "file:///tmp/testrecentdoesnotexist.txt",
220 g_assert (info == NULL);
221 g_assert (error != NULL);
222 g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
223 g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
224 g_error_free (error);
227 info = gtk_recent_manager_lookup_item (manager, uri2, &error);
228 g_assert (info != NULL);
229 g_assert (error == NULL);
231 g_assert (gtk_recent_info_has_application (info, "testrecentchooser"));
233 gtk_recent_info_unref (info);
237 recent_manager_remove_item (void)
239 GtkRecentManager *manager;
243 manager = gtk_recent_manager_get_default ();
246 res = gtk_recent_manager_remove_item (manager,
247 "file:///tmp/testrecentdoesnotexist.txt",
249 g_assert (res == FALSE);
250 g_assert (error != NULL);
251 g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
252 g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
253 g_error_free (error);
255 /* remove an item that's actually there */
257 res = gtk_recent_manager_remove_item (manager, uri2, &error);
258 g_assert (res == TRUE);
259 g_assert (error == NULL);
261 res = gtk_recent_manager_has_item (manager, uri2);
262 g_assert (res == FALSE);
266 recent_manager_purge (void)
268 GtkRecentManager *manager;
269 GtkRecentData *recent_data;
273 manager = gtk_recent_manager_get_default ();
275 /* purge, add 1, purge again and check that 1 item has been purged */
277 n = gtk_recent_manager_purge_items (manager, &error);
278 g_assert (error == NULL);
280 recent_data = g_slice_new0 (GtkRecentData);
281 recent_data->mime_type = "text/plain";
282 recent_data->app_name = "testrecentchooser";
283 recent_data->app_exec = "testrecentchooser %u";
284 gtk_recent_manager_add_full (manager, uri, recent_data);
285 g_slice_free (GtkRecentData, recent_data);
288 n = gtk_recent_manager_purge_items (manager, &error);
289 g_assert (error == NULL);
297 gtk_test_init (&argc, &argv, NULL);
299 g_test_add_func ("/recent-manager/get-default", recent_manager_get_default);
300 g_test_add_func ("/recent-manager/add", recent_manager_add);
301 g_test_add_func ("/recent-manager/add-many", recent_manager_add_many);
302 g_test_add_func ("/recent-manager/has-item", recent_manager_has_item);
303 g_test_add_func ("/recent-manager/move-item", recent_manager_move_item);
304 g_test_add_func ("/recent-manager/lookup-item", recent_manager_lookup_item);
305 g_test_add_func ("/recent-manager/remove-item", recent_manager_remove_item);
306 g_test_add_func ("/recent-manager/purge", recent_manager_purge);
308 return g_test_run ();