| 25 | namespace { |
| 26 | |
| 27 | void lexically_relative_test() |
| 28 | { |
| 29 | cout << "lexically_relative_test..." << endl; |
| 30 | |
| 31 | BOOST_TEST(path("").lexically_relative("") == ""); |
| 32 | BOOST_TEST(path("").lexically_relative("/foo") == ""); |
| 33 | BOOST_TEST(path("/foo").lexically_relative("") == ""); |
| 34 | BOOST_TEST(path("/foo").lexically_relative("/foo") == "."); |
| 35 | BOOST_TEST(path("").lexically_relative("foo") == ""); |
| 36 | BOOST_TEST(path("foo").lexically_relative("") == ""); |
| 37 | BOOST_TEST(path("foo").lexically_relative("foo") == "."); |
| 38 | |
| 39 | BOOST_TEST(path("a/b/c").lexically_relative("a") == "b/c"); |
| 40 | BOOST_TEST(path("a//b//c").lexically_relative("a") == "b/c"); |
| 41 | BOOST_TEST(path("a/b/c").lexically_relative("a/b") == "c"); |
| 42 | BOOST_TEST(path("a///b//c").lexically_relative("a//b") == "c"); |
| 43 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/c") == "."); |
| 44 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x") == ".."); |
| 45 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); |
| 46 | BOOST_TEST(path("a/b/c").lexically_relative("a/x") == "../b/c"); |
| 47 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/x") == "../c"); |
| 48 | BOOST_TEST(path("a/b/c").lexically_relative("a/x/y") == "../../b/c"); |
| 49 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/x/y") == "../../c"); |
| 50 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y/z") == "../../.."); |
| 51 | BOOST_TEST(path("a/b/c").lexically_relative("a/") == "b/c"); |
| 52 | BOOST_TEST(path("a/b/c").lexically_relative("a/.") == "b/c"); |
| 53 | BOOST_TEST(path("a/b/c").lexically_relative("a/./") == "b/c"); |
| 54 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/..") == ""); |
| 55 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/../") == ""); |
| 56 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/..") == "c"); |
| 57 | BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/../") == "c"); |
| 58 | |
| 59 | // paths unrelated except first element, and first element is root directory |
| 60 | BOOST_TEST(path("/a/b/c").lexically_relative("/x") == "../a/b/c"); |
| 61 | BOOST_TEST(path("/a/b/c").lexically_relative("/x/y") == "../../a/b/c"); |
| 62 | BOOST_TEST(path("/a/b/c").lexically_relative("/x/y/z") == "../../../a/b/c"); |
| 63 | |
| 64 | // paths unrelated |
| 65 | BOOST_TEST(path("a/b/c").lexically_relative("x") == ""); |
| 66 | BOOST_TEST(path("a/b/c").lexically_relative("x/y") == ""); |
| 67 | BOOST_TEST(path("a/b/c").lexically_relative("x/y/z") == ""); |
| 68 | BOOST_TEST(path("a/b/c").lexically_relative("/x") == ""); |
| 69 | BOOST_TEST(path("a/b/c").lexically_relative("/x/y") == ""); |
| 70 | BOOST_TEST(path("a/b/c").lexically_relative("/x/y/z") == ""); |
| 71 | BOOST_TEST(path("a/b/c").lexically_relative("/a/b/c") == ""); |
| 72 | |
| 73 | // TODO: add some Windows-only test cases that probe presence or absence of |
| 74 | // drive specifier-and root-directory |
| 75 | |
| 76 | // Some tests from Jamie Allsop's paper |
| 77 | BOOST_TEST(path("/a/d").lexically_relative("/a/b/c") == "../../d"); |
| 78 | BOOST_TEST(path("/a/b/c").lexically_relative("/a/d") == "../b/c"); |
| 79 | #ifdef BOOST_FILESYSTEM_WINDOWS_API |
| 80 | BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "../y"); |
| 81 | #else |
| 82 | BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == ""); |
| 83 | #endif |
| 84 | BOOST_TEST(path("d:\\y").lexically_relative("c:\\x") == ""); |
no test coverage detected