#define BOOST_FILESYSTEM_DEPRECATED
#include <boost/filesystem.hpp>
-
-#include <boost/config.hpp>
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
+#include <boost/filesystem/string_file.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/detail/lightweight_main.hpp>
#define PATH_CHECK(a, b) check(a, b, __LINE__)
-namespace
-{
- std::string platform(BOOST_PLATFORM);
+namespace {
+std::string platform(BOOST_PLATFORM);
- void check(const fs::path & source,
- const std::string & expected, int line)
- {
- if (source.generic_string()== expected) return;
+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()
- {
+void normalize_test()
+{
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(), ".");
+ 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("f") / "..").normalize(), ".");
PATH_CHECK(path("foo/../..").normalize(), "..");
PATH_CHECK(path("foo/../../").normalize(), "../.");
PATH_CHECK(path("foo/../../..").normalize(), "../..");
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/../../").normalize(), ".");
PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah");
PATH_CHECK(path("f/../b").normalize(), "b");
PATH_CHECK(path("f/b/..").normalize(), "f");
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");
+ 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");
+ 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");
}
- }
+}
- // misc_test ------------------------------------------------------------------------//
+// misc_test ------------------------------------------------------------------------//
- void misc_test()
- {
+void misc_test()
+{
fs::path p;
- fs::initial_path<fs::path>();
- fs::initial_path<fs::wpath>();
+ fs::initial_path< fs::path >();
+ fs::initial_path< fs::wpath >();
p.file_string();
p.directory_string();
- }
+}
- // path_rename_test -----------------------------------------------------------------//
+// path_rename_test -----------------------------------------------------------------//
- void path_rename_test()
- {
+void path_rename_test()
+{
fs::path p("foo/bar/blah");
BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar");
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");
+ 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
+// string_file_tests ---------------------------------------------------------------//
+void string_file_tests(const fs::path& temp_dir)
+{
+ std::cout << "string_file_tests..." << std::endl;
+ std::string contents("0123456789");
+ fs::path p(temp_dir / "string_file");
+ save_string_file(p, contents);
+ save_string_file(p, contents);
+ BOOST_TEST_EQ(file_size(p), 10u);
+ std::string round_trip;
+ load_string_file(p, round_trip);
+ BOOST_TEST_EQ(contents, round_trip);
+}
+
+} // unnamed namespace
//--------------------------------------------------------------------------------------//
int cpp_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';
+ // 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());
- BOOST_TEST(fs::initial_path() == fs::current_path());
+ //de.leaf();
+ //de.string();
- //path::default_name_check(fs::no_check);
+ fs::path ng(" no-way, Jose");
+ BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works
+ BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
- fs::directory_entry de("foo/bar");
+ const fs::path temp_dir(fs::current_path() / ".." / fs::unique_path("deprecated_test-%%%%-%%%%-%%%%"));
+ std::cout << "temp_dir is " << temp_dir.string() << std::endl;
- de.replace_leaf("", fs::file_status(), fs::file_status());
+ fs::create_directory(temp_dir);
- //de.leaf();
- //de.string();
+ misc_test();
+ path_rename_test();
+ normalize_test();
+ string_file_tests(temp_dir);
- fs::path ng(" no-way, Jose");
- BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works
- BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
+ BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar"));
- misc_test();
- path_rename_test();
- normalize_test();
- BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar"));
+ // extension() tests ---------------------------------------------------------//
-// 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/") == "");
- 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 ----------------------------------------------------------//
-// 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("") == "");
- 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 ---------------------------------------------------//
-// 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");
- 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");
+ std::cout << "post-test removal of " << temp_dir << std::endl;
+ BOOST_TEST(fs::remove_all(temp_dir) != 0);
- return ::boost::report_errors();
+ return ::boost::report_errors();
}