123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- // filesystem relative_test.cpp ---------------------------------------------------- //
- // Copyright Beman Dawes 2015
- // Distributed under the Boost Software License, Version 1.0.
- // See http://www.boost.org/LICENSE_1_0.txt
- // Library home page: http://www.boost.org/libs/filesystem
- // ---------------------------------------------------------------------------------- //
- //
- // At least initially, development is easier if these tests are in a separate file.
- //
- // ---------------------------------------------------------------------------------- //
- #include <boost/config/warning_disable.hpp>
- #include <boost/filesystem/path.hpp>
- #include <boost/detail/lightweight_test_report.hpp>
- #include <iostream>
- using boost::filesystem::path;
- using std::cout;
- using std::endl;
- namespace
- {
- void lexically_relative_test()
- {
- cout << "lexically_relative_test..." << endl;
- BOOST_TEST(path("").lexically_relative("") == "");
- BOOST_TEST(path("").lexically_relative("/foo") == "");
- BOOST_TEST(path("/foo").lexically_relative("") == "");
- BOOST_TEST(path("/foo").lexically_relative("/foo") == ".");
- BOOST_TEST(path("").lexically_relative("foo") == "");
- BOOST_TEST(path("foo").lexically_relative("") == "");
- BOOST_TEST(path("foo").lexically_relative("foo") == ".");
- BOOST_TEST(path("a/b/c").lexically_relative("a") == "b/c");
- BOOST_TEST(path("a//b//c").lexically_relative("a") == "b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b") == "c");
- BOOST_TEST(path("a///b//c").lexically_relative("a//b") == "c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/c") == ".");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x") == "..");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y") == "../..");
- BOOST_TEST(path("a/b/c").lexically_relative("a/x") == "../b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/x") == "../c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/x/y") == "../../b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/x/y") == "../../c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y/z") == "../../..");
- BOOST_TEST(path("a/b/c").lexically_relative("a/") == "b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/.") == "b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/./") == "b/c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/..") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/../") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/..") == "c");
- BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/../") == "c");
- // paths unrelated except first element, and first element is root directory
- BOOST_TEST(path("/a/b/c").lexically_relative("/x") == "../a/b/c");
- BOOST_TEST(path("/a/b/c").lexically_relative("/x/y") == "../../a/b/c");
- BOOST_TEST(path("/a/b/c").lexically_relative("/x/y/z") == "../../../a/b/c");
- // paths unrelated
- BOOST_TEST(path("a/b/c").lexically_relative("x") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("x/y") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("x/y/z") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("/x") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("/x/y") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("/x/y/z") == "");
- BOOST_TEST(path("a/b/c").lexically_relative("/a/b/c") == "");
- // TODO: add some Windows-only test cases that probe presence or absence of
- // drive specifier-and root-directory
- // Some tests from Jamie Allsop's paper
- BOOST_TEST(path("/a/d").lexically_relative("/a/b/c") == "../../d");
- BOOST_TEST(path("/a/b/c").lexically_relative("/a/d") == "../b/c");
- #ifdef BOOST_WINDOWS_API
- BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "../y");
- #else
- BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "");
- #endif
- BOOST_TEST(path("d:\\y").lexically_relative("c:\\x") == "");
- // From issue #1976
- BOOST_TEST(path("/foo/new").lexically_relative("/foo/bar") == "../new");
- }
- void lexically_proximate_test()
- {
- cout << "lexically_proximate_test..." << endl;
- // paths unrelated
- BOOST_TEST(path("a/b/c").lexically_proximate("x") == "a/b/c");
- }
- } // unnamed namespace
- //--------------------------------------------------------------------------------------//
- // //
- // main //
- // //
- //--------------------------------------------------------------------------------------//
- int test_main(int, char*[])
- {
- // document state of critical macros
- #ifdef BOOST_POSIX_API
- cout << "BOOST_POSIX_API" << endl;
- #endif
- #ifdef BOOST_WINDOWS_API
- cout << "BOOST_WINDOWS_API" << endl;
- #endif
- lexically_relative_test();
- lexically_proximate_test();
- return ::boost::report_errors();
- }
|