3 #include <gio/gfiledescriptorbased.h>
11 file = g_file_new_for_path ("./some/directory/testfile");
13 s = g_file_get_basename (file);
14 g_assert_cmpstr (s, ==, "testfile");
17 s = g_file_get_uri (file);
18 g_assert (g_str_has_prefix (s, "file://"));
19 g_assert (g_str_has_suffix (s, "/some/directory/testfile"));
22 g_assert (g_file_has_uri_scheme (file, "file"));
23 s = g_file_get_uri_scheme (file);
24 g_assert_cmpstr (s, ==, "file");
27 g_object_unref (file);
38 file = g_file_new_for_path ("./some/directory/testfile");
39 file2 = g_file_new_for_path ("./some/directory");
40 root = g_file_new_for_path ("/");
42 g_assert (g_file_has_parent (file, file2));
44 parent = g_file_get_parent (file);
45 g_assert (g_file_equal (parent, file2));
46 g_object_unref (parent);
48 g_assert (g_file_get_parent (root) == NULL);
50 g_object_unref (file);
51 g_object_unref (file2);
52 g_object_unref (root);
62 file = g_file_new_for_path ("./some/directory");
63 child = g_file_get_child (file, "child");
64 g_assert (g_file_has_parent (child, file));
66 child2 = g_file_get_child_for_display_name (file, "child2", NULL);
67 g_assert (g_file_has_parent (child2, file));
69 g_object_unref (child);
70 g_object_unref (child2);
71 g_object_unref (file);
80 file = g_file_new_for_path (SRCDIR "/file.c");
81 type = g_file_query_file_type (file, 0, NULL);
82 g_assert_cmpint (type, ==, G_FILE_TYPE_REGULAR);
83 g_object_unref (file);
85 file = g_file_new_for_path (SRCDIR "/schema-tests");
86 type = g_file_query_file_type (file, 0, NULL);
87 g_assert_cmpint (type, ==, G_FILE_TYPE_DIRECTORY);
88 g_object_unref (file);
95 GFileMonitor *monitor;
96 GOutputStream *ostream;
97 GInputStream *istream;
100 gint monitor_created;
101 gint monitor_deleted;
102 gint monitor_changed;
109 monitor_changed (GFileMonitor *monitor,
112 GFileMonitorEvent event_type,
115 CreateDeleteData *data = user_data;
117 g_assert_cmpstr (data->monitor_path, ==, g_file_get_path (file));
119 if (event_type == G_FILE_MONITOR_EVENT_CREATED)
120 data->monitor_created++;
121 if (event_type == G_FILE_MONITOR_EVENT_DELETED)
122 data->monitor_deleted++;
123 if (event_type == G_FILE_MONITOR_EVENT_CHANGED)
124 data->monitor_changed++;
129 quit_idle (gpointer user_data)
131 CreateDeleteData *data = user_data;
133 g_main_loop_quit (data->loop);
139 iclosed_cb (GObject *source,
143 CreateDeleteData *data = user_data;
148 ret = g_input_stream_close_finish (data->istream, res, &error);
149 g_assert_no_error (error);
152 g_assert (g_input_stream_is_closed (data->istream));
154 ret = g_file_delete (data->file, NULL, &error);
156 g_assert_no_error (error);
158 /* work around file monitor bug:
159 * inotify events are only processed every 1000 ms, regardless
160 * of the rate limit set on the file monitor
162 g_timeout_add (2000, quit_idle, data);
166 read_cb (GObject *source,
170 CreateDeleteData *data = user_data;
175 size = g_input_stream_read_finish (data->istream, res, &error);
176 g_assert_no_error (error);
177 g_assert_cmpint (size, ==, strlen (data->data));
178 g_assert_cmpstr (data->buffer, ==, data->data);
180 g_assert (!g_input_stream_is_closed (data->istream));
182 g_input_stream_close_async (data->istream, 0, NULL, iclosed_cb, data);
186 opened_cb (GObject *source,
190 CreateDeleteData *data = user_data;
194 data->istream = (GInputStream *)g_file_read_finish (data->file, res, &error);
195 g_assert_no_error (error);
197 data->buffer = g_new0 (gchar, strlen (data->data) + 1);
198 g_input_stream_read_async (data->istream,
208 oclosed_cb (GObject *source,
212 CreateDeleteData *data = user_data;
217 ret = g_output_stream_close_finish (data->ostream, res, &error);
218 g_assert_no_error (error);
220 g_assert (g_output_stream_is_closed (data->ostream));
222 g_file_read_async (data->file, 0, NULL, opened_cb, data);
226 written_cb (GObject *source,
230 CreateDeleteData *data = user_data;
235 size = g_output_stream_write_finish (data->ostream, res, &error);
236 g_assert_no_error (error);
237 g_assert_cmpint (size, ==, strlen (data->data));
238 g_assert (!g_output_stream_is_closed (data->ostream));
240 g_output_stream_close_async (data->ostream, 0, NULL, oclosed_cb, data);
244 created_cb (GObject *source,
248 CreateDeleteData *data = user_data;
252 data->ostream = (GOutputStream *)g_file_create_finish (G_FILE (source), res, &error);
253 g_assert_no_error (error);
254 g_assert (g_file_query_exists (data->file, NULL));
256 data->data = "abcdefghijklmnopqrstuvxyz";
257 g_output_stream_write_async (data->ostream,
267 stop_timeout (gpointer data)
269 g_assert_not_reached ();
275 * This test does a fully async create-write-read-delete.
279 test_create_delete (void)
283 CreateDeleteData *data;
285 data = g_new0 (CreateDeleteData, 1);
288 fd = g_file_open_tmp ("g_file_create_delete_XXXXXX", &data->monitor_path, &error);
289 g_assert_no_error (error);
290 unlink (data->monitor_path);
293 data->file = g_file_new_for_path (data->monitor_path);
294 g_assert (!g_file_query_exists (data->file, NULL));
296 data->monitor = g_file_monitor_file (data->file, 0, NULL, &error);
297 g_file_monitor_set_rate_limit (data->monitor, 100);
298 g_assert_no_error (error);
300 g_signal_connect (data->monitor, "changed", G_CALLBACK (monitor_changed), data);
302 data->loop = g_main_loop_new (NULL, FALSE);
304 g_timeout_add (5000, stop_timeout, NULL);
306 g_file_create_async (data->file, 0, 0, NULL, created_cb, data);
308 g_main_loop_run (data->loop);
310 g_assert_cmpint (data->monitor_created, ==, 1);
311 g_assert_cmpint (data->monitor_deleted, ==, 1);
312 g_assert_cmpint (data->monitor_changed, >, 0);
314 g_main_loop_unref (data->loop);
315 g_file_monitor_cancel (data->monitor);
316 g_object_unref (data->monitor);
317 g_object_unref (data->ostream);
318 g_object_unref (data->istream);
319 g_object_unref (data->file);
320 g_free (data->monitor_path);
321 g_free (data->buffer);
326 main (int argc, char *argv[])
330 g_test_init (&argc, &argv, NULL);
332 g_test_add_func ("/file/basic", test_basic);
333 g_test_add_func ("/file/parent", test_parent);
334 g_test_add_func ("/file/child", test_child);
335 g_test_add_func ("/file/type", test_type);
336 g_test_add_func ("/file/create-delete", test_create_delete);
338 return g_test_run ();