]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/filesystem/test/deprecated_test.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / filesystem / test / deprecated_test.cpp
1 // deprecated_test program --------------------------------------------------//
2
3 // Copyright Beman Dawes 2002
4 // Copyright Vladimir Prus 2002
5
6 // Distributed under the Boost Software License, Version 1.0.
7 // See http://www.boost.org/LICENSE_1_0.txt
8
9 // Library home page: http://www.boost.org/libs/filesystem
10
11 // This test verifies that various deprecated names still work. This is
12 // important to preserve existing code that uses the old names.
13
14 #define BOOST_FILESYSTEM_DEPRECATED
15
16 #include <boost/filesystem.hpp>
17 #include <boost/filesystem/string_file.hpp>
18
19 #include <boost/core/lightweight_test.hpp>
20 #include <boost/detail/lightweight_main.hpp>
21
22 namespace fs = boost::filesystem;
23 using boost::filesystem::path;
24
25 #define PATH_CHECK(a, b) check(a, b, __LINE__)
26
27 namespace {
28 std::string platform(BOOST_PLATFORM);
29
30 void check(const fs::path& source, const std::string& expected, int line)
31 {
32 if (source.generic_string() == expected)
33 return;
34
35 ++::boost::detail::test_errors();
36
37 std::cout << '(' << line << ") source.string(): \"" << source.string()
38 << "\" != expected: \"" << expected
39 << "\"" << std::endl;
40 }
41
42 void normalize_test()
43 {
44 PATH_CHECK(path("").normalize(), "");
45 PATH_CHECK(path("/").normalize(), "/");
46 PATH_CHECK(path("//").normalize(), "//");
47 PATH_CHECK(path("///").normalize(), "/");
48 PATH_CHECK(path("f").normalize(), "f");
49 PATH_CHECK(path("foo").normalize(), "foo");
50 PATH_CHECK(path("foo/").normalize(), "foo/.");
51 PATH_CHECK(path("f/").normalize(), "f/.");
52 PATH_CHECK(path("/foo").normalize(), "/foo");
53 PATH_CHECK(path("foo/bar").normalize(), "foo/bar");
54 PATH_CHECK(path("..").normalize(), "..");
55 PATH_CHECK(path("../..").normalize(), "../..");
56 PATH_CHECK(path("/..").normalize(), "/..");
57 PATH_CHECK(path("/../..").normalize(), "/../..");
58 PATH_CHECK(path("../foo").normalize(), "../foo");
59 PATH_CHECK(path("foo/..").normalize(), ".");
60 PATH_CHECK(path("foo/../").normalize(), ".");
61 PATH_CHECK((path("foo") / "..").normalize(), ".");
62 PATH_CHECK(path("foo/...").normalize(), "foo/...");
63 PATH_CHECK(path("foo/.../").normalize(), "foo/.../.");
64 PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar");
65 PATH_CHECK(path("../f").normalize(), "../f");
66 PATH_CHECK(path("/../f").normalize(), "/../f");
67 PATH_CHECK(path("f/..").normalize(), ".");
68 PATH_CHECK((path("f") / "..").normalize(), ".");
69 PATH_CHECK(path("foo/../..").normalize(), "..");
70 PATH_CHECK(path("foo/../../").normalize(), "../.");
71 PATH_CHECK(path("foo/../../..").normalize(), "../..");
72 PATH_CHECK(path("foo/../../../").normalize(), "../../.");
73 PATH_CHECK(path("foo/../bar").normalize(), "bar");
74 PATH_CHECK(path("foo/../bar/").normalize(), "bar/.");
75 PATH_CHECK(path("foo/bar/..").normalize(), "foo");
76 PATH_CHECK(path("foo/bar/../").normalize(), "foo/.");
77 PATH_CHECK(path("foo/bar/../..").normalize(), ".");
78 PATH_CHECK(path("foo/bar/../../").normalize(), ".");
79 PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah");
80 PATH_CHECK(path("f/../b").normalize(), "b");
81 PATH_CHECK(path("f/b/..").normalize(), "f");
82 PATH_CHECK(path("f/b/../").normalize(), "f/.");
83 PATH_CHECK(path("f/b/../a").normalize(), "f/a");
84 PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo");
85 PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch");
86 PATH_CHECK(path("//net").normalize(), "//net");
87 PATH_CHECK(path("//net/").normalize(), "//net/");
88 PATH_CHECK(path("//..net").normalize(), "//..net");
89 PATH_CHECK(path("//net/..").normalize(), "//net/..");
90 PATH_CHECK(path("//net/foo").normalize(), "//net/foo");
91 PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/.");
92 PATH_CHECK(path("//net/foo/..").normalize(), "//net/");
93 PATH_CHECK(path("//net/foo/../").normalize(), "//net/.");
94
95 PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar");
96 PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/.");
97 PATH_CHECK(path("/net/foo/..").normalize(), "/net");
98 PATH_CHECK(path("/net/foo/../").normalize(), "/net/.");
99
100 PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar");
101 PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/.");
102 PATH_CHECK(path("//net//foo//..").normalize(), "//net/");
103 PATH_CHECK(path("//net//foo//..//").normalize(), "//net/.");
104
105 PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar");
106 PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/.");
107 PATH_CHECK(path("///net///foo///..").normalize(), "/net");
108 PATH_CHECK(path("///net///foo///..///").normalize(), "/net/.");
109
110 if (platform == "Windows")
111 {
112 PATH_CHECK(path("c:..").normalize(), "c:..");
113 PATH_CHECK(path("c:foo/..").normalize(), "c:");
114
115 PATH_CHECK(path("c:foo/../").normalize(), "c:.");
116
117 PATH_CHECK(path("c:/foo/..").normalize(), "c:/");
118 PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
119 PATH_CHECK(path("c:/..").normalize(), "c:/..");
120 PATH_CHECK(path("c:/../").normalize(), "c:/../.");
121 PATH_CHECK(path("c:/../..").normalize(), "c:/../..");
122 PATH_CHECK(path("c:/../../").normalize(), "c:/../../.");
123 PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo");
124 PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/.");
125 PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo");
126 PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/.");
127 PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
128 }
129 else // POSIX
130 {
131 PATH_CHECK(path("c:..").normalize(), "c:..");
132 PATH_CHECK(path("c:foo/..").normalize(), ".");
133 PATH_CHECK(path("c:foo/../").normalize(), ".");
134 PATH_CHECK(path("c:/foo/..").normalize(), "c:");
135 PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
136 PATH_CHECK(path("c:/..").normalize(), ".");
137 PATH_CHECK(path("c:/../").normalize(), ".");
138 PATH_CHECK(path("c:/../..").normalize(), "..");
139 PATH_CHECK(path("c:/../../").normalize(), "../.");
140 PATH_CHECK(path("c:/../foo").normalize(), "foo");
141 PATH_CHECK(path("c:/../foo/").normalize(), "foo/.");
142 PATH_CHECK(path("c:/../../foo").normalize(), "../foo");
143 PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/.");
144 PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
145 }
146 }
147
148 // misc_test ------------------------------------------------------------------------//
149
150 void misc_test()
151 {
152 fs::path p;
153
154 fs::initial_path< fs::path >();
155 fs::initial_path< fs::wpath >();
156
157 p.file_string();
158 p.directory_string();
159 }
160
161 // path_rename_test -----------------------------------------------------------------//
162
163 void path_rename_test()
164 {
165 fs::path p("foo/bar/blah");
166
167 BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar");
168 BOOST_TEST_EQ(p.leaf(), "blah");
169 BOOST_TEST_EQ(p.branch_path(), "foo/bar");
170 BOOST_TEST(p.has_leaf());
171 BOOST_TEST(p.has_branch_path());
172 BOOST_TEST(!p.is_complete());
173
174 if (platform == "Windows")
175 {
176 BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar");
177 p = "foo\\bar\\blah";
178 BOOST_TEST_EQ(p.branch_path(), "foo\\bar");
179 }
180 }
181
182 // string_file_tests ---------------------------------------------------------------//
183
184 void string_file_tests(const fs::path& temp_dir)
185 {
186 std::cout << "string_file_tests..." << std::endl;
187 std::string contents("0123456789");
188 fs::path p(temp_dir / "string_file");
189 save_string_file(p, contents);
190 save_string_file(p, contents);
191 BOOST_TEST_EQ(file_size(p), 10u);
192 std::string round_trip;
193 load_string_file(p, round_trip);
194 BOOST_TEST_EQ(contents, round_trip);
195 }
196
197 } // unnamed namespace
198
199 //--------------------------------------------------------------------------------------//
200
201 int cpp_main(int /*argc*/, char* /*argv*/[])
202 {
203 // The choice of platform is make at runtime rather than compile-time
204 // so that compile errors for all platforms will be detected even though
205 // only the current platform is runtime tested.
206 platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin") ? "Windows" : "POSIX";
207 std::cout << "Platform is " << platform << '\n';
208
209 BOOST_TEST(fs::initial_path() == fs::current_path());
210
211 //path::default_name_check(fs::no_check);
212
213 fs::directory_entry de("foo/bar");
214
215 de.replace_leaf("", fs::file_status(), fs::file_status());
216
217 //de.leaf();
218 //de.string();
219
220 fs::path ng(" no-way, Jose");
221 BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works
222 BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
223
224 const fs::path temp_dir(fs::current_path() / ".." / fs::unique_path("deprecated_test-%%%%-%%%%-%%%%"));
225 std::cout << "temp_dir is " << temp_dir.string() << std::endl;
226
227 fs::create_directory(temp_dir);
228
229 misc_test();
230 path_rename_test();
231 normalize_test();
232 string_file_tests(temp_dir);
233
234 BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar"));
235
236 // extension() tests ---------------------------------------------------------//
237
238 BOOST_TEST(fs::extension("a/b") == "");
239 BOOST_TEST(fs::extension("a/b.txt") == ".txt");
240 BOOST_TEST(fs::extension("a/b.") == ".");
241 BOOST_TEST(fs::extension("a.b.c") == ".c");
242 BOOST_TEST(fs::extension("a.b.c.") == ".");
243 BOOST_TEST(fs::extension("") == "");
244 BOOST_TEST(fs::extension("a/") == "");
245
246 // basename() tests ----------------------------------------------------------//
247
248 BOOST_TEST(fs::basename("b") == "b");
249 BOOST_TEST(fs::basename("a/b.txt") == "b");
250 BOOST_TEST(fs::basename("a/b.") == "b");
251 BOOST_TEST(fs::basename("a.b.c") == "a.b");
252 BOOST_TEST(fs::basename("a.b.c.") == "a.b.c");
253 BOOST_TEST(fs::basename("") == "");
254
255 // change_extension tests ---------------------------------------------------//
256
257 BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex");
258 BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex");
259 BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt");
260 BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex");
261 // see the rationale in html docs for explanation why this works
262 BOOST_TEST(fs::change_extension("", ".png").string() == ".png");
263
264 std::cout << "post-test removal of " << temp_dir << std::endl;
265 BOOST_TEST(fs::remove_all(temp_dir) != 0);
266
267 return ::boost::report_errors();
268 }