#include static GVolumeMonitor *monitor; static void do_mount_tests (GDrive *drive, GVolume *volume, GMount *mount) { GDrive *d; GVolume *v; gchar *name; gchar *uuid; name = g_mount_get_name (mount); g_assert (name != NULL); g_free (name); v = g_mount_get_volume (mount); g_assert (v == volume); if (v != NULL) g_object_unref (v); d = g_mount_get_drive (mount); g_assert (d == drive); if (d != NULL) g_object_unref (d); uuid = g_mount_get_uuid (mount); if (uuid) { GMount *m; m = g_volume_monitor_get_mount_for_uuid (monitor, uuid); g_assert (m == mount); g_object_unref (m); g_free (uuid); } } static void do_volume_tests (GDrive *drive, GVolume *volume) { GDrive *d; gchar *name; GMount *mount; gchar *uuid; name = g_volume_get_name (volume); g_assert (name != NULL); g_free (name); d = g_volume_get_drive (volume); g_assert (d == drive); if (d != NULL) g_object_unref (d); mount = g_volume_get_mount (volume); if (mount != NULL) { do_mount_tests (drive, volume, mount); g_object_unref (mount); } uuid = g_volume_get_uuid (volume); if (uuid) { GVolume *v; v = g_volume_monitor_get_volume_for_uuid (monitor, uuid); g_assert (v == volume); g_object_unref (v); g_free (uuid); } } static void do_drive_tests (GDrive *drive) { GList *volumes, *l; gchar *name; gboolean has_volumes; g_assert (G_IS_DRIVE (drive)); name = g_drive_get_name (drive); g_assert (name != NULL); g_free (name); has_volumes = g_drive_has_volumes (drive); volumes = g_drive_get_volumes (drive); g_assert (has_volumes == (volumes != NULL)); for (l = volumes; l; l = l->next) { GVolume *volume = l->data; do_volume_tests (drive, volume); } g_list_free_full (volumes, g_object_unref); } static void test_connected_drives (void) { GList *drives; GList *l; drives = g_volume_monitor_get_connected_drives (monitor); for (l = drives; l; l = l->next) { GDrive *drive = l->data; do_drive_tests (drive); } g_list_free_full (drives, g_object_unref); } static void test_volumes (void) { GList *volumes, *l; volumes = g_volume_monitor_get_volumes (monitor); for (l = volumes; l; l = l->next) { GVolume *volume = l->data; GDrive *drive; drive = g_volume_get_drive (volume); do_volume_tests (drive, volume); if (drive != NULL) g_object_unref (drive); } g_list_free_full (volumes, g_object_unref); } static void test_mounts (void) { GList *mounts, *l; mounts = g_volume_monitor_get_mounts (monitor); for (l = mounts; l; l = l->next) { GMount *mount = l->data; GVolume *volume; GDrive *drive; drive = g_mount_get_drive (mount); volume = g_mount_get_volume (mount); do_mount_tests (drive, volume, mount); if (drive != NULL) g_object_unref (drive); if (volume != NULL) g_object_unref (volume); } g_list_free_full (mounts, g_object_unref); } int main (int argc, char *argv[]) { gboolean ret; g_setenv ("GIO_USE_VFS", "local", FALSE); g_test_init (&argc, &argv, NULL); monitor = g_volume_monitor_get (); g_test_add_func ("/volumemonitor/connected_drives", test_connected_drives); g_test_add_func ("/volumemonitor/volumes", test_volumes); g_test_add_func ("/volumemonitor/mounts", test_mounts); ret = g_test_run (); g_object_unref (monitor); return ret; }