44 const std::string maincfg =
"_main.cfg";
46 std::string gamedata_rev = get_wml_location(
"_main.cfg").value();
48 const std::size_t strip_len = (maincfg +
"/data/").length();
49 BOOST_REQUIRE(gamedata_rev.length() > strip_len);
50 gamedata_rev.resize(gamedata_rev.length() - strip_len);
52 BOOST_CHECK_EQUAL( gamedata_rev,
gamedata );
57 BOOST_CHECK( is_root(
"/") );
58 BOOST_CHECK( is_root(
"////") );
59 BOOST_CHECK( is_root(
"/../") );
60 BOOST_CHECK( is_root(
"/../.././") );
61 BOOST_CHECK( is_root(
"/.././../.") );
62 BOOST_CHECK( is_root(
"/.") );
64 BOOST_CHECK( is_relative(
".") );
65 BOOST_CHECK( is_relative(
"..") );
66 BOOST_CHECK( is_relative(
"../foo") );
67 BOOST_CHECK( is_relative(
"foo") );
68 BOOST_CHECK( !is_relative(
"/./../foo/..") );
69 BOOST_CHECK( !is_relative(
"/foo/..") );
70 BOOST_CHECK( !is_relative(
"/foo") );
71 BOOST_CHECK( !is_relative(
"///foo") );
73 BOOST_CHECK( is_directory(
"/") );
74 BOOST_CHECK( is_directory(
"/.") );
75 BOOST_CHECK( is_directory(
"/./././.") );
76 BOOST_CHECK( is_directory(
"/..") );
78 BOOST_CHECK( is_directory(
".") );
79 BOOST_CHECK( is_directory(
"..") );
80 BOOST_CHECK( is_directory(
"./././.") );
82 BOOST_CHECK( is_directory(
gamedata +
"/data/core/../../data/././../data/././core") );
84 BOOST_CHECK( file_exists(
"/") );
85 BOOST_CHECK( file_exists(
"/.") );
86 BOOST_CHECK( file_exists(
"/./././.") );
87 BOOST_CHECK( file_exists(
"/..") );
89 BOOST_CHECK_EQUAL( base_name(
"foo/bar/baz.cfg"),
"baz.cfg" );
92 BOOST_CHECK_EQUAL( base_name(
"foo/bar"),
"bar" );
93 BOOST_CHECK_EQUAL( base_name(
"/"),
"/" );
94 BOOST_CHECK_EQUAL( base_name(
""),
"" );
96 BOOST_CHECK_EQUAL( directory_name(
"foo/bar/baz.cfg"),
"foo/bar" );
97 BOOST_CHECK_EQUAL( directory_name(
"foo/bar/"),
"foo/bar" );
98 BOOST_CHECK_EQUAL( directory_name(
"foo/bar"),
"foo" );
99 BOOST_CHECK_EQUAL( directory_name(
"/"),
"" );
100 BOOST_CHECK_EQUAL( directory_name(
""),
"" );
110 const std::string path =
"data/test/test/filesystem/enum";
112 const std::vector<std::string> expected_filenames {
121 const std::vector<std::string> expected_dirnames {
126 std::vector<std::string> files, dirs;
127 std::vector<std::string> expected_filepaths, expected_dirpaths;
129 for(
const std::string&
n : expected_filenames) {
130 expected_filepaths.push_back(
gamedata +
"/" + path +
"/" +
n);
133 for(
const std::string&
n : expected_dirnames) {
134 expected_dirpaths.push_back(
gamedata +
"/" + path +
"/" +
n);
140 get_files_in_dir(path, &files, &dirs, name_mode::ENTIRE_FILE_PATH, filter_mode::NO_FILTER, reorder_mode::DO_REORDER);
142 BOOST_CHECK( files == expected_filepaths );
143 BOOST_CHECK( dirs == expected_dirpaths );
150 cache.clear_defines();
151 cache.add_define(
"EDITOR");
152 cache.add_define(
"MULTIPLAYER");
162 BOOST_CHECK_EQUAL( get_binary_dir_location(
"images",
".").
value(),
gamedata +
"/images/." );
164 BOOST_CHECK_EQUAL( get_binary_file_location(
"images",
"wesnoth-icon.png").
value(),
165 gamedata +
"/data/core/images/wesnoth-icon.png" );
167 BOOST_CHECK_EQUAL( get_binary_file_location(
"music",
"silence.ogg").
value(),
168 gamedata +
"/data/core/music/silence.ogg" );
170 BOOST_CHECK_EQUAL( get_binary_file_location(
"sounds",
"explosion.ogg").
value(),
171 gamedata +
"/data/core/sounds/explosion.ogg" );
173 BOOST_CHECK_EQUAL( get_independent_binary_file_path(
"images",
"wesnoth-icon.png").
value(),
174 "data/core/images/wesnoth-icon.png" );
177 BOOST_CHECK( !get_binary_dir_location(
"images",
"").has_value() );
178 BOOST_CHECK( !get_binary_dir_location(
"inexistent_resource_type",
"").has_value() );
179 BOOST_CHECK( !get_binary_file_location(
"image",
"wesnoth-icon.png").has_value() );
180 BOOST_CHECK( !get_binary_file_location(
"images",
"bunnies_and_ponies_and_rainbows_oh_em_gee.psd").has_value() );
181 BOOST_CHECK( !get_binary_file_location(
"music",
"this_track_does_not_exist.aiff").has_value() );
182 BOOST_CHECK( !get_binary_file_location(
"sounds",
"rude_noises.aiff").has_value() );
183 BOOST_CHECK( !get_independent_binary_file_path(
"images",
"dopefish.txt").has_value() );
186 std::string path =
gamedata +
"/data/core/images/wesnoth-icon.png";
187 utils::optional<std::string> outpath = to_asset_path(path,
"",
"images");
188 BOOST_CHECK( outpath.has_value() );
189 BOOST_CHECK_EQUAL( outpath.value(),
"wesnoth-icon.png" );
191 path =
gamedata +
"/images/icons/action/modern/language_25-active.png";
192 outpath = to_asset_path(path,
"",
"images");
193 BOOST_CHECK( outpath.has_value() );
194 BOOST_CHECK_EQUAL( outpath.value(),
"icons/action/modern/language_25-active.png" );
196 path =
gamedata +
"/data/core/sounds/ambient/campfire.ogg";
197 outpath = to_asset_path(path,
"",
"sounds");
198 BOOST_CHECK( outpath.has_value() );
199 BOOST_CHECK_EQUAL( outpath.value(),
"ambient/campfire.ogg" );
201 path =
gamedata +
"/images/this/path/doesn't/exist/campfire.ogg";
202 BOOST_CHECK( !to_asset_path(path,
"",
"images").has_value() );
207 const std::string& userdata = get_user_data_dir();
209 BOOST_CHECK_EQUAL( get_wml_location(
"").value_or(
""),
"" );
211 BOOST_CHECK_EQUAL( get_wml_location(
"_main.cfg").value_or(
""),
gamedata +
"/data/_main.cfg" );
212 BOOST_CHECK_EQUAL( get_wml_location(
"core/_main.cfg").value_or(
""),
gamedata +
"/data/core/_main.cfg" );
213 BOOST_CHECK_EQUAL( get_wml_location(
".", std::string(
"")).value_or(
""),
"." );
215 BOOST_CHECK_EQUAL( get_wml_location(
"~/").value_or(
""), userdata +
"/data/" );
218 BOOST_CHECK( !get_wml_location(
"why_would_anyone_ever_name_a_file_like_this").has_value() );
223 const std::string& userdata = get_user_data_dir();
225 BOOST_CHECK_EQUAL( nearest_extant_parent(userdata +
"/THIS_DOES_NOT_EXIST/foo/bar"), userdata );
227 BOOST_CHECK_EQUAL( nearest_extant_parent(
gamedata +
"/THIS_DOES_NOT_EXIST_EITHER/foo"),
gamedata );
228 BOOST_CHECK_EQUAL( nearest_extant_parent(
gamedata +
"/data/_main.cfg"),
gamedata +
"/data" );
229 BOOST_CHECK_EQUAL( nearest_extant_parent(
gamedata +
"/data/core/THIS_DOES_NOT_EXIST/test"),
gamedata +
"/data/core" );
231 BOOST_CHECK_EQUAL( nearest_extant_parent(
"/THIS_HOPEFULLY_DOES_NOT_EXIST"),
"/" );
232 BOOST_CHECK_EQUAL( nearest_extant_parent(
"/THIS_HOPEFULLY_DOES_NOT_EXIST/foo/bar"),
"/" );
233 BOOST_CHECK_EQUAL( nearest_extant_parent(
"/THIS_HOPEFULLY_DOES_NOT_EXIST/foo/bar/.."),
"/" );
238 BOOST_CHECK( looks_like_pbl(
"foo.pbl") );
239 BOOST_CHECK( looks_like_pbl(
"FOO.PBL") );
240 BOOST_CHECK( looks_like_pbl(
"Foo.Pbl") );
241 BOOST_CHECK( !looks_like_pbl(
"foo.pbl.cfg") );
243 BOOST_CHECK( is_gzip_file(
"foo.gz") );
244 BOOST_CHECK( !is_gzip_file(
"foo.gz.bz2") );
245 BOOST_CHECK( is_bzip2_file(
"foo.bz2") );
246 BOOST_CHECK( !is_bzip2_file(
"foo.bz2.gz") );
248 BOOST_CHECK( is_compressed_file(
"foo.gz") );
249 BOOST_CHECK( is_compressed_file(
"foo.bz2") );
250 BOOST_CHECK( !is_compressed_file(
"foo.txt") );
253 BOOST_CHECK( !is_gzip_file(
"foo.GZ") );
254 BOOST_CHECK( !is_bzip2_file(
"foo.BZ2") );
255 BOOST_CHECK( !is_compressed_file(
"foo.GZ") );
256 BOOST_CHECK( !is_compressed_file(
"foo.BZ2") );
262 blacklist_pattern_list blacklist({
"*.exe",
"potato*",
"rutabaga"}, {});
263 BOOST_CHECK(blacklist.match_file(
"program.exe"));
264 BOOST_CHECK(blacklist.match_file(
"rutabaga"));
265 BOOST_CHECK(blacklist.match_file(
"potatoes"));
266 BOOST_CHECK(!blacklist.match_file(
"notapotato"));
269 blacklist_pattern_list qmark({
"file?.txt"}, {});
270 BOOST_CHECK(qmark.match_file(
"file1.txt"));
271 BOOST_CHECK(qmark.match_file(
"fileA.txt"));
272 BOOST_CHECK(!qmark.match_file(
"file12.txt"));
275 blacklist_pattern_list leadtrail({
"*secret*"}, {});
276 BOOST_CHECK(leadtrail.match_file(
"my_secret_file"));
277 BOOST_CHECK(leadtrail.match_file(
"secret"));
278 BOOST_CHECK(!leadtrail.match_file(
"public"));
281 blacklist_pattern_list all({
"*"}, {});
282 BOOST_CHECK(all.match_file(
"anything"));
283 BOOST_CHECK(all.match_file(
""));
286 blacklist_pattern_list dirpat({}, {
"temp*",
"__MACOSX"});
287 BOOST_CHECK(dirpat.match_dir(
"temp"));
288 BOOST_CHECK(dirpat.match_dir(
"temp123"));
289 BOOST_CHECK(dirpat.match_dir(
"__MACOSX"));
290 BOOST_CHECK(dirpat.match_dir(
"templates"));
293 blacklist_pattern_list cs({
"Readme.TXT"}, {});
294 BOOST_CHECK(cs.match_file(
"Readme.TXT"));
295 BOOST_CHECK(!cs.match_file(
"readme.txt"));
298 blacklist_pattern_list specials({
"*.tar.gz",
"backup?.old",
"*.cfg"}, {});
299 BOOST_CHECK(specials.match_file(
"archive.tar.gz"));
300 BOOST_CHECK(specials.match_file(
"backup1.old"));
301 BOOST_CHECK(!specials.match_file(
"backup10.old"));
302 BOOST_CHECK(specials.match_file(
"foo.cfg"));
305 blacklist_pattern_list
none({}, {});
306 BOOST_CHECK(!
none.match_file(
"something.exe"));
307 BOOST_CHECK(!
none.match_dir(
"temp"));