| // deprecated_test program --------------------------------------------------// |
| |
| // Copyright Beman Dawes 2002 |
| // Copyright Vladimir Prus 2002 |
| |
| // 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 |
| |
| // This test verifies that various deprecated names still work. This is |
| // important to preserve existing code that uses the old names. |
| |
| #define BOOST_FILESYSTEM_VERSION 3 |
| |
| #include <boost/config.hpp> |
| |
| # if defined( BOOST_NO_STD_WSTRING ) |
| # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support |
| # endif |
| |
| #define BOOST_FILESYSTEM_DEPRECATED |
| |
| #include <boost/filesystem.hpp> |
| #include <boost/detail/lightweight_test.hpp> |
| |
| namespace fs = boost::filesystem; |
| using boost::filesystem::path; |
| |
| #define PATH_CHECK(a, b) check(a, b, __LINE__) |
| |
| namespace |
| { |
| std::string platform(BOOST_PLATFORM); |
| |
| void check(const fs::path & source, |
| const std::string & expected, int line) |
| { |
| if (source.generic_string()== expected) return; |
| |
| ++::boost::detail::test_errors(); |
| |
| std::cout << '(' << line << ") source.string(): \"" << source.string() |
| << "\" != expected: \"" << expected |
| << "\"" << std::endl; |
| } |
| |
| void normalize_test() |
| { |
| PATH_CHECK(path("").normalize(), ""); |
| PATH_CHECK(path("/").normalize(), "/"); |
| PATH_CHECK(path("//").normalize(), "//"); |
| PATH_CHECK(path("///").normalize(), "/"); |
| PATH_CHECK(path("f").normalize(), "f"); |
| PATH_CHECK(path("foo").normalize(), "foo"); |
| PATH_CHECK(path("foo/").normalize(), "foo/."); |
| PATH_CHECK(path("f/").normalize(), "f/."); |
| PATH_CHECK(path("/foo").normalize(), "/foo"); |
| PATH_CHECK(path("foo/bar").normalize(), "foo/bar"); |
| PATH_CHECK(path("..").normalize(), ".."); |
| PATH_CHECK(path("../..").normalize(), "../.."); |
| PATH_CHECK(path("/..").normalize(), "/.."); |
| PATH_CHECK(path("/../..").normalize(), "/../.."); |
| PATH_CHECK(path("../foo").normalize(), "../foo"); |
| PATH_CHECK(path("foo/..").normalize(), "."); |
| PATH_CHECK(path("foo/../").normalize(), "./."); |
| PATH_CHECK((path("foo") / "..").normalize() , "."); |
| PATH_CHECK(path("foo/...").normalize(), "foo/..."); |
| PATH_CHECK(path("foo/.../").normalize(), "foo/.../."); |
| PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar"); |
| PATH_CHECK(path("../f").normalize(), "../f"); |
| PATH_CHECK(path("/../f").normalize(), "/../f"); |
| PATH_CHECK(path("f/..").normalize(), "."); |
| PATH_CHECK((path("f") / "..").normalize() , "."); |
| PATH_CHECK(path("foo/../..").normalize(), ".."); |
| PATH_CHECK(path("foo/../../").normalize(), "../."); |
| PATH_CHECK(path("foo/../../..").normalize(), "../.."); |
| PATH_CHECK(path("foo/../../../").normalize(), "../../."); |
| PATH_CHECK(path("foo/../bar").normalize(), "bar"); |
| PATH_CHECK(path("foo/../bar/").normalize(), "bar/."); |
| PATH_CHECK(path("foo/bar/..").normalize(), "foo"); |
| PATH_CHECK(path("foo/bar/../").normalize(), "foo/."); |
| PATH_CHECK(path("foo/bar/../..").normalize(), "."); |
| PATH_CHECK(path("foo/bar/../../").normalize(), "./."); |
| PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah"); |
| PATH_CHECK(path("f/../b").normalize(), "b"); |
| PATH_CHECK(path("f/b/..").normalize(), "f"); |
| PATH_CHECK(path("f/b/../").normalize(), "f/."); |
| PATH_CHECK(path("f/b/../a").normalize(), "f/a"); |
| PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo"); |
| PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch"); |
| PATH_CHECK(path("//net").normalize(), "//net"); |
| PATH_CHECK(path("//net/").normalize(), "//net/"); |
| PATH_CHECK(path("//..net").normalize(), "//..net"); |
| PATH_CHECK(path("//net/..").normalize(), "//net/.."); |
| PATH_CHECK(path("//net/foo").normalize(), "//net/foo"); |
| PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/."); |
| PATH_CHECK(path("//net/foo/..").normalize(), "//net/"); |
| PATH_CHECK(path("//net/foo/../").normalize(), "//net/."); |
| |
| PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar"); |
| PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/."); |
| PATH_CHECK(path("/net/foo/..").normalize(), "/net"); |
| PATH_CHECK(path("/net/foo/../").normalize(), "/net/."); |
| |
| PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar"); |
| PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/."); |
| PATH_CHECK(path("//net//foo//..").normalize(), "//net/"); |
| PATH_CHECK(path("//net//foo//..//").normalize(), "//net/."); |
| |
| PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar"); |
| PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/."); |
| PATH_CHECK(path("///net///foo///..").normalize(), "/net"); |
| PATH_CHECK(path("///net///foo///..///").normalize(), "/net/."); |
| |
| if (platform == "Windows") |
| { |
| PATH_CHECK(path("c:..").normalize(), "c:.."); |
| PATH_CHECK(path("c:foo/..").normalize(), "c:"); |
| |
| PATH_CHECK(path("c:foo/../").normalize(), "c:."); |
| |
| PATH_CHECK(path("c:/foo/..").normalize(), "c:/"); |
| PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); |
| PATH_CHECK(path("c:/..").normalize(), "c:/.."); |
| PATH_CHECK(path("c:/../").normalize(), "c:/../."); |
| PATH_CHECK(path("c:/../..").normalize(), "c:/../.."); |
| PATH_CHECK(path("c:/../../").normalize(), "c:/../../."); |
| PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo"); |
| PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/."); |
| PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo"); |
| PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/."); |
| PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); |
| } |
| else // POSIX |
| { |
| PATH_CHECK(path("c:..").normalize(), "c:.."); |
| PATH_CHECK(path("c:foo/..").normalize(), "."); |
| PATH_CHECK(path("c:foo/../").normalize(), "./."); |
| PATH_CHECK(path("c:/foo/..").normalize(), "c:"); |
| PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); |
| PATH_CHECK(path("c:/..").normalize(), "."); |
| PATH_CHECK(path("c:/../").normalize(), "./."); |
| PATH_CHECK(path("c:/../..").normalize(), ".."); |
| PATH_CHECK(path("c:/../../").normalize(), "../."); |
| PATH_CHECK(path("c:/../foo").normalize(), "foo"); |
| PATH_CHECK(path("c:/../foo/").normalize(), "foo/."); |
| PATH_CHECK(path("c:/../../foo").normalize(), "../foo"); |
| PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/."); |
| PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); |
| } |
| } |
| |
| // Compile-only tests not intended to be executed -----------------------------------// |
| |
| void compile_only() |
| { |
| fs::path p; |
| |
| fs::initial_path<fs::path>(); |
| fs::initial_path<fs::wpath>(); |
| |
| p.file_string(); |
| p.directory_string(); |
| } |
| |
| // path_rename_test -----------------------------------------------------------------// |
| |
| void path_rename_test() |
| { |
| fs::path p("foo/bar/blah"); |
| |
| BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar"); |
| BOOST_TEST_EQ(p.leaf(), "blah"); |
| BOOST_TEST_EQ(p.branch_path(), "foo/bar"); |
| BOOST_TEST(p.has_leaf()); |
| BOOST_TEST(p.has_branch_path()); |
| BOOST_TEST(!p.is_complete()); |
| |
| if (platform == "Windows") |
| { |
| BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar"); |
| p = "foo\\bar\\blah"; |
| BOOST_TEST_EQ(p.branch_path(), "foo\\bar"); |
| } |
| } |
| |
| } // unnamed namespace |
| |
| |
| //--------------------------------------------------------------------------------------// |
| |
| int main(int /*argc*/, char* /*argv*/[]) |
| { |
| // The choice of platform is make at runtime rather than compile-time |
| // so that compile errors for all platforms will be detected even though |
| // only the current platform is runtime tested. |
| platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin") |
| ? "Windows" |
| : "POSIX"; |
| std::cout << "Platform is " << platform << '\n'; |
| |
| BOOST_TEST(fs::initial_path() == fs::current_path()); |
| |
| //path::default_name_check(fs::no_check); |
| |
| fs::directory_entry de("foo/bar"); |
| |
| de.replace_leaf("", fs::file_status(), fs::file_status()); |
| |
| //de.leaf(); |
| //de.string(); |
| |
| fs::path ng(" no-way, Jose"); |
| BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works |
| BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory")); |
| |
| path_rename_test(); |
| normalize_test(); |
| |
| // extension() tests ---------------------------------------------------------// |
| |
| BOOST_TEST(fs::extension("a/b") == ""); |
| BOOST_TEST(fs::extension("a/b.txt") == ".txt"); |
| BOOST_TEST(fs::extension("a/b.") == "."); |
| BOOST_TEST(fs::extension("a.b.c") == ".c"); |
| BOOST_TEST(fs::extension("a.b.c.") == "."); |
| BOOST_TEST(fs::extension("") == ""); |
| BOOST_TEST(fs::extension("a/") == ""); |
| |
| // basename() tests ----------------------------------------------------------// |
| |
| BOOST_TEST(fs::basename("b") == "b"); |
| BOOST_TEST(fs::basename("a/b.txt") == "b"); |
| BOOST_TEST(fs::basename("a/b.") == "b"); |
| BOOST_TEST(fs::basename("a.b.c") == "a.b"); |
| BOOST_TEST(fs::basename("a.b.c.") == "a.b.c"); |
| BOOST_TEST(fs::basename("") == ""); |
| |
| // change_extension tests ---------------------------------------------------// |
| |
| BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex"); |
| BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex"); |
| BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt"); |
| BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex"); |
| // see the rationale in html docs for explanation why this works |
| BOOST_TEST(fs::change_extension("", ".png").string() == ".png"); |
| |
| return ::boost::report_errors(); |
| } |