deprecated_test.cpp 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. // deprecated_test program --------------------------------------------------//
  2. // Copyright Beman Dawes 2002
  3. // Copyright Vladimir Prus 2002
  4. // Distributed under the Boost Software License, Version 1.0.
  5. // See http://www.boost.org/LICENSE_1_0.txt
  6. // Library home page: http://www.boost.org/libs/filesystem
  7. // This test verifies that various deprecated names still work. This is
  8. // important to preserve existing code that uses the old names.
  9. #define BOOST_FILESYSTEM_DEPRECATED
  10. #include <boost/filesystem.hpp>
  11. #include <boost/config.hpp>
  12. # if defined( BOOST_NO_STD_WSTRING )
  13. # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
  14. # endif
  15. #include <boost/detail/lightweight_test.hpp>
  16. #include <boost/detail/lightweight_main.hpp>
  17. namespace fs = boost::filesystem;
  18. using boost::filesystem::path;
  19. #define PATH_CHECK(a, b) check(a, b, __LINE__)
  20. namespace
  21. {
  22. std::string platform(BOOST_PLATFORM);
  23. void check(const fs::path & source,
  24. const std::string & expected, int line)
  25. {
  26. if (source.generic_string()== expected) return;
  27. ++::boost::detail::test_errors();
  28. std::cout << '(' << line << ") source.string(): \"" << source.string()
  29. << "\" != expected: \"" << expected
  30. << "\"" << std::endl;
  31. }
  32. void normalize_test()
  33. {
  34. PATH_CHECK(path("").normalize(), "");
  35. PATH_CHECK(path("/").normalize(), "/");
  36. PATH_CHECK(path("//").normalize(), "//");
  37. PATH_CHECK(path("///").normalize(), "/");
  38. PATH_CHECK(path("f").normalize(), "f");
  39. PATH_CHECK(path("foo").normalize(), "foo");
  40. PATH_CHECK(path("foo/").normalize(), "foo/.");
  41. PATH_CHECK(path("f/").normalize(), "f/.");
  42. PATH_CHECK(path("/foo").normalize(), "/foo");
  43. PATH_CHECK(path("foo/bar").normalize(), "foo/bar");
  44. PATH_CHECK(path("..").normalize(), "..");
  45. PATH_CHECK(path("../..").normalize(), "../..");
  46. PATH_CHECK(path("/..").normalize(), "/..");
  47. PATH_CHECK(path("/../..").normalize(), "/../..");
  48. PATH_CHECK(path("../foo").normalize(), "../foo");
  49. PATH_CHECK(path("foo/..").normalize(), ".");
  50. PATH_CHECK(path("foo/../").normalize(), "./.");
  51. PATH_CHECK((path("foo") / "..").normalize() , ".");
  52. PATH_CHECK(path("foo/...").normalize(), "foo/...");
  53. PATH_CHECK(path("foo/.../").normalize(), "foo/.../.");
  54. PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar");
  55. PATH_CHECK(path("../f").normalize(), "../f");
  56. PATH_CHECK(path("/../f").normalize(), "/../f");
  57. PATH_CHECK(path("f/..").normalize(), ".");
  58. PATH_CHECK((path("f") / "..").normalize() , ".");
  59. PATH_CHECK(path("foo/../..").normalize(), "..");
  60. PATH_CHECK(path("foo/../../").normalize(), "../.");
  61. PATH_CHECK(path("foo/../../..").normalize(), "../..");
  62. PATH_CHECK(path("foo/../../../").normalize(), "../../.");
  63. PATH_CHECK(path("foo/../bar").normalize(), "bar");
  64. PATH_CHECK(path("foo/../bar/").normalize(), "bar/.");
  65. PATH_CHECK(path("foo/bar/..").normalize(), "foo");
  66. PATH_CHECK(path("foo/bar/../").normalize(), "foo/.");
  67. PATH_CHECK(path("foo/bar/../..").normalize(), ".");
  68. PATH_CHECK(path("foo/bar/../../").normalize(), "./.");
  69. PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah");
  70. PATH_CHECK(path("f/../b").normalize(), "b");
  71. PATH_CHECK(path("f/b/..").normalize(), "f");
  72. PATH_CHECK(path("f/b/../").normalize(), "f/.");
  73. PATH_CHECK(path("f/b/../a").normalize(), "f/a");
  74. PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo");
  75. PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch");
  76. PATH_CHECK(path("//net").normalize(), "//net");
  77. PATH_CHECK(path("//net/").normalize(), "//net/");
  78. PATH_CHECK(path("//..net").normalize(), "//..net");
  79. PATH_CHECK(path("//net/..").normalize(), "//net/..");
  80. PATH_CHECK(path("//net/foo").normalize(), "//net/foo");
  81. PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/.");
  82. PATH_CHECK(path("//net/foo/..").normalize(), "//net/");
  83. PATH_CHECK(path("//net/foo/../").normalize(), "//net/.");
  84. PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar");
  85. PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/.");
  86. PATH_CHECK(path("/net/foo/..").normalize(), "/net");
  87. PATH_CHECK(path("/net/foo/../").normalize(), "/net/.");
  88. PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar");
  89. PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/.");
  90. PATH_CHECK(path("//net//foo//..").normalize(), "//net/");
  91. PATH_CHECK(path("//net//foo//..//").normalize(), "//net/.");
  92. PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar");
  93. PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/.");
  94. PATH_CHECK(path("///net///foo///..").normalize(), "/net");
  95. PATH_CHECK(path("///net///foo///..///").normalize(), "/net/.");
  96. if (platform == "Windows")
  97. {
  98. PATH_CHECK(path("c:..").normalize(), "c:..");
  99. PATH_CHECK(path("c:foo/..").normalize(), "c:");
  100. PATH_CHECK(path("c:foo/../").normalize(), "c:.");
  101. PATH_CHECK(path("c:/foo/..").normalize(), "c:/");
  102. PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
  103. PATH_CHECK(path("c:/..").normalize(), "c:/..");
  104. PATH_CHECK(path("c:/../").normalize(), "c:/../.");
  105. PATH_CHECK(path("c:/../..").normalize(), "c:/../..");
  106. PATH_CHECK(path("c:/../../").normalize(), "c:/../../.");
  107. PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo");
  108. PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/.");
  109. PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo");
  110. PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/.");
  111. PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
  112. }
  113. else // POSIX
  114. {
  115. PATH_CHECK(path("c:..").normalize(), "c:..");
  116. PATH_CHECK(path("c:foo/..").normalize(), ".");
  117. PATH_CHECK(path("c:foo/../").normalize(), "./.");
  118. PATH_CHECK(path("c:/foo/..").normalize(), "c:");
  119. PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
  120. PATH_CHECK(path("c:/..").normalize(), ".");
  121. PATH_CHECK(path("c:/../").normalize(), "./.");
  122. PATH_CHECK(path("c:/../..").normalize(), "..");
  123. PATH_CHECK(path("c:/../../").normalize(), "../.");
  124. PATH_CHECK(path("c:/../foo").normalize(), "foo");
  125. PATH_CHECK(path("c:/../foo/").normalize(), "foo/.");
  126. PATH_CHECK(path("c:/../../foo").normalize(), "../foo");
  127. PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/.");
  128. PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
  129. }
  130. }
  131. // misc_test ------------------------------------------------------------------------//
  132. void misc_test()
  133. {
  134. fs::path p;
  135. fs::initial_path<fs::path>();
  136. fs::initial_path<fs::wpath>();
  137. p.file_string();
  138. p.directory_string();
  139. }
  140. // path_rename_test -----------------------------------------------------------------//
  141. void path_rename_test()
  142. {
  143. fs::path p("foo/bar/blah");
  144. BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar");
  145. BOOST_TEST_EQ(p.leaf(), "blah");
  146. BOOST_TEST_EQ(p.branch_path(), "foo/bar");
  147. BOOST_TEST(p.has_leaf());
  148. BOOST_TEST(p.has_branch_path());
  149. BOOST_TEST(!p.is_complete());
  150. if (platform == "Windows")
  151. {
  152. BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar");
  153. p = "foo\\bar\\blah";
  154. BOOST_TEST_EQ(p.branch_path(), "foo\\bar");
  155. }
  156. }
  157. } // unnamed namespace
  158. //--------------------------------------------------------------------------------------//
  159. int cpp_main(int /*argc*/, char* /*argv*/[])
  160. {
  161. // The choice of platform is make at runtime rather than compile-time
  162. // so that compile errors for all platforms will be detected even though
  163. // only the current platform is runtime tested.
  164. platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
  165. ? "Windows"
  166. : "POSIX";
  167. std::cout << "Platform is " << platform << '\n';
  168. BOOST_TEST(fs::initial_path() == fs::current_path());
  169. //path::default_name_check(fs::no_check);
  170. fs::directory_entry de("foo/bar");
  171. de.replace_leaf("", fs::file_status(), fs::file_status());
  172. //de.leaf();
  173. //de.string();
  174. fs::path ng(" no-way, Jose");
  175. BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works
  176. BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
  177. misc_test();
  178. path_rename_test();
  179. normalize_test();
  180. BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar"));
  181. // extension() tests ---------------------------------------------------------//
  182. BOOST_TEST(fs::extension("a/b") == "");
  183. BOOST_TEST(fs::extension("a/b.txt") == ".txt");
  184. BOOST_TEST(fs::extension("a/b.") == ".");
  185. BOOST_TEST(fs::extension("a.b.c") == ".c");
  186. BOOST_TEST(fs::extension("a.b.c.") == ".");
  187. BOOST_TEST(fs::extension("") == "");
  188. BOOST_TEST(fs::extension("a/") == "");
  189. // basename() tests ----------------------------------------------------------//
  190. BOOST_TEST(fs::basename("b") == "b");
  191. BOOST_TEST(fs::basename("a/b.txt") == "b");
  192. BOOST_TEST(fs::basename("a/b.") == "b");
  193. BOOST_TEST(fs::basename("a.b.c") == "a.b");
  194. BOOST_TEST(fs::basename("a.b.c.") == "a.b.c");
  195. BOOST_TEST(fs::basename("") == "");
  196. // change_extension tests ---------------------------------------------------//
  197. BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex");
  198. BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex");
  199. BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt");
  200. BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex");
  201. // see the rationale in html docs for explanation why this works
  202. BOOST_TEST(fs::change_extension("", ".png").string() == ".png");
  203. return ::boost::report_errors();
  204. }