1 /** @file gsFileManager_test.cpp
2
3 @brief Tests for gsFileManager
4
5 This file is part of the G+Smo library.
6
7 This Source Code Form is subject to the terms of the Mozilla Public
8 License, v. 2.0. If a copy of the MPL was not distributed with this
9 file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11 Author(s): S. Takacs, J. Vogl
12 */
13
14 #include "gismo_unittest.h"
15
16 #if defined _WIN32 || defined __CYGWIN__
17 #define own_fn "unittests.exe"
18 #else
19 #define own_fn "unittests"
20 #endif
21
SUITE(gsFileManager_test)22 SUITE(gsFileManager_test)
23 {
24 TEST(PathSeperators)
25 {
26 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), gsFileManager::getValidPathSeparators()[0]);
27
28 #if defined _WIN32
29 CHECK_EQUAL('\\', gsFileManager::getValidPathSeparators()[0]);
30 CHECK_EQUAL('/', gsFileManager::getValidPathSeparators()[1]);
31 #else
32 CHECK_EQUAL('/', gsFileManager::getValidPathSeparators()[0]);
33 #endif
34 }
35
36 TEST(Paths_absolut_relative)
37 {
38 // for any OS
39 std::string s00("/");
40 std::string s01("/foo");
41 std::string s02("/Foo/Bar");
42 std::string s03("/foo bar/bar foo");
43 std::string s04("");
44 std::string s05("foo");
45 std::string s06("foo\\bar");
46 std::string s07("\"" + s02 + "\"");
47 std::string s08("./");
48 std::string s09("./foo");
49 std::string s10("../");
50 std::string s11("../foo");
51
52 // isFullyQualified verum
53 CHECK(gsFileManager::isFullyQualified(s00));
54 CHECK(gsFileManager::isFullyQualified(s01));
55 CHECK(gsFileManager::isFullyQualified(s02));
56 CHECK(gsFileManager::isFullyQualified(s03));
57 // isFullyQualified falsum
58 CHECK(!gsFileManager::isFullyQualified(s04));
59 CHECK(!gsFileManager::isFullyQualified(s05));
60 CHECK(!gsFileManager::isFullyQualified(s06));
61 CHECK(!gsFileManager::isFullyQualified(s07));
62 CHECK(!gsFileManager::isFullyQualified(s08));
63 CHECK(!gsFileManager::isFullyQualified(s09));
64 CHECK(!gsFileManager::isFullyQualified(s10));
65 CHECK(!gsFileManager::isFullyQualified(s11));
66
67 // isExplicitlyRelative verum
68 CHECK(gsFileManager::isExplicitlyRelative(s08));
69 CHECK(gsFileManager::isExplicitlyRelative(s09));
70 CHECK(gsFileManager::isExplicitlyRelative(s10));
71 CHECK(gsFileManager::isExplicitlyRelative(s11));
72 // isExplicitlyRelative falsum
73 CHECK(!gsFileManager::isExplicitlyRelative(s00));
74 CHECK(!gsFileManager::isExplicitlyRelative(s01));
75 CHECK(!gsFileManager::isExplicitlyRelative(s02));
76 CHECK(!gsFileManager::isExplicitlyRelative(s03));
77 CHECK(!gsFileManager::isExplicitlyRelative(s04));
78 CHECK(!gsFileManager::isExplicitlyRelative(s05));
79 CHECK(!gsFileManager::isExplicitlyRelative(s06));
80 CHECK(!gsFileManager::isExplicitlyRelative(s07));
81
82 // OS specific
83 std::string c00("\\");
84 std::string c01("E:\\Foo\\Bar");
85 std::string c02("\\foo bar\\bar foo");
86 std::string c03("f:/foo bar/bar foo");
87 std::string c04("\\c:\\Foo\\Bar");
88 std::string c05("/c:/Foo/Bar");
89 std::string c06(".\\");
90 std::string c07(".\\foo");
91 std::string c08("..\\");
92 std::string c09("..\\foo");
93
94 #if defined _WIN32
95 // isFullyQualified verum
96 CHECK(gsFileManager::isFullyQualified(c00));
97 CHECK(gsFileManager::isFullyQualified(c01));
98 CHECK(gsFileManager::isFullyQualified(c02));
99 CHECK(gsFileManager::isFullyQualified(c03));
100 // isFullyQualified falsum
101 CHECK(!gsFileManager::isFullyQualified(c04));
102 CHECK(!gsFileManager::isFullyQualified(c05));
103 CHECK(!gsFileManager::isFullyQualified(c06));
104 CHECK(!gsFileManager::isFullyQualified(c07));
105 CHECK(!gsFileManager::isFullyQualified(c08));
106 CHECK(!gsFileManager::isFullyQualified(c09));
107
108 // isExplicitlyRelative verum
109 CHECK(gsFileManager::isExplicitlyRelative(c06));
110 CHECK(gsFileManager::isExplicitlyRelative(c07));
111 CHECK(gsFileManager::isExplicitlyRelative(c08));
112 CHECK(gsFileManager::isExplicitlyRelative(c09));
113 // isExplicitlyRelative falsum
114 CHECK(!gsFileManager::isExplicitlyRelative(c00));
115 CHECK(!gsFileManager::isExplicitlyRelative(c01));
116 CHECK(!gsFileManager::isExplicitlyRelative(c02));
117 CHECK(!gsFileManager::isExplicitlyRelative(c03));
118 CHECK(!gsFileManager::isExplicitlyRelative(c04));
119 CHECK(!gsFileManager::isExplicitlyRelative(c05));
120 #else
121
122 // isFullyQualified verum
123 CHECK(gsFileManager::isFullyQualified(c05));
124 // isFullyQualified falsum
125 CHECK(!gsFileManager::isFullyQualified(c00));
126 CHECK(!gsFileManager::isFullyQualified(c01));
127 CHECK(!gsFileManager::isFullyQualified(c02));
128 CHECK(!gsFileManager::isFullyQualified(c03));
129 CHECK(!gsFileManager::isFullyQualified(c04));
130 CHECK(!gsFileManager::isFullyQualified(c06));
131 CHECK(!gsFileManager::isFullyQualified(c07));
132 CHECK(!gsFileManager::isFullyQualified(c08));
133 CHECK(!gsFileManager::isFullyQualified(c09));
134
135 // isExplicitlyRelative verum
136 // isExplicitlyRelative falsum
137 CHECK(!gsFileManager::isExplicitlyRelative(c00));
138 CHECK(!gsFileManager::isExplicitlyRelative(c01));
139 CHECK(!gsFileManager::isExplicitlyRelative(c02));
140 CHECK(!gsFileManager::isExplicitlyRelative(c03));
141 CHECK(!gsFileManager::isExplicitlyRelative(c04));
142 CHECK(!gsFileManager::isExplicitlyRelative(c05));
143 CHECK(!gsFileManager::isExplicitlyRelative(c06));
144 CHECK(!gsFileManager::isExplicitlyRelative(c07));
145 CHECK(!gsFileManager::isExplicitlyRelative(c08));
146 CHECK(!gsFileManager::isExplicitlyRelative(c09));
147 #endif
148 }
149
150 TEST(SearchPaths)
151 {
152 std::string defaultPath = gsFileManager::getSearchPaths();
153 gsFileManager::setSearchPaths("");
154 GISMO_ASSERT(gsFileManager::getSearchPaths() == "", "gsFileManager::getSearchPaths() not empty");
155
156 std::string verum0 = gsFileManager::getExePath();
157 std::string verum1 = gsFileManager::getTempPath();
158 GISMO_ASSERT(verum0 != verum1, "gsFileManager::getExePath == gsFileManager::getTempPath()");
159 std::string falsum = gsFileManager::getCanonicRepresentation("/fuubar");
160
161 std::string result;
162
163 CHECK(!gsFileManager::setSearchPaths(falsum));
164 CHECK_EQUAL("", gsFileManager::getSearchPaths());
165
166 CHECK(gsFileManager::setSearchPaths(verum0));
167 result = gsFileManager::getSearchPaths();
168 CHECK_EQUAL(verum0 + ";", result);
169 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), result[result.length() - 2]);
170
171 CHECK(gsFileManager::addSearchPaths(verum1));
172 result = gsFileManager::getSearchPaths();
173 CHECK_EQUAL(verum0 + ";" + verum1 + ";", result);
174 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), result[result.length() - 2]);
175
176 // clear SearchPaths
177 CHECK(gsFileManager::setSearchPaths(""));
178 CHECK_EQUAL("", gsFileManager::getSearchPaths());
179
180 // set more values at once
181 CHECK(gsFileManager::setSearchPaths(verum0 + ";" + verum1));
182 result = gsFileManager::getSearchPaths();
183 CHECK_EQUAL(verum0 + ";" + verum1 + ";", result);
184 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), result[result.length() - 2]);
185
186 gsFileManager::setSearchPaths(defaultPath);
187 GISMO_ASSERT(gsFileManager::getSearchPaths() == defaultPath, "Can't set back to default getSearchPaths!");
188 }
189
190 TEST(find)
191 {
192 std::string defaultPath = gsFileManager::getSearchPaths();
193 gsFileManager::setSearchPaths("");
194 GISMO_ASSERT(gsFileManager::getSearchPaths() == "", "gsFileManager::getSearchPaths() not empty");
195
196 // calculate relative path
197 std::string absolute = gsFileManager::getCanonicRepresentation(GISMO_DATA_DIR); // absolute
198 std::string current = gsFileManager::getCurrentPath();
199 std::string relative = gsFileManager::makeRelative(current, absolute);
200 GISMO_ASSERT(gsFileManager::isExplicitlyRelative(relative),
201 "variable relative isn't gsFilemanager::isExplicitlyRealtive");
202
203 std::string verum = gsFileManager::getCanonicRepresentation("options/assembler_options.xml"); // success, if path known
204 std::string falsum("fuubar"); // fails
205
206 // check without SearchPaths
207 CHECK_EQUAL(relative + verum, gsFileManager::find(relative + verum));
208 CHECK_EQUAL(absolute + verum, gsFileManager::find(absolute + verum));
209 CHECK_EQUAL("", gsFileManager::find(verum));
210 CHECK_EQUAL("", gsFileManager::find(falsum));
211
212 // check with SearchPath set to relative
213 gsFileManager::setSearchPaths(relative);
214 CHECK_EQUAL(relative + verum, gsFileManager::find(relative + verum));
215 CHECK_EQUAL(absolute + verum, gsFileManager::find(absolute + verum));
216 CHECK_EQUAL(absolute + verum, gsFileManager::find(verum));
217 CHECK_EQUAL("", gsFileManager::find(falsum));
218
219 // clear SearchPaths
220 gsFileManager::setSearchPaths("");
221 GISMO_ASSERT(gsFileManager::getSearchPaths() == "", "gsFileManager::getSearchPaths() not empty");
222
223 // check with SearchPath set to absolute
224 gsFileManager::setSearchPaths(absolute);
225 CHECK_EQUAL(relative + verum, gsFileManager::find(relative + verum));
226 CHECK_EQUAL(absolute + verum, gsFileManager::find(absolute + verum));
227 CHECK_EQUAL(absolute + verum, gsFileManager::find(verum));
228 CHECK_EQUAL("", gsFileManager::find(falsum));
229
230 gsFileManager::setSearchPaths(defaultPath);
231 GISMO_ASSERT(gsFileManager::getSearchPaths() == defaultPath, "Can't set back to default getSearchPaths!");
232 }
233
234 TEST(fileExists)
235 {
236 // FILE
237 std::string defaultPath = gsFileManager::getSearchPaths();
238 gsFileManager::setSearchPaths("");
239 GISMO_ASSERT(gsFileManager::getSearchPaths() == "", "gsFileManager::getSearchPaths() not empty");
240
241 std::string absolute = gsFileManager::getExePath(); // absolute
242 std::string relative = gsFileManager::makeRelative(
243 gsFileManager::getCurrentPath(), absolute); // relative
244 CHECK(gsFileManager::isExplicitlyRelative(relative));
245 std::string falsum("fuubar"); // fails
246
247 CHECK(gsFileManager::fileExists(relative + own_fn));
248 CHECK(gsFileManager::fileExists(absolute + own_fn));
249
250 CHECK(!gsFileManager::fileExists(falsum));
251
252 gsFileManager::setSearchPaths(relative);
253 CHECK(gsFileManager::fileExists(own_fn));
254 CHECK(!gsFileManager::fileExists(falsum));
255
256 gsFileManager::setSearchPaths("");
257 GISMO_ASSERT(gsFileManager::getSearchPaths() == "", "gsFileManager::getSearchPaths() not empty");
258
259 gsFileManager::setSearchPaths(absolute);
260 CHECK(gsFileManager::fileExists(own_fn));
261 CHECK(!gsFileManager::fileExists(falsum));
262
263 gsFileManager::setSearchPaths(defaultPath);
264 GISMO_ASSERT(gsFileManager::getSearchPaths() == defaultPath, "Can't set back to default getSearchPaths!");
265 }
266
267 TEST(findInDataDir)
268 {
269 std::string verum = gsFileManager::getCanonicRepresentation("options/assembler_options.xml");
270 std::string falsum = gsFileManager::getCanonicRepresentation("fuu/bar");
271
272 CHECK_EQUAL(GISMO_DATA_DIR + verum, gsFileManager::findInDataDir(verum));
273 CHECK(gsFileManager::isFullyQualified(gsFileManager::findInDataDir(verum)));
274 CHECK(!gsFileManager::isExplicitlyRelative(gsFileManager::findInDataDir(verum)));
275
276 CHECK_EQUAL("", gsFileManager::findInDataDir(falsum));
277 }
278
279 TEST(fileExistsInDataDir)
280 {
281 std::string verum = gsFileManager::getCanonicRepresentation("options/assembler_options.xml");
282 std::string falsum = gsFileManager::getCanonicRepresentation("fuu/bar");
283
284 CHECK(gsFileManager::fileExistsInDataDir(verum));
285
286 CHECK(!gsFileManager::fileExistsInDataDir(falsum));
287 }
288
289 TEST(getTempPath)
290 {
291 std::string testString = gsFileManager::getTempPath();
292 CHECK(testString != "");
293 CHECK(gsFileManager::isFullyQualified(testString));
294 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), testString[testString.length() - 1]);
295 }
296
297 TEST(getCurrentPath)
298 {
299 std::string testString = gsFileManager::getCurrentPath();
300 CHECK(testString != "");
301 CHECK(gsFileManager::isFullyQualified(testString));
302 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), testString[testString.length() - 1]);
303 }
304
305 TEST(getExePath)
306 {
307 std::string testString = gsFileManager::getExePath();
308 CHECK(testString != "");
309 CHECK(gsFileManager::isFullyQualified(testString));
310 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), testString[testString.length() - 1]);
311 CHECK(gsFileManager::fileExists(testString + own_fn));
312 }
313
314 TEST(getHomePath)
315 {
316 std::string testString = gsFileManager::getHomePath();
317 CHECK(testString != "");
318 CHECK(gsFileManager::isFullyQualified(testString));
319 CHECK_EQUAL(gsFileManager::getNativePathSeparator(), testString[testString.length() - 1]);
320 }
321
322 TEST(makeRelative)
323 {
324 #if defined _WIN32 || defined __CYGWIN__
325 CHECK_EQUAL(".\\", gsFileManager::makeRelative("/a/b/c/", "/a/b/c/"));
326 CHECK_EQUAL(".\\d", gsFileManager::makeRelative("/a/b/c/", "/a/b/c/d"));
327 CHECK_EQUAL("..\\c\\d", gsFileManager::makeRelative("/a/b/cd/", "/a/b/c/d"));
328 CHECK_EQUAL(".\\d", gsFileManager::makeRelative("\\a\\b\\c\\", "\\a\\b\\c\\d"));
329 CHECK_EQUAL("..\\c\\d", gsFileManager::makeRelative("\\a\\b\\cd\\", "\\a\\b\\c\\d"));
330
331 // with drive letter
332 CHECK_EQUAL(".\\", gsFileManager::makeRelative("c:\\a\\b\\c\\", "c:\\a\\b\\c\\"));
333 CHECK_EQUAL(".\\d", gsFileManager::makeRelative("c:\\a\\b\\c\\", "c:\\a\\b\\c\\d"));
334 CHECK_EQUAL("..\\c\\d", gsFileManager::makeRelative("c:\\a\\b\\cd\\", "c:\\a\\b\\c\\d"));
335
336 // no relative possible
337 CHECK_EQUAL("d:\\a\\b\\c\\d", gsFileManager::makeRelative("c:\\a\\b\\c\\", "d:\\a\\b\\c\\d"));
338 CHECK_EQUAL("d:\\a\\b\\c\\d", gsFileManager::makeRelative("c:\\a\\b\\cd\\", "d:\\a\\b\\c\\d"));
339 #else
340 CHECK_EQUAL("./", gsFileManager::makeRelative("/a/b/c/", "/a/b/c/"));
341 CHECK_EQUAL("./d", gsFileManager::makeRelative("/a/b/c/", "/a/b/c/d"));
342 CHECK_EQUAL("../c/d", gsFileManager::makeRelative("/a/b/cd/", "/a/b/c/d"));
343 #endif
344 }
345
346 TEST(mkdir)
347 {
348 std::string temp = gsFileManager::getTempPath();
349 if (temp != "")
350 {
351 std::stringstream stream;
352 for (int i = 0; i < 0xFFFF; ++i)
353 {
354 stream << temp << "gsMkDir" << std::hex << i << gsFileManager::getNativePathSeparator();
355 if (!gsFileManager::fileExists(stream.str() + gsFileManager::getNativePathSeparator() + "test.xml"))
356 {
357 CHECK(gsFileManager::mkdir(stream.str())); // create new directory
358 CHECK(gsFileManager::mkdir(stream.str())); // already existing directory
359 stream << "test";
360 {
361 gsBSplineBasis<> geo;
362 gsWrite(geo, stream.str());
363 }
364 stream << ".xml";
365 CHECK(gsFileManager::fileExists(stream.str()));
366 CHECK(!gsFileManager::mkdir(stream.str())); // failing create of directory
367 break;
368 }
369 stream.str("");
370 }
371 }
372 else
373 CHECK(false);
374 }
375
376 TEST(pathEqual)
377 {
378 // absolute
379 CHECK(gsFileManager::pathEqual("/", "/"));
380 CHECK(gsFileManager::pathEqual("/foo", "/foo"));
381 CHECK(gsFileManager::pathEqual("/foo/bar", "/foo/bar"));
382 CHECK(!gsFileManager::pathEqual("/foo", "/bar"));
383 CHECK(!gsFileManager::pathEqual("/foo/bar", "/bar/foo"));
384 // canonical
385 CHECK(gsFileManager::pathEqual("/foo/./bar", "/foo/bar"));
386 CHECK(gsFileManager::pathEqual("/foo/baz/../bar", "/foo/bar"));
387 // path separator - 2nd param
388 CHECK(gsFileManager::pathEqual("/foo", "/foo/"));
389 CHECK(gsFileManager::pathEqual("/foo/bar", "/foo/bar/"));
390 CHECK(!gsFileManager::pathEqual("/foo", "/bar/"));
391 CHECK(!gsFileManager::pathEqual("/foo/bar", "/bar/foo/"));
392 CHECK(gsFileManager::pathEqual("/foo/./bar", "/foo/bar/"));
393 CHECK(gsFileManager::pathEqual("/foo/baz/../bar", "/foo/bar/"));
394 // path separator - 1st param
395 CHECK(gsFileManager::pathEqual("/foo/", "/foo"));
396 CHECK(gsFileManager::pathEqual("/foo/bar/", "/foo/bar"));
397 CHECK(!gsFileManager::pathEqual("/foo/", "/bar"));
398 CHECK(!gsFileManager::pathEqual("/foo/bar/", "/bar/foo"));
399 CHECK(gsFileManager::pathEqual("/foo/./bar/", "/foo/bar"));
400 CHECK(gsFileManager::pathEqual("/foo/baz/../bar/", "/foo/bar"));
401
402 // relative
403 CHECK(gsFileManager::pathEqual("", ""));
404 CHECK(gsFileManager::pathEqual("", "./"));
405 CHECK(gsFileManager::pathEqual("", gsFileManager::getCurrentPath()));
406 CHECK(gsFileManager::pathEqual("foo", "foo"));
407 CHECK(gsFileManager::pathEqual("foo/bar", "foo/bar"));
408 CHECK(!gsFileManager::pathEqual("foo", "bar"));
409 CHECK(!gsFileManager::pathEqual("foo/bar", "bar/foo"));
410 // canonical
411 CHECK(gsFileManager::pathEqual("foo/./bar", "foo/bar"));
412 CHECK(gsFileManager::pathEqual("foo/baz/../bar", "foo/bar"));
413 CHECK(gsFileManager::pathEqual("../bar", "./buz/../../bar"));
414 // path separator - 2nd param
415 CHECK(gsFileManager::pathEqual("foo", "foo/"));
416 CHECK(gsFileManager::pathEqual("foo/bar", "foo/bar/"));
417 CHECK(!gsFileManager::pathEqual("foo", "bar/"));
418 CHECK(!gsFileManager::pathEqual("foo/bar", "bar/foo/"));
419 CHECK(gsFileManager::pathEqual("foo/./bar", "foo/bar/"));
420 CHECK(gsFileManager::pathEqual("foo/baz/../bar", "foo/bar/"));
421 // path separator - 1st param
422 CHECK(gsFileManager::pathEqual("foo/", "foo"));
423 CHECK(gsFileManager::pathEqual("foo/bar/", "foo/bar"));
424 CHECK(!gsFileManager::pathEqual("foo/", "bar"));
425 CHECK(!gsFileManager::pathEqual("foo/bar/", "bar/foo"));
426 CHECK(gsFileManager::pathEqual("foo/./bar/", "foo/bar"));
427 CHECK(gsFileManager::pathEqual("foo/baz/../bar/", "foo/bar"));
428
429 #if defined _WIN32
430 CHECK(gsFileManager::pathEqual("/foo/bar", "\\foo\\bar"));
431 CHECK(gsFileManager::pathEqual("foo/bar", "foo\\bar"));
432 CHECK(gsFileManager::pathEqual("../bar", ".\\buz\\..\\..\\bar"));
433
434 CHECK(gsFileManager::pathEqual("e:/foo/bar", "e:\\foo\\bar"));
435 #endif
436 }
437
438 TEST(getExtension)
439 {
440 // any OS
441 CHECK_EQUAL("bar", gsFileManager::getExtension("foo.bar"));
442 CHECK_EQUAL("bar", gsFileManager::getExtension("/foo.bar"));
443 CHECK_EQUAL("bar", gsFileManager::getExtension("./foo.bar"));
444 CHECK_EQUAL("bar", gsFileManager::getExtension("../foo.bar"));
445
446 CHECK_EQUAL("bar", gsFileManager::getExtension("foo.baz.bar"));
447 CHECK_EQUAL("bar", gsFileManager::getExtension("/foo.baz.bar"));
448 CHECK_EQUAL("bar", gsFileManager::getExtension("./foo.baz.bar"));
449 CHECK_EQUAL("bar", gsFileManager::getExtension("../foo.baz.bar"));
450
451 CHECK_EQUAL("bar", gsFileManager::getExtension("/some/../baz/other/../foo.baz.bar"));
452
453 CHECK_EQUAL("foo", gsFileManager::getExtension("bar.foo"));
454
455 #if defined _WIN32
456 CHECK_EQUAL("bar", gsFileManager::getExtension("foo.bar"));
457 CHECK_EQUAL("bar", gsFileManager::getExtension("\\foo.bar"));
458 CHECK_EQUAL("bar", gsFileManager::getExtension(".\\foo.bar"));
459 CHECK_EQUAL("bar", gsFileManager::getExtension("..\\foo.bar"));
460
461 CHECK_EQUAL("bar", gsFileManager::getExtension("foo.baz.bar"));
462 CHECK_EQUAL("bar", gsFileManager::getExtension("\\foo.baz.bar"));
463 CHECK_EQUAL("bar", gsFileManager::getExtension(".\\foo.baz.bar"));
464 CHECK_EQUAL("bar", gsFileManager::getExtension("..\\foo.baz.bar"));
465
466 CHECK_EQUAL("bar", gsFileManager::getExtension("\\some\\..\\baz\\other\\..\\foo.baz.bar"));
467
468 CHECK_EQUAL("foo", gsFileManager::getExtension("bar.foo"));
469
470 CHECK_EQUAL("bar", gsFileManager::getExtension("e:\\foo.bar"));
471 #endif
472 }
473
474 TEST(getBasename)
475 {
476 // any OS
477 CHECK_EQUAL("foo", gsFileManager::getBasename("foo.bar"));
478 CHECK_EQUAL("foo", gsFileManager::getBasename("/foo.bar"));
479 CHECK_EQUAL("foo", gsFileManager::getBasename("./foo.bar"));
480 CHECK_EQUAL("foo", gsFileManager::getBasename("../foo.bar"));
481
482 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("foo.baz.bar"));
483 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("/foo.baz.bar"));
484 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("./foo.baz.bar"));
485 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("../foo.baz.bar"));
486
487 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("/some/../bax/other/../foo.baz.bar"));
488
489 CHECK_EQUAL("bar", gsFileManager::getBasename("bar.foo"));
490
491 #if defined _WIN32
492 CHECK_EQUAL("foo", gsFileManager::getBasename("foo.bar"));
493 CHECK_EQUAL("foo", gsFileManager::getBasename("\\foo.bar"));
494 CHECK_EQUAL("foo", gsFileManager::getBasename(".\\foo.bar"));
495 CHECK_EQUAL("foo", gsFileManager::getBasename("..\\foo.bar"));
496
497 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("foo.baz.bar"));
498 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("\\foo.baz.bar"));
499 CHECK_EQUAL("foo.baz", gsFileManager::getBasename(".\\foo.baz.bar"));
500 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("..\\foo.baz.bar"));
501
502 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("\\some\\..\\bax\\other\\..\\foo.baz.bar"));
503
504 CHECK_EQUAL("bar", gsFileManager::getBasename("bar.foo"));
505
506 CHECK_EQUAL("foo.baz", gsFileManager::getBasename("e:\\foo.baz.bar"));
507 #endif
508 }
509
510 TEST(getFilename)
511 {
512 // any OS
513 CHECK_EQUAL("foo", gsFileManager::getFilename("/foo"));
514 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("/foo.bar"));
515 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("/foo.baz.bar"));
516 CHECK_EQUAL("foo", gsFileManager::getFilename("../foo"));
517 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("../foo.bar"));
518 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("../foo.baz.bar"));
519 CHECK_EQUAL("foo", gsFileManager::getFilename("some/other/foo"));
520 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("some/other/foo.bar"));
521 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("some/other/foo.baz.bar"));
522 CHECK_EQUAL("foo", gsFileManager::getFilename("/some/other/foo"));
523 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("/some/other/foo.bar"));
524 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("/some/other/foo.baz.bar"));
525 CHECK_EQUAL("foo", gsFileManager::getFilename("./some/other/foo"));
526 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("./some/other/foo.bar"));
527 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("./some/other/foo.baz.bar"));
528
529 #if defined _WIN32
530 CHECK_EQUAL("foo", gsFileManager::getFilename("\\foo"));
531 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("\\foo.bar"));
532 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("\\foo.baz.bar"));
533 CHECK_EQUAL("foo", gsFileManager::getFilename("..\\foo"));
534 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("..\\foo.bar"));
535 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("..\\foo.baz.bar"));
536 CHECK_EQUAL("foo", gsFileManager::getFilename("some\\other\\foo"));
537 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("some\\other\\foo.bar"));
538 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("some\\other\\foo.baz.bar"));
539 CHECK_EQUAL("foo", gsFileManager::getFilename("\\some\\other\\foo"));
540 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("\\some\\other\\foo.bar"));
541 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("\\some\\other\\foo.baz.bar"));
542 CHECK_EQUAL("foo", gsFileManager::getFilename(".\\some\\other\\foo"));
543 CHECK_EQUAL("foo.bar", gsFileManager::getFilename(".\\some\\other\\foo.bar"));
544 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename(".\\some\\other\\foo.baz.bar"));
545
546 // drive letter
547 CHECK_EQUAL("foo", gsFileManager::getFilename("e:\\some\\other\\foo"));
548 CHECK_EQUAL("foo.bar", gsFileManager::getFilename("e:\\some\\other\\foo.bar"));
549 CHECK_EQUAL("foo.baz.bar", gsFileManager::getFilename("e:\\some\\other\\foo.baz.bar"));
550 #endif
551 }
552
553 TEST(getPath)
554 {
555 #if defined _WIN32
556 CHECK_EQUAL("", gsFileManager::getPath("foo"));
557 CHECK_EQUAL("", gsFileManager::getPath("foo.bar"));
558 CHECK_EQUAL("", gsFileManager::getPath("foo.baz.bar"));
559 CHECK_EQUAL("\\", gsFileManager::getPath("\\foo"));
560 CHECK_EQUAL("\\", gsFileManager::getPath("\\foo.bar"));
561 CHECK_EQUAL("\\", gsFileManager::getPath("\\foo.baz.bar"));
562 CHECK_EQUAL(".\\", gsFileManager::getPath(".\\foo"));
563 CHECK_EQUAL(".\\", gsFileManager::getPath(".\\foo.bar"));
564 CHECK_EQUAL(".\\", gsFileManager::getPath(".\\foo.baz.bar"));
565 CHECK_EQUAL("..\\", gsFileManager::getPath("..\\foo"));
566 CHECK_EQUAL("..\\", gsFileManager::getPath("..\\foo.bar"));
567 CHECK_EQUAL("..\\", gsFileManager::getPath("..\\foo.baz.bar"));
568 CHECK_EQUAL("some\\other\\", gsFileManager::getPath("some\\other\\foo"));
569 CHECK_EQUAL("some\\other\\", gsFileManager::getPath("some\\other\\foo.bar"));
570 CHECK_EQUAL("some\\other\\", gsFileManager::getPath("some\\other\\foo.baz.bar"));
571 CHECK_EQUAL("\\some\\other\\", gsFileManager::getPath("\\some\\other\\foo"));
572 CHECK_EQUAL("\\some\\other\\", gsFileManager::getPath("\\some\\other\\foo.bar"));
573 CHECK_EQUAL("\\some\\other\\", gsFileManager::getPath("\\some\\other\\foo.baz.bar"));
574 CHECK_EQUAL(".\\some\\other\\", gsFileManager::getPath(".\\some\\other\\foo"));
575 CHECK_EQUAL(".\\some\\other\\", gsFileManager::getPath(".\\some\\other\\foo.bar"));
576 CHECK_EQUAL(".\\some\\other\\", gsFileManager::getPath(".\\some\\other\\foo.baz.bar"));
577 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\other\\foo"));
578 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\other\\foo.bar"));
579 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\other\\foo.baz.bar"));
580 // some canonical check
581 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\buz\\..\\other\\foo"));
582 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\buz\\..\\other\\foo.bar"));
583 CHECK_EQUAL("..\\some\\other\\", gsFileManager::getPath("..\\some\\buz\\..\\other\\foo.baz.bar"));
584
585 // driver letter
586 CHECK_EQUAL("e:\\some\\other\\", gsFileManager::getPath("e:\\some\\other\\foo"));
587 CHECK_EQUAL("e:\\some\\other\\", gsFileManager::getPath("e:\\some\\other\\foo.bar"));
588 CHECK_EQUAL("e:\\some\\other\\", gsFileManager::getPath("e:\\some\\other\\foo.baz.bar"));
589 #else
590 CHECK_EQUAL("", gsFileManager::getPath("foo"));
591 CHECK_EQUAL("", gsFileManager::getPath("foo.bar"));
592 CHECK_EQUAL("", gsFileManager::getPath("foo.baz.bar"));
593 CHECK_EQUAL("/", gsFileManager::getPath("/foo"));
594 CHECK_EQUAL("/", gsFileManager::getPath("/foo.bar"));
595 CHECK_EQUAL("/", gsFileManager::getPath("/foo.baz.bar"));
596 CHECK_EQUAL("./", gsFileManager::getPath("./foo"));
597 CHECK_EQUAL("./", gsFileManager::getPath("./foo.bar"));
598 CHECK_EQUAL("./", gsFileManager::getPath("./foo.baz.bar"));
599 CHECK_EQUAL("../", gsFileManager::getPath("../foo"));
600 CHECK_EQUAL("../", gsFileManager::getPath("../foo.bar"));
601 CHECK_EQUAL("../", gsFileManager::getPath("../foo.baz.bar"));
602 CHECK_EQUAL("some/other/", gsFileManager::getPath("some/other/foo"));
603 CHECK_EQUAL("some/other/", gsFileManager::getPath("some/other/foo.bar"));
604 CHECK_EQUAL("some/other/", gsFileManager::getPath("some/other/foo.baz.bar"));
605 CHECK_EQUAL("/some/other/", gsFileManager::getPath("/some/other/foo"));
606 CHECK_EQUAL("/some/other/", gsFileManager::getPath("/some/other/foo.bar"));
607 CHECK_EQUAL("/some/other/", gsFileManager::getPath("/some/other/foo.baz.bar"));
608 CHECK_EQUAL("./some/other/", gsFileManager::getPath("./some/other/foo"));
609 CHECK_EQUAL("./some/other/", gsFileManager::getPath("./some/other/foo.bar"));
610 CHECK_EQUAL("./some/other/", gsFileManager::getPath("./some/other/foo.baz.bar"));
611 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/other/foo"));
612 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/other/foo.bar"));
613 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/other/foo.baz.bar"));
614 // some canonical check
615 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/buz/../other/foo"));
616 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/buz/../other/foo.bar"));
617 CHECK_EQUAL("../some/other/", gsFileManager::getPath("../some/buz/../other/foo.baz.bar"));
618 #endif
619 }
620
621 TEST(getCanonicRepresentation)
622 {
623 #if defined _WIN32
624 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\.\\bar"));
625 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\baz\\..\\bar"));
626 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\baz\\baz\\..\\..\\bar"));
627 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\baz\\..\\baz\\..\\bar"));
628 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\baz\\baz\\..\\.\\.\\.\\..\\bar"));
629 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("foo\\baz\\.\\..\\.\\baz\\.\\..\\.\\bar"));
630 CHECK_EQUAL("foo\\bar", gsFileManager::getCanonicRepresentation("baz\\baz\\..\\..\\foo\\bar"));
631
632 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\.\\bar"));
633 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\baz\\..\\bar"));
634 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\baz\\baz\\..\\..\\bar"));
635 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\baz\\..\\baz\\..\\bar"));
636 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\baz\\baz\\..\\.\\.\\.\\..\\bar"));
637 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\foo\\baz\\.\\..\\.\\baz\\.\\..\\.\\bar"));
638 CHECK_EQUAL("e:\\foo\\bar", gsFileManager::getCanonicRepresentation("e:\\baz\\baz\\..\\..\\foo\\bar"));
639
640 CHECK_EQUAL(".\\foo", gsFileManager::getCanonicRepresentation(".\\.\\.\\foo"));
641 CHECK_EQUAL("..\\foo", gsFileManager::getCanonicRepresentation(".\\..\\.\\foo"));
642
643 CHECK_EQUAL("", gsFileManager::getCanonicRepresentation(""));
644 CHECK_EQUAL(".\\", gsFileManager::getCanonicRepresentation("", true));
645 CHECK_EQUAL(".\\foo\\", gsFileManager::getCanonicRepresentation(".\\.\\.\\foo", true));
646 CHECK_EQUAL("..\\foo\\", gsFileManager::getCanonicRepresentation(".\\..\\.\\foo", true));
647
648 CHECK_EQUAL(".\\foo\\", gsFileManager::getCanonicRepresentation(".\\.\\.\\foo\\"));
649 CHECK_EQUAL("..\\foo\\", gsFileManager::getCanonicRepresentation(".\\..\\.\\foo\\"));
650 #else
651 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/./bar"));
652 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/baz/../bar"));
653 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/baz/baz/../../bar"));
654 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/baz/../baz/../bar"));
655 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/baz/baz/.././././../bar"));
656 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("foo/baz/./.././baz/./.././bar"));
657 CHECK_EQUAL("foo/bar", gsFileManager::getCanonicRepresentation("baz/baz/../../foo/bar"));
658
659 CHECK_EQUAL("./foo", gsFileManager::getCanonicRepresentation("./././foo"));
660 CHECK_EQUAL("../foo", gsFileManager::getCanonicRepresentation("./.././foo"));
661
662 CHECK_EQUAL("", gsFileManager::getCanonicRepresentation(""));
663 CHECK_EQUAL("./", gsFileManager::getCanonicRepresentation("", true));
664 CHECK_EQUAL("./foo/", gsFileManager::getCanonicRepresentation("./././foo", true));
665 CHECK_EQUAL("../foo/", gsFileManager::getCanonicRepresentation("./.././foo", true));
666
667 CHECK_EQUAL("./foo/", gsFileManager::getCanonicRepresentation("./././foo/"));
668 CHECK_EQUAL("../foo/", gsFileManager::getCanonicRepresentation("./.././foo/"));
669 #endif
670 }
671
672 // gsFileManager::open will not be tested here.
673 }
674