diff options
author | Alexandru Fazakas <alex.fazakas97@gmail.com> | 2018-08-28 12:35:46 +0000 |
---|---|---|
committer | Alexandru Fazakas <alex.fazakas97@gmail.com> | 2018-08-28 12:35:46 +0000 |
commit | 375c9ee792e1aa876ce314896a9b9c020ef5a522 (patch) | |
tree | 24b2a42e052e7d7ebdd05b67181f8cc7c5f42d55 /test | |
parent | 4593d71b7f495c405c941a4c2690f3560fe753d2 (diff) | |
download | nautilus-375c9ee792e1aa876ce314896a9b9c020ef5a522.tar.gz |
Undo/redo, search tests, test library and more
Diffstat (limited to 'test')
10 files changed, 3247 insertions, 766 deletions
diff --git a/test/automated/displayless/meson.build b/test/automated/displayless/meson.build index c3eebbad4..58f0b853b 100644 --- a/test/automated/displayless/meson.build +++ b/test/automated/displayless/meson.build @@ -17,6 +17,15 @@ tests = [ ['test-nautilus-search-engine', [ 'test-nautilus-search-engine.c' ]], + ['test-nautilus-search-engine-simple', [ + 'test-nautilus-search-engine-simple.c' + ]], + ['test-nautilus-search-engine-model', [ + 'test-nautilus-search-engine-model.c' + ]], + ['test-nautilus-search-engine-tracker', [ + 'test-nautilus-search-engine-tracker.c' + ]], ['test-file-operations-copy-files', [ 'test-file-operations-copy-files.c' ]], @@ -28,7 +37,7 @@ tests = [ foreach t: tests test( t[0], - executable(t[0], t[1], dependencies: libnautilus_dep), + executable(t[0], t[1], files('test-utilities.c'), dependencies: libnautilus_dep), env: [ test_env, 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), diff --git a/test/automated/displayless/test-file-operations-copy-files.c b/test/automated/displayless/test-file-operations-copy-files.c index 30829d85f..8147adf8a 100644 --- a/test/automated/displayless/test-file-operations-copy-files.c +++ b/test/automated/displayless/test-file-operations-copy-files.c @@ -1,11 +1,4 @@ -#include <glib.h> -#include "src/nautilus-directory.h" -#include "src/nautilus-file-utilities.h" -#include "src/nautilus-search-directory.h" -#include "src/nautilus-directory.h" -#include "src/nautilus-file-operations.c" -#include <unistd.h> -#include "eel/eel-string.h" +#include "test-utilities.h" static void test_copy_one_file (void) @@ -16,41 +9,67 @@ test_copy_one_file (void) g_autoptr (GFile) file = NULL; g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("copy"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir_child"); g_assert_true (g_file_query_exists (result_file, NULL)); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_one_file_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir_child"); + g_assert_false (g_file_query_exists (result_file, NULL)); + g_assert_true (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "copy"); } static void @@ -63,327 +82,600 @@ test_copy_one_empty_directory (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_one_empty_directory ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); first_dir = g_file_get_child (root, "copy_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir_child"); g_assert_true (g_file_query_exists (result_file, NULL)); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "copy"); } static void -test_copy_directories_small (void) +test_copy_one_empty_directory_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_empty_directory ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir_child"); + g_assert_false (g_file_query_exists (result_file, NULL)); + + g_assert_true (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_files_small (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("copy", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 10; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 10; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } static void -test_copy_directories_medium (void) +test_copy_files_small_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("copy", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_files_medium (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("copy", 1000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 1000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 1000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } +static void +test_copy_files_medium_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("copy", 1000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 1000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + test_operation_undo (); + + for (int i = 0; i < 1000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} static void -test_copy_directories_large (void) +test_copy_files_large (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("copy", 10000); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 10000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 10000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } +static void +test_copy_files_large_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("copy", 10000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 10000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} static void -test_copy_files_small (void) +test_copy_directories_small (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_directories ("copy", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 10; i++) { - g_autoptr (GError) error = NULL; - file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 10; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } static void -test_copy_files_medium (void) +test_copy_directories_small_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_directories ("copy", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 10; i++) { - g_autoptr (GError) error = NULL; + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_directories_medium (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + create_multiple_directories ("copy", 1000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 1000; i++) + { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 1000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } static void -test_copy_files_large (void) +test_copy_directories_medium_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_directories ("copy", 1000); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 1000; i++) { - g_autoptr (GError) error = NULL; + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + + test_operation_undo (); + for (int i = 0; i < 1000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_directories_large (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("copy", 10000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10000; i++) + { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } dir = g_file_get_child (root, "copy_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 10000; i++) { file_name = g_strdup_printf ("copy_file_%i", i); file = g_file_get_child (dir, file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_directories_large_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("copy", 10000); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (root, file_name); + g_assert_true (file != NULL); + g_free (file_name); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "copy_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_copy_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 10000; i++) + { + file_name = g_strdup_printf ("copy_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); } /* The hierarchy looks like this: @@ -392,7 +684,7 @@ test_copy_files_large (void) * We're copying first_dir to second_dir. */ static void -test_copy_first_hierarchy (void) +test_copy_full_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -401,39 +693,76 @@ test_copy_first_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_one_file ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); file = g_file_get_child (result_file, "copy_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_full_directory_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "copy"); } /* The hierarchy looks like this: @@ -443,7 +772,7 @@ test_copy_first_hierarchy (void) * We're copying first_dir to second_dir. */ static void -test_copy_second_hierarchy (void) +test_copy_first_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -452,52 +781,94 @@ test_copy_second_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_first_hierarchy ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (first_dir, "copy_second_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); file = g_file_get_child (result_file, "copy_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (result_file, "copy_second_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); + file = g_file_get_child (first_dir, "copy_first_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "copy_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_first_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_first_hierarchy ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (first_dir, "copy_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "copy_second_child"); + g_assert_false (g_file_query_exists (file, NULL)); file = g_file_get_child (first_dir, "copy_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_file_delete (file, NULL, NULL); file = g_file_get_child (first_dir, "copy_second_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_file_delete (file, NULL, NULL); g_assert_true (g_file_query_exists (first_dir, NULL)); - g_file_delete (first_dir, NULL, NULL); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + + empty_directory_by_prefix (root, "copy"); } /* The hierarchy looks like this: @@ -506,7 +877,7 @@ test_copy_second_hierarchy (void) * We're copying first_dir to second_dir. */ static void -test_copy_third_hierarchy (void) +test_copy_second_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -515,28 +886,23 @@ test_copy_third_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_second_hierarchy ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); first_dir = g_file_get_child (root, "copy_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (file, "copy_second_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); @@ -545,24 +911,67 @@ test_copy_third_hierarchy (void) file = g_file_get_child (file, "copy_second_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (result_file, "copy_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); + file = g_file_get_child (first_dir, "copy_first_child"); + file = g_file_get_child (file, "copy_second_child"); + + file = g_file_get_child (first_dir, "copy_first_child"); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_second_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_second_hierarchy ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); file = g_file_get_child (first_dir, "copy_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (file, "copy_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "copy_second_child"); - g_assert_true (g_file_delete (file, NULL, NULL)); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "copy_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); file = g_file_get_child (first_dir, "copy_first_child"); - g_assert_true (g_file_delete (file, NULL, NULL)); + file = g_file_get_child (file, "copy_second_child"); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); + file = g_file_get_child (first_dir, "copy_first_child"); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "copy"); } /* The hierarchy looks like this: @@ -572,7 +981,7 @@ test_copy_third_hierarchy (void) * We're copying first_dir to second_dir. */ static void -test_copy_fourth_hierarchy (void) +test_copy_third_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -581,37 +990,32 @@ test_copy_fourth_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_third_hierarchy ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_dir1"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (file, "copy_dir1_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_dir2"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (file, "copy_dir2_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); second_dir = g_file_get_child (root, "copy_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); result_file = g_file_get_child (second_dir, "copy_first_dir"); @@ -620,41 +1024,100 @@ test_copy_fourth_hierarchy (void) g_assert_true (g_file_query_exists (file, NULL)); file = g_file_get_child (file, "copy_dir1_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (result_file, "copy_first_dir_dir1"); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (result_file, "copy_first_dir_dir2"); g_assert_true (g_file_query_exists (file, NULL)); file = g_file_get_child (file, "copy_dir2_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (result_file, "copy_first_dir_dir2"); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); + file = g_file_get_child (first_dir, "copy_first_dir_dir1"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "copy_dir1_child"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "copy_first_dir_dir1"); + + file = g_file_get_child (first_dir, "copy_first_dir_dir2"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "copy_dir2_child"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "copy_first_dir_dir2"); + g_assert_true (g_file_query_exists (file, NULL)); + + g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_third_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_third_hierarchy ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_dir1"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "copy_dir1_child"); + g_assert_true (file != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_dir2"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "copy_dir2_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "copy_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_copy_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "copy_first_dir"); + + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_first_dir_dir1"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "copy_dir1_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "copy_first_dir_dir2"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "copy_dir2_child"); + g_assert_false (g_file_query_exists (file, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_dir1"); g_assert_true (g_file_query_exists (file, NULL)); file = g_file_get_child (file, "copy_dir1_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_dir1"); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_dir2"); g_assert_true (g_file_query_exists (file, NULL)); file = g_file_get_child (file, "copy_dir2_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_dir2"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); g_assert_true (g_file_query_exists (first_dir, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "copy"); } /* The hierarchy looks like this: @@ -664,7 +1127,7 @@ test_copy_fourth_hierarchy (void) * We're copying first_dir and second_dir to third_dir. */ static void -test_copy_fifth_hierarchy (void) +test_copy_fourth_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -674,62 +1137,109 @@ test_copy_fifth_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_fourth_hierarchy ("copy"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "copy_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); second_dir = g_file_get_child (root, "copy_second_dir"); files = g_list_prepend (files, g_object_ref (second_dir)); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); file = g_file_get_child (second_dir, "copy_second_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); third_dir = g_file_get_child (root, "copy_third_dir"); g_assert_true (third_dir != NULL); - g_file_make_directory (third_dir, NULL, NULL); nautilus_file_operations_copy_sync (files, - third_dir, - NULL, - NULL, - NULL); + third_dir); result_file = g_file_get_child (third_dir, "copy_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); file = g_file_get_child (result_file, "copy_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); result_file = g_file_get_child (third_dir, "copy_second_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); file = g_file_get_child (result_file, "copy_second_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); file = g_file_get_child (first_dir, "copy_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); g_assert_true (g_file_query_exists (first_dir, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); file = g_file_get_child (second_dir, "copy_second_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); g_assert_true (g_file_query_exists (second_dir, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); - g_assert_true (g_file_delete (third_dir, NULL, NULL)); + empty_directory_by_prefix (root, "copy"); +} + +static void +test_copy_fourth_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) third_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_fourth_hierarchy ("copy"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "copy_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "copy_second_dir"); + files = g_list_prepend (files, g_object_ref (second_dir)); + g_assert_true (second_dir != NULL); + + file = g_file_get_child (second_dir, "copy_second_dir_child"); + g_assert_true (file != NULL); + + third_dir = g_file_get_child (root, "copy_third_dir"); + g_assert_true (third_dir != NULL); + + nautilus_file_operations_copy_sync (files, + third_dir); + + test_operation_undo (); + + result_file = g_file_get_child (third_dir, "copy_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + result_file = g_file_get_child (third_dir, "copy_second_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "copy_second_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "copy_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + g_assert_true (g_file_query_exists (first_dir, NULL)); + + file = g_file_get_child (second_dir, "copy_second_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + g_assert_true (g_file_query_exists (second_dir, NULL)); + + empty_directory_by_prefix (root, "copy"); } static void @@ -737,30 +1247,56 @@ setup_test_suite (void) { g_test_add_func ("/test-copy-one-file/1.0", test_copy_one_file); + g_test_add_func ("/test-copy-one-file-undo/1.0", + test_copy_one_file_undo); g_test_add_func ("/test-copy-one-empty-directory/1.0", test_copy_one_empty_directory); + g_test_add_func ("/test-copy-one-empty-directory-undo/1.0", + test_copy_one_empty_directory_undo); g_test_add_func ("/test-copy-files/1.0", test_copy_files_small); + g_test_add_func ("/test-copy-files-undo/1.0", + test_copy_files_small_undo); g_test_add_func ("/test-copy-files/1.1", test_copy_files_medium); + g_test_add_func ("/test-copy-files-undo/1.1", + test_copy_files_medium_undo); g_test_add_func ("/test-copy-files/1.2", test_copy_files_large); + g_test_add_func ("/test-copy-files-undo/1.2", + test_copy_files_large_undo); g_test_add_func ("/test-copy-directories/1.0", test_copy_directories_small); + g_test_add_func ("/test-copy-directories-undo/1.0", + test_copy_directories_small_undo); g_test_add_func ("/test-copy-directories/1.1", test_copy_directories_medium); + g_test_add_func ("/test-copy-directories-undo/1.1", + test_copy_directories_medium_undo); g_test_add_func ("/test-copy-directories/1.2", test_copy_directories_large); + g_test_add_func ("/test-copy-directories-undo/1.2", + test_copy_directories_large_undo); g_test_add_func ("/test-copy-hierarchy/1.0", - test_copy_first_hierarchy); + test_copy_full_directory); + g_test_add_func ("/test-copy-hierarchy-undo/1.0", + test_copy_full_directory_undo); g_test_add_func ("/test-copy-hierarchy/1.1", - test_copy_second_hierarchy); + test_copy_first_hierarchy); + g_test_add_func ("/test-copy-hierarchy-undo/1.1", + test_copy_first_hierarchy_undo); g_test_add_func ("/test-copy-hierarchy/1.2", - test_copy_third_hierarchy); + test_copy_second_hierarchy); + g_test_add_func ("/test-copy-hierarchy-undo/1.2", + test_copy_second_hierarchy_undo); g_test_add_func ("/test-copy-hierarchy/1.3", - test_copy_fourth_hierarchy); + test_copy_third_hierarchy); + g_test_add_func ("/test-copy-hierarchy-undo/1.3", + test_copy_third_hierarchy_undo); g_test_add_func ("/test-copy-hierarchy/1.4", - test_copy_fifth_hierarchy); + test_copy_fourth_hierarchy); + g_test_add_func ("/test-copy-hierarchy-undo/1.4", + test_copy_fourth_hierarchy_undo); } int @@ -768,10 +1304,10 @@ main (int argc, char *argv[]) { g_autoptr (NautilusFileUndoManager) undo_manager = NULL; + undo_manager = nautilus_file_undo_manager_new (); g_test_init (&argc, &argv, NULL); g_test_set_nonfatal_assertions (); nautilus_ensure_extension_points(); - undo_manager = nautilus_file_undo_manager_new (); setup_test_suite (); diff --git a/test/automated/displayless/test-file-operations-move-files.c b/test/automated/displayless/test-file-operations-move-files.c index 1b2e678aa..6b476e7fa 100644 --- a/test/automated/displayless/test-file-operations-move-files.c +++ b/test/automated/displayless/test-file-operations-move-files.c @@ -1,13 +1,4 @@ -#include <glib.h> -#include <glib/gprintf.h> -#include "src/nautilus-directory.h" -#include "src/nautilus-file-utilities.h" -#include "src/nautilus-search-directory.h" -#include "src/nautilus-directory.h" -#include "src/nautilus-file-operations.c" -#include "src/nautilus-file-undo-manager.h" -#include <unistd.h> -#include "eel/eel-string.h" +#include "test-utilities.h" static void test_move_one_file (void) @@ -18,40 +9,107 @@ test_move_one_file (void) g_autoptr (GFile) file = NULL; g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("move"); root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_child"); + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); + + result_file = g_file_get_child (second_dir, "move_first_dir_child"); - result_file = g_file_get_child (second_dir, "first_dir_child"); g_assert_true (g_file_query_exists (result_file, NULL)); g_assert_false (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_one_file_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir_child"); + + g_assert_false (g_file_query_exists (result_file, NULL)); + g_assert_true (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_one_file_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir_child"); + + g_assert_true (g_file_query_exists (result_file, NULL)); + g_assert_false (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "move"); } static void @@ -64,313 +122,892 @@ test_move_one_empty_directory (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_one_empty_directory ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_child"); + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); - result_file = g_file_get_child (second_dir, "first_dir_child"); + result_file = g_file_get_child (second_dir, "move_first_dir_child"); g_assert_true (g_file_query_exists (result_file, NULL)); g_assert_false (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "move"); } static void -test_move_directories_small (void) +test_move_one_empty_directory_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_empty_directory ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir_child"); + g_assert_false (g_file_query_exists (result_file, NULL)); + g_assert_true (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_one_empty_directory_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_empty_directory ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir_child"); + g_assert_true (g_file_query_exists (result_file, NULL)); + g_assert_false (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_small (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("move", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 10; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); for (int i = 0; i < 10; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "move"); } static void -test_move_directories_medium (void) +test_move_files_small_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("move", 10); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 10; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); + + test_operation_undo (); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 10; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "move"); } -/* Test not included as it would timeout on the CI. */ +static void +test_move_files_small_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; -/*static void -test_move_directories_large (void) + create_multiple_files ("move", 10); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo_redo (); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_medium (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; + gchar *file_name; + + create_multiple_files ("move", 50); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 50; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 50; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); -}*/ + empty_directory_by_prefix (root, "move"); +} static void -test_move_files_small (void) +test_move_files_medium_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 50); + + root = g_file_new_for_path (g_get_tmp_dir ()); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_medium_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 50); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo_redo (); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_large (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_files ("move", 500); + + root = g_file_new_for_path (g_get_tmp_dir ()); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_large_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 500); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + test_operation_undo_redo (); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_files_large_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 500); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo_redo (); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_small (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("move", 10); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_small_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("move", 10); root = g_file_new_for_path (g_get_tmp_dir ()); for (int i = 0; i < 10; i++) { - g_autoptr (GError) error = NULL; + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_small_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 10); - file_name = g_strdup_printf ("file_%i", i); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 10; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); + + test_operation_undo_redo (); for (int i = 0; i < 10; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "move"); } static void -test_move_files_medium (void) +test_move_directories_medium (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("move", 50); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_medium_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_directories ("move", 50); root = g_file_new_for_path (g_get_tmp_dir ()); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 50; i++) { - g_autoptr (GError) error = NULL; + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} - file_name = g_strdup_printf ("file_%i", i); +static void +test_move_directories_medium_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_files ("move", 50); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 50; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); + + test_operation_undo_redo (); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 50; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); + + empty_directory_by_prefix (root, "move"); } +static void +test_move_directories_large (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("move", 500); -/* Test not included as it would timeout on the CI. */ + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); -/*static void -test_move_files_large (void) + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } + + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_large_undo (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; - g_autofree gchar *file_name = NULL; - GFileOutputStream *out = NULL; + gchar *file_name; + + create_multiple_directories ("move", 500); root = g_file_new_for_path (g_get_tmp_dir ()); - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 500; i++) { - g_autoptr (GError) error = NULL; + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (file != NULL); + files = g_list_prepend (files, g_object_ref (file)); + } - file_name = g_strdup_printf ("file_%i", i); + dir = g_file_get_child (root, "move_dir"); + g_assert_true (dir != NULL); + + nautilus_file_operations_move_sync (files, + dir); + + test_operation_undo (); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (dir, file_name); + g_assert_false (g_file_query_exists (file, NULL)); file = g_file_get_child (root, file_name); + g_free (file_name); + g_assert_true (g_file_query_exists (file, NULL)); + } + + g_assert_true (g_file_query_exists (dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_directories_large_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + g_autolist (GFile) files = NULL; + gchar *file_name; + + create_multiple_directories ("move", 500); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < 500; i++) + { + file_name = g_strdup_printf ("move_file_%i", i); + file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } - dir = g_file_get_child (root, "dir"); + dir = g_file_get_child (root, "move_dir"); g_assert_true (dir != NULL); - g_file_make_directory (dir, NULL, NULL); nautilus_file_operations_move_sync (files, - dir, - NULL, - NULL, - NULL); + dir); + + test_operation_undo_redo (); - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 500; i++) { - file_name = g_strdup_printf ("file_%i", i); + file_name = g_strdup_printf ("move_file_%i", i); file = g_file_get_child (dir, file_name); + g_free (file_name); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); } g_assert_true (g_file_query_exists (dir, NULL)); - g_assert_true (g_file_delete (dir, NULL, NULL)); -}*/ + + empty_directory_by_prefix (root, "move"); +} /* The hierarchy looks like this: * /tmp/first_dir/first_dir_child @@ -378,7 +1015,7 @@ test_move_files_large (void) * We're moving first_dir to second_dir. */ static void -test_move_first_hierarchy (void) +test_move_full_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -387,38 +1024,117 @@ test_move_first_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_one_file ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_child"); + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); - result_file = g_file_get_child (second_dir, "first_dir"); + result_file = g_file_get_child (second_dir, "move_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "first_dir_child"); + file = g_file_get_child (result_file, "move_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_full_directory_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); - file = g_file_get_child (first_dir, "first_dir_child"); + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_full_directory_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_one_file ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); } /* The hierarchy looks like this: @@ -428,7 +1144,7 @@ test_move_first_hierarchy (void) * We're moving first_dir to second_dir. */ static void -test_move_second_hierarchy (void) +test_move_first_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -437,49 +1153,145 @@ test_move_second_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_first_hierarchy ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_child"); + file = g_file_get_child (first_dir, "move_first_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - file = g_file_get_child (first_dir, "second_child"); + file = g_file_get_child (first_dir, "move_second_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); - result_file = g_file_get_child (second_dir, "first_dir"); + result_file = g_file_get_child (second_dir, "move_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "first_child"); + file = g_file_get_child (result_file, "move_first_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "move_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_second_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_first_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_first_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (first_dir, "move_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "move_second_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - file = g_file_get_child (result_file, "second_child"); + file = g_file_get_child (first_dir, "move_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_first_hierarchy_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_first_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (first_dir, "move_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); + file = g_file_get_child (result_file, "move_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); - file = g_file_get_child (first_dir, "first_child"); + file = g_file_get_child (first_dir, "move_first_child"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (first_dir, "second_child"); + file = g_file_get_child (first_dir, "move_second_child"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + + empty_directory_by_prefix (root, "move"); } /* The hierarchy looks like this: @@ -488,7 +1300,7 @@ test_move_second_hierarchy (void) * We're moving first_dir to second_dir. */ static void -test_move_third_hierarchy (void) +test_move_second_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -497,52 +1309,154 @@ test_move_third_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_second_hierarchy ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (file, "move_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (file, "move_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "move_first_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_second_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_second_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_second_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_true (file != NULL); + file = g_file_get_child (file, "move_second_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (file, "move_second_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_child"); + file = g_file_get_child (file, "move_second_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + g_assert_true (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_second_hierarchy_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_second_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_child"); + file = g_file_get_child (first_dir, "move_first_child"); g_assert_true (file != NULL); g_file_make_directory (file, NULL, NULL); - file = g_file_get_child (file, "second_child"); + file = g_file_get_child (file, "move_second_child"); g_assert_true (file != NULL); g_file_make_directory (file, NULL, NULL); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); - result_file = g_file_get_child (second_dir, "first_dir"); + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "first_child"); + file = g_file_get_child (result_file, "move_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "second_child"); + file = g_file_get_child (file, "move_second_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - file = g_file_get_child (result_file, "first_child"); + file = g_file_get_child (result_file, "move_first_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - - g_assert_true (g_file_delete (result_file, NULL, NULL)); - file = g_file_get_child (first_dir, "first_child"); + file = g_file_get_child (first_dir, "move_first_child"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "second_child"); + file = g_file_get_child (file, "move_second_child"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); - g_assert_true (g_file_delete (second_dir, NULL, NULL)); + empty_directory_by_prefix (root, "move"); } /* The hierarchy looks like this: @@ -552,7 +1466,7 @@ test_move_third_hierarchy (void) * We're moving first_dir to second_dir. */ static void -test_move_fourth_hierarchy (void) +test_move_third_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -561,77 +1475,203 @@ test_move_fourth_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_third_hierarchy ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + first_dir = g_file_get_child (root, "move_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_dir1"); + file = g_file_get_child (first_dir, "move_first_dir_dir1"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - file = g_file_get_child (file, "dir1_child"); + file = g_file_get_child (file, "move_dir1_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_dir2"); + file = g_file_get_child (first_dir, "move_first_dir_dir2"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - file = g_file_get_child (file, "dir2_child"); + file = g_file_get_child (file, "move_dir2_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - second_dir, - NULL, - NULL, - NULL); + second_dir); - result_file = g_file_get_child (second_dir, "first_dir"); + result_file = g_file_get_child (second_dir, "move_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "first_dir_dir1"); + file = g_file_get_child (result_file, "move_first_dir_dir1"); g_assert_true (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "dir1_child"); - g_assert_true (g_file_delete (file, NULL, NULL)); - file = g_file_get_child (result_file, "first_dir_dir1"); - g_assert_true (g_file_delete (file, NULL, NULL)); + file = g_file_get_child (file, "move_dir1_child"); + file = g_file_get_child (result_file, "move_first_dir_dir1"); - file = g_file_get_child (result_file, "first_dir_dir2"); + file = g_file_get_child (result_file, "move_first_dir_dir2"); g_assert_true (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "dir2_child"); + file = g_file_get_child (file, "move_dir2_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - file = g_file_get_child (result_file, "first_dir_dir2"); - g_assert_true (g_file_delete (file, NULL, NULL)); - - g_assert_true (g_file_delete (result_file, NULL, NULL)); + file = g_file_get_child (result_file, "move_first_dir_dir2"); - file = g_file_get_child (first_dir, "first_dir_dir1"); + file = g_file_get_child (first_dir, "move_first_dir_dir1"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "dir1_child"); + file = g_file_get_child (file, "move_dir1_child"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (first_dir, "first_dir_dir1"); - g_assert_false (g_file_delete (file, NULL, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_dir1"); - file = g_file_get_child (first_dir, "first_dir_dir2"); + file = g_file_get_child (first_dir, "move_first_dir_dir2"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (file, "dir2_child"); + file = g_file_get_child (file, "move_dir2_child"); g_assert_false (g_file_query_exists (file, NULL)); - file = g_file_get_child (first_dir, "first_dir_dir2"); + file = g_file_get_child (first_dir, "move_first_dir_dir2"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_third_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_third_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "move_dir1_child"); + g_assert_true (file != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "move_dir2_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_dir1"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir1_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (result_file, "move_first_dir_dir2"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir2_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir1_child"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir2_child"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + + g_assert_true (g_file_query_exists (first_dir, NULL)); + g_assert_true (g_file_delete (second_dir, NULL, NULL)); } +static void +test_move_third_hierarchy_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_third_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "move_dir1_child"); + g_assert_true (file != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + g_assert_true (file != NULL); + + file = g_file_get_child (file, "move_dir2_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + g_assert_true (second_dir != NULL); + + nautilus_file_operations_move_sync (files, + second_dir); + + test_operation_undo_redo (); + + result_file = g_file_get_child (second_dir, "move_first_dir"); + + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_dir1"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir1_child"); + file = g_file_get_child (result_file, "move_first_dir_dir1"); + + file = g_file_get_child (result_file, "move_first_dir_dir2"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir2_child"); + g_assert_true (g_file_query_exists (file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_dir2"); + + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir1_child"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_dir1"); + + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (file, "move_dir2_child"); + g_assert_false (g_file_query_exists (file, NULL)); + file = g_file_get_child (first_dir, "move_first_dir_dir2"); + g_assert_false (g_file_query_exists (file, NULL)); + + g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + /* The hierarchy looks like this: * /tmp/first_dir/first_dir_child * /tmp/second_dir/second_dir_child @@ -639,7 +1679,7 @@ test_move_fourth_hierarchy (void) * We're moving first_dir and second_dir to third_dir. */ static void -test_move_fifth_hierarchy (void) +test_move_fourth_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; @@ -649,58 +1689,162 @@ test_move_fifth_hierarchy (void) g_autoptr (GFile) result_file = NULL; g_autolist (GFile) files = NULL; + create_fourth_hierarchy ("move"); + root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "first_dir"); + first_dir = g_file_get_child (root, "move_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - file = g_file_get_child (first_dir, "first_dir_child"); + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - second_dir = g_file_get_child (root, "second_dir"); + second_dir = g_file_get_child (root, "move_second_dir"); files = g_list_prepend (files, g_object_ref (second_dir)); g_assert_true (second_dir != NULL); - g_file_make_directory (second_dir, NULL, NULL); - file = g_file_get_child (second_dir, "second_dir_child"); + file = g_file_get_child (second_dir, "move_second_dir_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - third_dir = g_file_get_child (root, "third_dir"); + third_dir = g_file_get_child (root, "move_third_dir"); + g_assert_true (third_dir != NULL); + + nautilus_file_operations_move_sync (files, + third_dir); + + result_file = g_file_get_child (third_dir, "move_first_dir"); + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + result_file = g_file_get_child (third_dir, "move_second_dir"); + g_assert_true (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_second_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + g_assert_false (g_file_query_exists (first_dir, NULL)); + + file = g_file_get_child (second_dir, "move_second_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + g_assert_false (g_file_query_exists (second_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_fourth_hierarchy_undo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) third_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_fourth_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + files = g_list_prepend (files, g_object_ref (second_dir)); + g_assert_true (second_dir != NULL); + + file = g_file_get_child (second_dir, "move_second_dir_child"); + g_assert_true (file != NULL); + + third_dir = g_file_get_child (root, "move_third_dir"); + g_assert_true (third_dir != NULL); + + nautilus_file_operations_move_sync (files, + third_dir); + + test_operation_undo (); + + result_file = g_file_get_child (third_dir, "move_first_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_first_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + result_file = g_file_get_child (third_dir, "move_second_dir"); + g_assert_false (g_file_query_exists (result_file, NULL)); + file = g_file_get_child (result_file, "move_second_dir_child"); + g_assert_false (g_file_query_exists (file, NULL)); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + g_assert_true (g_file_query_exists (first_dir, NULL)); + + file = g_file_get_child (second_dir, "move_second_dir_child"); + g_assert_true (g_file_query_exists (file, NULL)); + g_assert_true (g_file_query_exists (second_dir, NULL)); + + empty_directory_by_prefix (root, "move"); +} + +static void +test_move_fourth_hierarchy_undo_redo (void) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) third_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + g_autolist (GFile) files = NULL; + + create_fourth_hierarchy ("move"); + + root = g_file_new_for_path (g_get_tmp_dir ()); + first_dir = g_file_get_child (root, "move_first_dir"); + files = g_list_prepend (files, g_object_ref (first_dir)); + g_assert_true (first_dir != NULL); + + file = g_file_get_child (first_dir, "move_first_dir_child"); + g_assert_true (file != NULL); + + second_dir = g_file_get_child (root, "move_second_dir"); + files = g_list_prepend (files, g_object_ref (second_dir)); + g_assert_true (second_dir != NULL); + + file = g_file_get_child (second_dir, "move_second_dir_child"); + g_assert_true (file != NULL); + + third_dir = g_file_get_child (root, "move_third_dir"); g_assert_true (third_dir != NULL); - g_file_make_directory (third_dir, NULL, NULL); nautilus_file_operations_move_sync (files, - third_dir, - NULL, - NULL, - NULL); + third_dir); + + test_operation_undo_redo (); - result_file = g_file_get_child (third_dir, "first_dir"); + result_file = g_file_get_child (third_dir, "move_first_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "first_dir_child"); + file = g_file_get_child (result_file, "move_first_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - result_file = g_file_get_child (third_dir, "second_dir"); + result_file = g_file_get_child (third_dir, "move_second_dir"); g_assert_true (g_file_query_exists (result_file, NULL)); - file = g_file_get_child (result_file, "second_dir_child"); + file = g_file_get_child (result_file, "move_second_dir_child"); g_assert_true (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (file, NULL, NULL)); - g_assert_true (g_file_delete (result_file, NULL, NULL)); - file = g_file_get_child (first_dir, "first_dir_child"); + file = g_file_get_child (first_dir, "move_first_dir_child"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); - file = g_file_get_child (second_dir, "second_dir_child"); + file = g_file_get_child (second_dir, "move_second_dir_child"); g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (second_dir, NULL)); - g_assert_true (g_file_delete (third_dir, NULL, NULL)); + empty_directory_by_prefix (root, "move"); } static void @@ -708,30 +1852,82 @@ setup_test_suite (void) { g_test_add_func ("/test-move-one-file/1.0", test_move_one_file); + g_test_add_func ("/test-move-one-file-undo/1.0", + test_move_one_file_undo); + g_test_add_func ("/test-move-one-file-undo-redo/1.0", + test_move_one_file_undo_redo); g_test_add_func ("/test-move-one-empty-directory/1.0", test_move_one_empty_directory); + g_test_add_func ("/test-move-one-empty-directory-undo/1.0", + test_move_one_empty_directory_undo); + g_test_add_func ("/test-move-one-empty-directory-undo-redo/1.0", + test_move_one_empty_directory_undo_redo); g_test_add_func ("/test-move-files/1.0", test_move_files_small); + g_test_add_func ("/test-move-files-undo/1.0", + test_move_files_small_undo); + g_test_add_func ("/test-move-files-undo-redo/1.0", + test_move_files_small_undo_redo); g_test_add_func ("/test-move-files/1.1", test_move_files_medium); - // g_test_add_func ("/test-move-files/1.2", - // test_move_files_large); + g_test_add_func ("/test-move-files-undo/1.1", + test_move_files_medium_undo); + g_test_add_func ("/test-move-files-undo-redo/1.1", + test_move_files_medium_undo_redo); + g_test_add_func ("/test-move-files/1.2", + test_move_files_large); + g_test_add_func ("/test-move-files-undo/1.2", + test_move_files_large_undo); + g_test_add_func ("/test-move-files-undo-redo/1.2", + test_move_files_large_undo_redo); g_test_add_func ("/test-move-directories/1.0", test_move_directories_small); + g_test_add_func ("/test-move-directories-undo/1.0", + test_move_directories_small_undo); + g_test_add_func ("/test-move-directories-undo-redo/1.0", + test_move_directories_small_undo_redo); g_test_add_func ("/test-move-directories/1.1", test_move_directories_medium); - // g_test_add_func ("/test-move-directories/1.2", - // test_move_directories_large); + g_test_add_func ("/test-move-directories-undo/1.1", + test_move_directories_medium_undo); + g_test_add_func ("/test-move-directories-undo-redo/1.1", + test_move_directories_medium_undo_redo); + g_test_add_func ("/test-move-directories/1.2", + test_move_directories_large); + g_test_add_func ("/test-move-directories-undo/1.2", + test_move_directories_large_undo); + g_test_add_func ("/test-move-directories-undo-redo/1.2", + test_move_directories_large_undo_redo); g_test_add_func ("/test-move-hierarchy/1.0", - test_move_first_hierarchy); + test_move_full_directory); + g_test_add_func ("/test-move-hierarchy-undo/1.0", + test_move_full_directory_undo); + g_test_add_func ("/test-move-hierarchy-undo-redo/1.0", + test_move_full_directory_undo_redo); g_test_add_func ("/test-move-hierarchy/1.1", - test_move_second_hierarchy); + test_move_first_hierarchy); + g_test_add_func ("/test-move-hierarchy-undo/1.1", + test_move_first_hierarchy_undo); + g_test_add_func ("/test-move-hierarchy-undo-redo/1.1", + test_move_first_hierarchy_undo_redo); g_test_add_func ("/test-move-hierarchy/1.2", - test_move_third_hierarchy); + test_move_second_hierarchy); + g_test_add_func ("/test-move-hierarchy-undo/1.2", + test_move_second_hierarchy_undo); + g_test_add_func ("/test-move-hierarchy-undo-redo/1.2", + test_move_second_hierarchy_undo_redo); g_test_add_func ("/test-move-hierarchy/1.3", - test_move_fourth_hierarchy); + test_move_third_hierarchy); + g_test_add_func ("/test-move-hierarchy-undo/1.3", + test_move_third_hierarchy_undo); + g_test_add_func ("/test-move-hierarchy-undo-redo/1.3", + test_move_third_hierarchy_undo_redo); g_test_add_func ("/test-move-hierarchy/1.4", - test_move_fifth_hierarchy); + test_move_fourth_hierarchy); + g_test_add_func ("/test-move-hierarchy-undo/1.4", + test_move_fourth_hierarchy_undo); + g_test_add_func ("/test-move-hierarchy-undo-redo/1.4", + test_move_fourth_hierarchy_undo_redo); } int @@ -739,10 +1935,10 @@ main (int argc, char *argv[]) { g_autoptr (NautilusFileUndoManager) undo_manager = NULL; + undo_manager = nautilus_file_undo_manager_new (); g_test_init (&argc, &argv, NULL); g_test_set_nonfatal_assertions (); nautilus_ensure_extension_points(); - undo_manager = nautilus_file_undo_manager_new (); setup_test_suite (); diff --git a/test/automated/displayless/test-file-operations-trash-or-delete.c b/test/automated/displayless/test-file-operations-trash-or-delete.c index e6115ec70..21a451340 100644 --- a/test/automated/displayless/test-file-operations-trash-or-delete.c +++ b/test/automated/displayless/test-file-operations-trash-or-delete.c @@ -1,11 +1,4 @@ -#include <glib.h> -#include "src/nautilus-directory.h" -#include "src/nautilus-file-utilities.h" -#include "src/nautilus-search-directory.h" -#include "src/nautilus-directory.h" -#include "src/nautilus-file-operations.c" -#include <unistd.h> -#include "eel/eel-string.h" +#include "test-utilities.h" static void test_trash_one_file (void) @@ -14,31 +7,24 @@ test_trash_one_file (void) g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); g_assert_false (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -47,40 +33,36 @@ test_trash_more_files_func (gint files_to_trash) g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; + + create_multiple_files ("trash_or_delete", files_to_trash); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < files_to_trash; i++) { - g_autofree gchar *file_name = NULL; - g_autoptr (GError) error = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); for (int i = 0; i < files_to_trash; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -96,31 +78,24 @@ test_delete_one_file (void) g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); g_assert_false (g_file_query_exists (file, NULL)); - g_assert_true (g_file_delete (first_dir, NULL, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -129,40 +104,36 @@ test_delete_more_files_func (gint files_to_delete) g_autoptr (GFile) root = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; + + create_multiple_files ("trash_or_delete", files_to_delete); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < files_to_delete; i++) { - g_autofree gchar *file_name = NULL; - g_autoptr (GError) error = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (file)); } - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); for (int i = 0; i < files_to_delete; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -176,22 +147,27 @@ test_trash_one_empty_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; + create_one_empty_directory ("trash_or_delete"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - files = g_list_prepend (files, g_object_ref (first_dir)); + file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); + g_assert_true (file != NULL); - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + files = g_list_prepend (files, g_object_ref (file)); - g_assert_false (g_file_query_exists (first_dir, NULL)); + nautilus_file_operations_trash_or_delete_sync (files); + + g_assert_false (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -201,35 +177,37 @@ test_trash_more_empty_directories_func (gint directories_to_trash) g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; + + create_multiple_directories ("trash_or_delete", directories_to_trash); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < directories_to_trash; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); for (int i = 0; i < directories_to_trash; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -243,22 +221,26 @@ test_delete_one_empty_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; + create_one_empty_directory ("trash_or_delete"); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); + file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); + g_assert_true (file != NULL); - files = g_list_prepend (files, g_object_ref (first_dir)); + files = g_list_prepend (files, g_object_ref (file)); - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); - g_assert_false (g_file_query_exists (first_dir, NULL)); + g_assert_false (g_file_query_exists (file, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -268,35 +250,38 @@ test_delete_more_empty_directories_func (gint directories_to_delete) g_autoptr (GFile) file = NULL; g_autoptr (GFile) dir = NULL; g_autolist (GFile) files = NULL; + + create_multiple_directories ("trash_or_delete", directories_to_delete); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < directories_to_delete; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); files = g_list_prepend (files, g_object_ref (file)); } - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); + for (int i = 0; i < directories_to_delete; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (root, file_name); + g_free (file_name); g_assert_true (file != NULL); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -305,72 +290,37 @@ test_delete_more_empty_directories (void) test_delete_more_empty_directories_func (100); } +/* The hierarchy looks like this: + * /tmp/first_dir/first_dir_child + * We're trashing first_dir. + */ static void -test_trash_one_full_directory (void) +test_trash_full_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (first_dir)); - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); g_assert_false (g_file_query_exists (first_dir, NULL)); g_assert_false (g_file_query_exists (file, NULL)); -} - -/* The hierarchy looks like this: - * /tmp/first_dir/first_dir_child - * We're trashing first_dir. - */ -static void -test_trash_first_hierarchy (void) -{ - g_autoptr (GFile) root = NULL; - g_autoptr (GFile) first_dir = NULL; - g_autoptr (GFile) file = NULL; - g_autolist (GFile) files = NULL; - - root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); - files = g_list_prepend (files, g_object_ref (first_dir)); - g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - - file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); - g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); - - g_assert_false (g_file_query_exists (file, NULL)); - g_assert_false (g_file_query_exists (first_dir, NULL)); + empty_directory_by_prefix (root, "trash_or_delete"); } /* The hierarchy looks like this: @@ -379,31 +329,28 @@ test_trash_first_hierarchy (void) * We're trashing first_dir. */ static void -test_trash_second_hierarchy (void) +test_trash_first_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; + + create_first_hierarchy ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_second_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_false (g_file_query_exists (file, NULL)); @@ -412,6 +359,8 @@ test_trash_second_hierarchy (void) g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } /* We're creating 50 directories each containing one file @@ -424,111 +373,75 @@ test_trash_third_hierarchy (void) g_autoptr (GFile) directory = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - + + create_multiple_full_directories ("trash_or_delete", 50); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 50; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_directory_%i", i); directory = g_file_get_child (root, file_name); - g_file_make_directory (directory, NULL, NULL); + g_free (file_name); files = g_list_prepend (files, g_object_ref (directory)); - - file_name = g_strdup_printf ("trash_or_delete_file_%i", i); - file = g_file_get_child (directory, file_name); - g_file_make_directory (file, NULL, NULL); } - trash_or_delete_internal_sync (files, - NULL, - TRUE, - NULL, - NULL); + nautilus_file_operations_trash_or_delete_sync (files); for (int i = 0; i < 50; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_directory_%i", i); directory = g_file_get_child (root, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (directory, NULL)); file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (directory, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } +/* The hierarchy looks like this: + * /tmp/first_dir/first_dir_child + * We're deleting first_dir. + */ static void -test_delete_one_full_directory (void) +test_delete_full_directory (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - GFileOutputStream *out = NULL; - g_autoptr (GError) error = NULL; + + create_one_file ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_true (file != NULL); - out = g_file_create (file, G_FILE_CREATE_NONE, NULL, &error); - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) - { - g_object_unref (out); - } files = g_list_prepend (files, g_object_ref (first_dir)); - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); g_assert_false (g_file_query_exists (first_dir, NULL)); g_assert_false (g_file_query_exists (file, NULL)); -} -/* The hierarchy looks like this: - * /tmp/first_dir/first_dir_child - * We're deleting first_dir. - */ -static void -test_delete_first_hierarchy (void) -{ - g_autoptr (GFile) root = NULL; - g_autoptr (GFile) first_dir = NULL; - g_autoptr (GFile) file = NULL; - g_autolist (GFile) files = NULL; - - root = g_file_new_for_path (g_get_tmp_dir ()); - first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); - files = g_list_prepend (files, g_object_ref (first_dir)); - g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); - - file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); - g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); - - g_assert_false (g_file_query_exists (file, NULL)); - - g_assert_false (g_file_query_exists (first_dir, NULL)); + empty_directory_by_prefix (root, "trash_or_delete"); } /* The hierarchy looks like this: @@ -537,31 +450,28 @@ test_delete_first_hierarchy (void) * We're deleting first_dir. */ static void -test_delete_second_hierarchy (void) +test_delete_first_hierarchy (void) { g_autoptr (GFile) root = NULL; g_autoptr (GFile) first_dir = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; + + create_first_hierarchy ("trash_or_delete"); root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + first_dir = g_file_get_child (root, "trash_or_delete_first_dir"); files = g_list_prepend (files, g_object_ref (first_dir)); g_assert_true (first_dir != NULL); - g_file_make_directory (first_dir, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_first_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); file = g_file_get_child (first_dir, "trash_or_delete_second_child"); g_assert_true (file != NULL); - g_file_make_directory (file, NULL, NULL); - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); file = g_file_get_child (first_dir, "trash_or_delete_first_dir_child"); g_assert_false (g_file_query_exists (file, NULL)); @@ -570,6 +480,8 @@ test_delete_second_hierarchy (void) g_assert_false (g_file_query_exists (file, NULL)); g_assert_false (g_file_query_exists (first_dir, NULL)); + + empty_directory_by_prefix (root, "trash_or_delete"); } /* We're creating 50 directories each containing one file @@ -582,43 +494,42 @@ test_delete_third_hierarchy (void) g_autoptr (GFile) directory = NULL; g_autoptr (GFile) file = NULL; g_autolist (GFile) files = NULL; - + + create_multiple_full_directories ("trash_or_delete", 50); + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); for (int i = 0; i < 50; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_directory_%i", i); directory = g_file_get_child (root, file_name); - g_file_make_directory (directory, NULL, NULL); + g_free (file_name); files = g_list_prepend (files, g_object_ref (directory)); - - file_name = g_strdup_printf ("trash_or_delete_file_%i", i); - file = g_file_get_child (directory, file_name); - g_file_make_directory (file, NULL, NULL); } - trash_or_delete_internal_sync (files, - NULL, - FALSE, - NULL, - NULL); + nautilus_file_operations_delete_sync (files); for (int i = 0; i < 50; i++) { - g_autofree gchar *file_name = NULL; + gchar *file_name; file_name = g_strdup_printf ("trash_or_delete_directory_%i", i); directory = g_file_get_child (root, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (directory, NULL)); file_name = g_strdup_printf ("trash_or_delete_file_%i", i); file = g_file_get_child (directory, file_name); + g_free (file_name); g_assert_false (g_file_query_exists (file, NULL)); } + + empty_directory_by_prefix (root, "trash_or_delete"); } static void @@ -641,19 +552,15 @@ setup_test_suite (void) g_test_add_func ("/test-delete-more-directories/1.0", test_delete_more_empty_directories); g_test_add_func ("/test-trash-one-full-directory/1.0", - test_trash_one_full_directory); + test_trash_full_directory); g_test_add_func ("/test-trash-one-full-directory/1.1", test_trash_first_hierarchy); - g_test_add_func ("/test-trash-one-full-directory/1.2", - test_trash_second_hierarchy); - g_test_add_func ("/test-trash-more-full-directories/1.6", + g_test_add_func ("/test-trash-more-full-directories/1.2", test_trash_third_hierarchy); g_test_add_func ("/test-delete-one-full-directory/1.0", - test_delete_one_full_directory); + test_delete_full_directory); g_test_add_func ("/test-delete-one-full-directory/1.1", test_delete_first_hierarchy); - g_test_add_func ("/test-delete-one-full-directory/1.2", - test_delete_second_hierarchy); g_test_add_func ("/test-delete-more-full-directories/1.6", test_delete_third_hierarchy); diff --git a/test/automated/displayless/test-nautilus-search-engine-model.c b/test/automated/displayless/test-nautilus-search-engine-model.c new file mode 100644 index 000000000..05086f8b7 --- /dev/null +++ b/test/automated/displayless/test-nautilus-search-engine-model.c @@ -0,0 +1,72 @@ +#include "test-utilities.h" + +static void +hits_added_cb (NautilusSearchEngine *engine, + GSList *hits) +{ + g_print ("Hits added for search engine model!\n"); + for (gint hit_number = 0; hits != NULL; hits = hits->next, hit_number++) + { + g_print ("Hit %i: %s\n", hit_number, nautilus_search_hit_get_uri (hits->data)); + } +} + +static void +finished_cb (NautilusSearchEngine *engine, + NautilusSearchProviderStatus status, + gpointer user_data) +{ + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine)); + + g_print ("\nNautilus search engine model finished!\n"); + + delete_search_file_hierarchy ("model"); + + g_main_loop_quit (user_data); +} + +int +main (int argc, + char *argv[]) +{ + g_autoptr (GMainLoop) loop = NULL; + NautilusSearchEngine *engine; + NautilusSearchEngineModel *model; + g_autoptr (NautilusDirectory) directory = NULL; + g_autoptr (NautilusQuery) query = NULL; + g_autoptr (GFile) location = NULL; + + loop = g_main_loop_new (NULL, FALSE); + + nautilus_ensure_extension_points (); + /* Needed for nautilus-query.c. + * FIXME: tests are not installed, so the system does not + * have the gschema. Installed tests is a long term GNOME goal. + */ + nautilus_global_preferences_init (); + + engine = nautilus_search_engine_new (); + g_signal_connect (engine, "hits-added", + G_CALLBACK (hits_added_cb), NULL); + g_signal_connect (engine, "finished", + G_CALLBACK (finished_cb), loop); + + query = nautilus_query_new (); + nautilus_query_set_text (query, "engine_model"); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine), query); + + location = g_file_new_for_path (g_get_tmp_dir ()); + directory = nautilus_directory_get (location); + model = nautilus_search_engine_get_model_provider (engine); + nautilus_search_engine_model_set_model (model, directory); + + nautilus_query_set_location (query, location); + + create_search_file_hierarchy ("model"); + + nautilus_search_engine_start_by_target (NAUTILUS_SEARCH_PROVIDER (engine), + NAUTILUS_SEARCH_ENGINE_MODEL_ENGINE); + + g_main_loop_run (loop); + return 0; +} diff --git a/test/automated/displayless/test-nautilus-search-engine-simple.c b/test/automated/displayless/test-nautilus-search-engine-simple.c new file mode 100644 index 000000000..82eb865b3 --- /dev/null +++ b/test/automated/displayless/test-nautilus-search-engine-simple.c @@ -0,0 +1,68 @@ +#include "test-utilities.h" + +static void +hits_added_cb (NautilusSearchEngine *engine, + GSList *hits) +{ + g_print ("Hits added for search engine simple!\n"); + for (gint hit_number = 0; hits != NULL; hits = hits->next, hit_number++) + { + g_print ("Hit %i: %s\n", hit_number, nautilus_search_hit_get_uri (hits->data)); + } +} + +static void +finished_cb (NautilusSearchEngine *engine, + NautilusSearchProviderStatus status, + gpointer user_data) +{ + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine)); + + g_print ("\nNautilus search engine simple finished!\n"); + + delete_search_file_hierarchy ("simple"); + + g_main_loop_quit (user_data); +} + +int +main (int argc, + char *argv[]) +{ + g_autoptr (GMainLoop) loop = NULL; + NautilusSearchEngine *engine; + g_autoptr (NautilusDirectory) directory = NULL; + g_autoptr (NautilusQuery) query = NULL; + g_autoptr (GFile) location = NULL; + + loop = g_main_loop_new (NULL, FALSE); + + nautilus_ensure_extension_points (); + /* Needed for nautilus-query.c. + * FIXME: tests are not installed, so the system does not + * have the gschema. Installed tests is a long term GNOME goal. + */ + nautilus_global_preferences_init (); + + engine = nautilus_search_engine_new (); + g_signal_connect (engine, "hits-added", + G_CALLBACK (hits_added_cb), NULL); + g_signal_connect (engine, "finished", + G_CALLBACK (finished_cb), loop); + + query = nautilus_query_new (); + nautilus_query_set_text (query, "engine_simple"); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine), query); + + location = g_file_new_for_path (g_get_tmp_dir ()); + directory = nautilus_directory_get (location); + nautilus_query_set_location (query, location); + + create_search_file_hierarchy ("simple"); + + nautilus_search_engine_start_by_target (NAUTILUS_SEARCH_PROVIDER (engine), + NAUTILUS_SEARCH_ENGINE_SIMPLE_ENGINE); + + g_main_loop_run (loop); + return 0; +} diff --git a/test/automated/displayless/test-nautilus-search-engine-tracker.c b/test/automated/displayless/test-nautilus-search-engine-tracker.c new file mode 100644 index 000000000..13caafaba --- /dev/null +++ b/test/automated/displayless/test-nautilus-search-engine-tracker.c @@ -0,0 +1,106 @@ +#include "test-utilities.h" + +static void +hits_added_cb (NautilusSearchEngine *engine, + GSList *hits) +{ + g_print ("Hits added for search engine tracker!\n"); + for (gint hit_number = 0; hits != NULL; hits = hits->next, hit_number++) + { + g_print ("Hit %i: %s\n", hit_number, nautilus_search_hit_get_uri (hits->data)); + } +} + +static void +finished_cb (NautilusSearchEngine *engine, + NautilusSearchProviderStatus status, + gpointer user_data) +{ + TrackerSparqlConnection *connection; + g_autofree gchar *sparql_query; + + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine)); + + g_print ("\nNautilus search engine tracker finished!\n"); + + connection = tracker_sparql_connection_get (NULL, NULL); + sparql_query = g_strdup_printf ("DELETE WHERE { <nautilus-test-tracker> ?p ?o }"); + tracker_sparql_connection_update (connection, + sparql_query, + 0, + NULL, + NULL); + + g_main_loop_quit (user_data); +} + +int +main (int argc, + char *argv[]) +{ + g_autoptr (GMainLoop) loop = NULL; + NautilusSearchEngine *engine; + g_autoptr (NautilusDirectory) directory = NULL; + g_autoptr (NautilusQuery) query = NULL; + g_autoptr (GFile) location = NULL; + TrackerSparqlConnection *connection; + g_autofree gchar *sparql_query; + + connection = tracker_sparql_connection_get (NULL, NULL); + + loop = g_main_loop_new (NULL, FALSE); + + nautilus_ensure_extension_points (); + /* Needed for nautilus-query.c. + * FIXME: tests are not installed, so the system does not + * have the gschema. Installed tests is a long term GNOME goal. + */ + nautilus_global_preferences_init (); + + engine = nautilus_search_engine_new (); + g_signal_connect (engine, "hits-added", + G_CALLBACK (hits_added_cb), NULL); + g_signal_connect (engine, "finished", + G_CALLBACK (finished_cb), loop); + + query = nautilus_query_new (); + nautilus_query_set_text (query, "target"); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine), query); + + location = g_file_new_for_path (g_get_tmp_dir ()); + directory = nautilus_directory_get (location); + nautilus_query_set_location (query, location); + + /* This sparql query with the update call create a virtual file + * in tracker, so it sees a file named "target_file" in /tmp. + * The file's MIME type is text/plain and the name tracker is + * using for search is "target". For the engine tracker to hit, + * we also need to set the last time the file was accessed and modified, + * which we set to 2001-01-01, at 00:00:01 (the date needs to be a full + * ISO 8601 date string) and tracker:available be set to true (in order + * for the file to be accessible). + */ + + sparql_query = g_strdup_printf ("INSERT DATA {\n<nautilus-test-tracker> "); + sparql_query = g_strconcat (sparql_query, "a nfo:FileDataObject ;", NULL); + sparql_query = g_strconcat (sparql_query, "\na nie:InformationElement ;", NULL); + sparql_query = g_strconcat (sparql_query, "\nnie:url 'file:///tmp/target_file';", NULL); + sparql_query = g_strconcat (sparql_query, "\nnie:mimeType 'text/plain';", NULL); + sparql_query = g_strconcat (sparql_query, "\nnfo:fileName 'target';", NULL); + sparql_query = g_strconcat (sparql_query, "\nnfo:fileLastModified '2001-01-01T00:00:01Z';", NULL); + sparql_query = g_strconcat (sparql_query, "\nnfo:fileLastAccessed '2001-01-01T00:00:01Z';", NULL); + sparql_query = g_strconcat (sparql_query, "\ntracker:available true", NULL); + sparql_query = g_strconcat (sparql_query, ".\n}\n", NULL); + + tracker_sparql_connection_update (connection, + sparql_query, + 0, + NULL, + NULL); + + nautilus_search_engine_start_by_target (NAUTILUS_SEARCH_PROVIDER (engine), + NAUTILUS_SEARCH_ENGINE_TRACKER_ENGINE); + + g_main_loop_run (loop); + return 0; +} diff --git a/test/automated/displayless/test-nautilus-search-engine.c b/test/automated/displayless/test-nautilus-search-engine.c index 8fb66aad4..d80f1fa20 100644 --- a/test/automated/displayless/test-nautilus-search-engine.c +++ b/test/automated/displayless/test-nautilus-search-engine.c @@ -1,18 +1,13 @@ -#include <src/nautilus-file-utilities.h> -#include <src/nautilus-global-preferences.h> -#include <src/nautilus-search-provider.h> -#include <src/nautilus-search-engine.h> -#include <gtk/gtk.h> +#include "test-utilities.h" static void hits_added_cb (NautilusSearchEngine *engine, GSList *hits) { - g_print ("hits added\n"); - while (hits) + g_print ("Hits added for search engine!\n"); + for (gint hit_number = 0; hits != NULL; hits = hits->next, hit_number++) { - g_print (" - %s\n", (char *) hits->data); - hits = hits->next; + g_print ("Hit %i: %s\n", hit_number, nautilus_search_hit_get_uri (hits->data)); } } @@ -21,7 +16,12 @@ finished_cb (NautilusSearchEngine *engine, NautilusSearchProviderStatus status, gpointer user_data) { - g_print ("finished!\n"); + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine)); + + g_print ("\nNautilus search engine finished!\n"); + + delete_search_file_hierarchy ("all_engines"); + g_main_loop_quit (user_data); } @@ -29,17 +29,20 @@ int main (int argc, char *argv[]) { - GMainLoop *loop; + g_autoptr (GMainLoop) loop = NULL; NautilusSearchEngine *engine; - NautilusSearchEngineModel *model; - NautilusDirectory *directory; - NautilusQuery *query; - GFile *location; + g_autoptr (NautilusDirectory) directory = NULL; + g_autoptr (NautilusQuery) query = NULL; + g_autoptr (GFile) location = NULL; + g_autoptr (GFile) file = NULL; - loop = g_main_loop_new (NULL, TRUE); + loop = g_main_loop_new (NULL, FALSE); nautilus_ensure_extension_points (); - /* Needed for nautilus-query.c. */ + /* Needed for nautilus-query.c. + * FIXME: tests are not installed, so the system does not + * have the gschema. Installed tests is a long term GNOME goal. + */ nautilus_global_preferences_init (); engine = nautilus_search_engine_new (); @@ -49,21 +52,16 @@ main (int argc, G_CALLBACK (finished_cb), loop); query = nautilus_query_new (); - nautilus_query_set_text (query, "richard hult"); + nautilus_query_set_text (query, "engine_all_engines"); nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine), query); - g_object_unref (query); - location = g_file_new_for_path (g_get_home_dir ()); + location = g_file_new_for_path (g_get_tmp_dir ()); directory = nautilus_directory_get (location); - g_object_unref (location); + nautilus_query_set_location (query, location); - model = nautilus_search_engine_get_model_provider (engine); - nautilus_search_engine_model_set_model (model, directory); - g_object_unref (directory); + create_search_file_hierarchy ("all_engines"); nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine)); - nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine)); - g_object_unref (engine); g_main_loop_run (loop); return 0; diff --git a/test/automated/displayless/test-utilities.c b/test/automated/displayless/test-utilities.c new file mode 100644 index 000000000..7b38c6849 --- /dev/null +++ b/test/automated/displayless/test-utilities.c @@ -0,0 +1,555 @@ +#include "test-utilities.h" + +void +empty_directory_by_prefix (GFile *parent, + gchar *prefix) +{ + g_autoptr (GFileEnumerator) enumerator = NULL; + g_autoptr (GFile) child = NULL; + + enumerator = g_file_enumerate_children (parent, + G_FILE_ATTRIBUTE_STANDARD_NAME, + G_FILE_QUERY_INFO_NONE, + NULL, + NULL); + + g_file_enumerator_iterate (enumerator, NULL, &child, NULL, NULL); + while (child != NULL) + { + gboolean res; + + if (g_str_has_prefix (g_file_get_basename (child), prefix)) + { + res = g_file_delete (child, NULL, NULL); + /* The directory is not empty */ + if (!res) + { + empty_directory_by_prefix (child, prefix); + g_file_delete (child, NULL, NULL); + } + } + + g_file_enumerator_iterate (enumerator, NULL, &child, NULL, NULL); + } +} + +void +create_search_file_hierarchy (gchar *search_engine) +{ + g_autoptr (GFile) location = NULL; + g_autoptr (GFile) file = NULL; + GFileOutputStream *out; + gchar *file_name; + + location = g_file_new_for_path (g_get_tmp_dir ()); + + file_name = g_strdup_printf ("engine_%s", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); + + file_name = g_strdup_printf ("engine_%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); + + file_name = g_strdup_printf ("engine_%s_second_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("engine_%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); + + file_name = g_strdup_printf ("%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("engine_%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); +} + +void +delete_search_file_hierarchy (gchar *search_engine) +{ + g_autoptr (GFile) location = NULL; + g_autoptr (GFile) file = NULL; + gchar *file_name; + + location = g_file_new_for_path (g_get_tmp_dir ()); + + file_name = g_strdup_printf ("engine_%s", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + + file_name = g_strdup_printf ("engine_%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + file_name = g_strdup_printf ("%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + file_name = g_strdup_printf ("engine_%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + + file_name = g_strdup_printf ("engine_%s_second_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + file_name = g_strdup_printf ("engine_%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + file_name = g_strdup_printf ("engine_%s_second_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + file_name = g_strdup_printf ("engine_%s_child", search_engine); + file = g_file_get_child (file, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); + file_name = g_strdup_printf ("%s_directory", search_engine); + file = g_file_get_child (location, file_name); + g_free (file_name); + g_file_delete (file, NULL, NULL); +} + +/* This callback function quits the mainloop inside which the + * asynchronous undo/redo operation happens. + */ + +void +quit_loop_callback (NautilusFileUndoManager *undo_manager, + GMainLoop *loop) +{ + g_main_loop_quit (loop); +} + +/* This undoes the last operation blocking the current main thread. */ +void +test_operation_undo (void) +{ + g_autoptr (GMainLoop) loop = NULL; + g_autoptr (GMainContext) context = NULL; + gulong handler_id; + + context = g_main_context_new (); + g_main_context_push_thread_default (context); + loop = g_main_loop_new (context, FALSE); + + handler_id = g_signal_connect (nautilus_file_undo_manager_get (), + "undo-changed", + G_CALLBACK (quit_loop_callback), + loop); + + nautilus_file_undo_manager_undo (NULL); + + g_main_loop_run (loop); + + g_main_context_pop_thread_default (context); + + g_signal_handler_disconnect (nautilus_file_undo_manager_get (), + handler_id); +} + +/* This undoes and redoes the last move operation blocking the current main thread. */ +void +test_operation_undo_redo (void) +{ + g_autoptr (GMainLoop) loop = NULL; + g_autoptr (GMainContext) context = NULL; + gulong handler_id; + + test_operation_undo (); + + context = g_main_context_new (); + g_main_context_push_thread_default (context); + loop = g_main_loop_new (context, FALSE); + + handler_id = g_signal_connect (nautilus_file_undo_manager_get (), + "undo-changed", + G_CALLBACK (quit_loop_callback), + loop); + + nautilus_file_undo_manager_redo (NULL); + + g_main_loop_run (loop); + + g_main_context_pop_thread_default (context); + + g_signal_handler_disconnect (nautilus_file_undo_manager_get (), + handler_id); +} + +/* Creates the following hierarchy: + * /tmp/`prefix`_first_dir/`prefix`_first_dir_child + * /tmp/`prefix`_second_dir/ + */ +void +create_one_file (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + GFileOutputStream *out; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_dir_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); +} + +/* Creates the same hierarchy as above, but all files being directories. */ +void +create_one_empty_directory (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_dir_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); +} + +void +create_multiple_files (gchar *prefix, gint number_of_files) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < number_of_files; i++) + { + GFileOutputStream *out; + + file_name = g_strdup_printf ("%s_file_%i", prefix, i); + file = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + out = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + g_object_unref (out); + } + + file_name = g_strdup_printf ("%s_dir", prefix); + dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (dir != NULL); + g_file_make_directory (dir, NULL, NULL); +} + +void +create_multiple_directories (gchar *prefix, gint number_of_directories) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) dir = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < number_of_directories; i++) + { + file_name = g_strdup_printf ("%s_file_%i", prefix, i); + file = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + } + + file_name = g_strdup_printf ("%s_dir", prefix); + dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (dir != NULL); + g_file_make_directory (dir, NULL, NULL); +} + +void +create_first_hierarchy (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + file_name = g_strdup_printf ("%s_second_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); +} + +void +create_second_hierarchy (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + file_name = g_strdup_printf ("%s_second_child", prefix); + file = g_file_get_child (file, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); +} + +void +create_third_hierarchy (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_dir_dir1", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_dir1_child", prefix); + file = g_file_get_child (file, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_dir_dir2", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_dir2_child", prefix); + file = g_file_get_child (file, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); +} + +void +create_fourth_hierarchy (gchar *prefix) +{ + g_autoptr (GFile) root = NULL; + g_autoptr (GFile) first_dir = NULL; + g_autoptr (GFile) second_dir = NULL; + g_autoptr (GFile) third_dir = NULL; + g_autoptr (GFile) file = NULL; + g_autoptr (GFile) result_file = NULL; + gchar *file_name; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + file_name = g_strdup_printf ("%s_first_dir", prefix); + first_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (first_dir != NULL); + g_file_make_directory (first_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_first_dir_child", prefix); + file = g_file_get_child (first_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir", prefix); + second_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (second_dir != NULL); + g_file_make_directory (second_dir, NULL, NULL); + + file_name = g_strdup_printf ("%s_second_dir_child", prefix); + file = g_file_get_child (second_dir, file_name); + g_free (file_name); + + g_assert_true (file != NULL); + g_file_make_directory (file, NULL, NULL); + + file_name = g_strdup_printf ("%s_third_dir", prefix); + third_dir = g_file_get_child (root, file_name); + g_free (file_name); + + g_assert_true (third_dir != NULL); + g_file_make_directory (third_dir, NULL, NULL); +} + +void +create_multiple_full_directories (gchar *prefix, gint number_of_directories) +{ + g_autoptr (GFile) root = NULL; + + root = g_file_new_for_path (g_get_tmp_dir ()); + g_assert_true (root != NULL); + + for (int i = 0; i < number_of_directories; i++) + { + g_autoptr (GFile) directory = NULL; + g_autoptr (GFile) file = NULL; + gchar *file_name; + + file_name = g_strdup_printf ("%s_directory_%i", prefix, i); + + directory = g_file_get_child (root, file_name); + g_free (file_name); + + g_file_make_directory (directory, NULL, NULL); + + file_name = g_strdup_printf ("%s_file_%i", prefix, i); + file = g_file_get_child (directory, file_name); + g_free (file_name); + + g_file_make_directory (file, NULL, NULL); + } +}
\ No newline at end of file diff --git a/test/automated/displayless/test-utilities.h b/test/automated/displayless/test-utilities.h new file mode 100644 index 000000000..878c87876 --- /dev/null +++ b/test/automated/displayless/test-utilities.h @@ -0,0 +1,34 @@ +#include <gio/gio.h> +#include <src/nautilus-file-utilities.h> +#include <src/nautilus-global-preferences.h> +#include <src/nautilus-search-engine.h> +#include <tracker-sparql.h> +#include <locale.h> +#include <src/nautilus-file-undo-manager.h> +#include <src/nautilus-file-operations.h> +#include <gio/gio.h> + +#pragma once + +void empty_directory_by_prefix (GFile *parent, + gchar *prefix); + +void create_search_file_hierarchy (gchar *search_engine); +void delete_search_file_hierarchy (gchar *search_engine); + +void quit_loop_callback (NautilusFileUndoManager *undo_manager, + GMainLoop *loop); +void test_operation_undo_redo (void); +void test_operation_undo (void); + +void create_one_file (gchar *prefix); +void create_one_empty_directory (gchar *prefix); + +void create_multiple_files (gchar *prefix, gint number_of_files); +void create_multiple_directories (gchar *prefix, gint number_of_directories); +void create_multiple_full_directories (gchar *prefix, gint number_of_directories); + +void create_first_hierarchy (gchar *prefix); +void create_second_hierarchy (gchar *prefix); +void create_third_hierarchy (gchar *prefix); +void create_fourth_hierarchy (gchar *prefix);
\ No newline at end of file |