1 #include "filesystem_test.h"
6 #include <glibmm/miscutils.h>
7 #include <glibmm/fileutils.h>
9 #include "pbd/file_utils.h"
11 #include "test_common.h"
16 CPPUNIT_TEST_SUITE_REGISTRATION (FilesystemTest);
19 FilesystemTest::testPathIsWithin ()
21 #ifndef PLATFORM_WINDOWS
23 CPPUNIT_ASSERT (g_mkdir_with_parents ("foo/bar/baz", 0755) == 0);
25 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar/baz", "foo/bar/baz"));
26 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar/baz"));
27 CPPUNIT_ASSERT (PBD::path_is_within ("foo", "foo/bar/baz"));
28 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar/baz"));
29 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar"));
31 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar/baz", "frobozz") == false);
33 int const r = symlink ("bar", "foo/jim");
34 CPPUNIT_ASSERT (r == 0);
36 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar/baz", "foo/bar/baz"));
37 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar/baz"));
38 CPPUNIT_ASSERT (PBD::path_is_within ("foo", "foo/bar/baz"));
39 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar/baz"));
40 CPPUNIT_ASSERT (PBD::path_is_within ("foo/bar", "foo/bar"));
42 CPPUNIT_ASSERT (PBD::path_is_within ("foo/jim/baz", "frobozz") == false);
47 FilesystemTest::testCopyFileASCIIFilename ()
50 CPPUNIT_ASSERT (find_file (test_search_path (), "RosegardenPatchFile.xml", testdata_path));
52 string output_path = test_output_directory ("CopyFile");
54 output_path = Glib::build_filename (output_path, "RosegardenPatchFile.xml");
57 cerr << "CopyFile test output path: " << output_path << endl;
59 CPPUNIT_ASSERT (PBD::copy_file (testdata_path, output_path));
63 FilesystemTest::testCopyFileUTF8Filename ()
65 vector<string> i18n_files;
67 Searchpath i18n_path(test_search_path());
68 i18n_path.add_subdirectory_to_paths("i18n_test");
70 PBD::find_files_matching_pattern (i18n_files, i18n_path, "*.tst");
73 cerr << "Copying " << i18n_files.size() << " test files from: "
74 << i18n_path.to_string () << endl;
76 for (vector<string>::iterator i = i18n_files.begin(); i != i18n_files.end(); ++i) {
77 string input_path = *i;
78 string output_file = Glib::path_get_basename(*i);
79 string output_path = test_output_directory ("CopyFile");
80 output_path = Glib::build_filename (output_path, output_file);
82 cerr << "Copying test file: " << input_path
83 << " To " << output_path << endl;
85 CPPUNIT_ASSERT (PBD::copy_file (input_path, output_path));
90 FilesystemTest::testFindFilesMatchingPattern ()
92 vector<string> patch_files;
94 PBD::find_files_matching_pattern (patch_files, test_search_path (), "*PatchFile*");
96 CPPUNIT_ASSERT(test_search_path ().size() == 1);
98 CPPUNIT_ASSERT(patch_files.size() == 2);
102 create_test_directory (std::string test_dir)
104 vector<string> test_files;
105 vector<string> i18n_files;
107 Searchpath spath(test_search_path());
108 PBD::get_files (test_files, spath);
110 spath.add_subdirectory_to_paths("i18n_test");
112 PBD::get_files (i18n_files, spath);
114 string output_dir = test_output_directory (test_dir);
116 CPPUNIT_ASSERT (test_search_path().size () != 0);
118 string test_dir_path = test_search_path()[0];
121 cerr << "Copying " << test_files.size() << " test files from: "
122 << test_dir_path << " to " << output_dir << endl;
124 PBD::copy_files (test_dir_path, output_dir);
126 vector<string> copied_files;
128 PBD::get_files (copied_files, output_dir);
130 CPPUNIT_ASSERT (copied_files.size() == test_files.size());
132 string subdir_path = Glib::build_filename (output_dir, "subdir");
134 CPPUNIT_ASSERT (g_mkdir_with_parents (subdir_path.c_str(), 0755) == 0);
137 cerr << "Copying " << i18n_files.size() << " i18n test files to: "
138 << subdir_path << endl;
140 for (vector<string>::iterator i = i18n_files.begin(); i != i18n_files.end(); ++i) {
141 string input_filepath = *i;
142 string output_filename = Glib::path_get_basename(*i);
143 string output_filepath = Glib::build_filename (subdir_path, output_filename);
145 CPPUNIT_ASSERT (PBD::copy_file (input_filepath, output_filepath));
148 copied_files.clear();
149 PBD::get_files (copied_files, subdir_path);
151 CPPUNIT_ASSERT (copied_files.size() == i18n_files.size());
157 FilesystemTest::testClearDirectory ()
159 string output_dir_path = create_test_directory ("ClearDirectory");
161 vector<string> files_in_output_dir;
163 PBD::get_paths (files_in_output_dir, output_dir_path, true, true);
165 size_t removed_file_size = 0;
166 vector<string> removed_files;
168 CPPUNIT_ASSERT (PBD::clear_directory (output_dir_path, &removed_file_size, &removed_files) ==0);
170 cerr << "Removed " << removed_files.size() << " files of total size: "
171 << removed_file_size << endl;
173 CPPUNIT_ASSERT (removed_files.size () == files_in_output_dir.size ());
175 string subdir_path = Glib::build_filename (output_dir_path, "subdir");
177 // make sure the directory structure is still there
178 CPPUNIT_ASSERT (Glib::file_test (subdir_path, Glib::FILE_TEST_IS_DIR));
182 FilesystemTest::testRemoveDirectory ()
184 string output_dir_path = create_test_directory ("RemoveDirectory");
186 vector<string> files_in_output_dir;
188 PBD::get_paths (files_in_output_dir, output_dir_path, false, true);
190 CPPUNIT_ASSERT (files_in_output_dir.size () != 0);
192 PBD::remove_directory (output_dir_path);
194 // doesn't actually remove directory though...just contents
195 CPPUNIT_ASSERT (Glib::file_test (output_dir_path, Glib::FILE_TEST_IS_DIR));
197 files_in_output_dir.clear ();
199 PBD::get_paths (files_in_output_dir, output_dir_path, false, true);
201 CPPUNIT_ASSERT (files_in_output_dir.size () == 0);