]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | ||
18 | #include <boost/config.hpp> | |
19 | # if defined( BOOST_NO_STD_WSTRING ) | |
20 | # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support | |
21 | # endif | |
22 | ||
23 | #include <boost/detail/lightweight_test.hpp> | |
24 | #include <boost/detail/lightweight_main.hpp> | |
25 | ||
26 | namespace fs = boost::filesystem; | |
27 | using boost::filesystem::path; | |
28 | ||
29 | #define PATH_CHECK(a, b) check(a, b, __LINE__) | |
30 | ||
31 | namespace | |
32 | { | |
33 | std::string platform(BOOST_PLATFORM); | |
34 | ||
35 | void check(const fs::path & source, | |
36 | const std::string & expected, int line) | |
37 | { | |
38 | if (source.generic_string()== expected) return; | |
39 | ||
40 | ++::boost::detail::test_errors(); | |
41 | ||
42 | std::cout << '(' << line << ") source.string(): \"" << source.string() | |
43 | << "\" != expected: \"" << expected | |
44 | << "\"" << std::endl; | |
45 | } | |
46 | ||
47 | void normalize_test() | |
48 | { | |
49 | PATH_CHECK(path("").normalize(), ""); | |
50 | PATH_CHECK(path("/").normalize(), "/"); | |
51 | PATH_CHECK(path("//").normalize(), "//"); | |
52 | PATH_CHECK(path("///").normalize(), "/"); | |
53 | PATH_CHECK(path("f").normalize(), "f"); | |
54 | PATH_CHECK(path("foo").normalize(), "foo"); | |
55 | PATH_CHECK(path("foo/").normalize(), "foo/."); | |
56 | PATH_CHECK(path("f/").normalize(), "f/."); | |
57 | PATH_CHECK(path("/foo").normalize(), "/foo"); | |
58 | PATH_CHECK(path("foo/bar").normalize(), "foo/bar"); | |
59 | PATH_CHECK(path("..").normalize(), ".."); | |
60 | PATH_CHECK(path("../..").normalize(), "../.."); | |
61 | PATH_CHECK(path("/..").normalize(), "/.."); | |
62 | PATH_CHECK(path("/../..").normalize(), "/../.."); | |
63 | PATH_CHECK(path("../foo").normalize(), "../foo"); | |
64 | PATH_CHECK(path("foo/..").normalize(), "."); | |
65 | PATH_CHECK(path("foo/../").normalize(), "./."); | |
66 | PATH_CHECK((path("foo") / "..").normalize() , "."); | |
67 | PATH_CHECK(path("foo/...").normalize(), "foo/..."); | |
68 | PATH_CHECK(path("foo/.../").normalize(), "foo/.../."); | |
69 | PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar"); | |
70 | PATH_CHECK(path("../f").normalize(), "../f"); | |
71 | PATH_CHECK(path("/../f").normalize(), "/../f"); | |
72 | PATH_CHECK(path("f/..").normalize(), "."); | |
73 | PATH_CHECK((path("f") / "..").normalize() , "."); | |
74 | PATH_CHECK(path("foo/../..").normalize(), ".."); | |
75 | PATH_CHECK(path("foo/../../").normalize(), "../."); | |
76 | PATH_CHECK(path("foo/../../..").normalize(), "../.."); | |
77 | PATH_CHECK(path("foo/../../../").normalize(), "../../."); | |
78 | PATH_CHECK(path("foo/../bar").normalize(), "bar"); | |
79 | PATH_CHECK(path("foo/../bar/").normalize(), "bar/."); | |
80 | PATH_CHECK(path("foo/bar/..").normalize(), "foo"); | |
81 | PATH_CHECK(path("foo/bar/../").normalize(), "foo/."); | |
82 | PATH_CHECK(path("foo/bar/../..").normalize(), "."); | |
83 | PATH_CHECK(path("foo/bar/../../").normalize(), "./."); | |
84 | PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah"); | |
85 | PATH_CHECK(path("f/../b").normalize(), "b"); | |
86 | PATH_CHECK(path("f/b/..").normalize(), "f"); | |
87 | PATH_CHECK(path("f/b/../").normalize(), "f/."); | |
88 | PATH_CHECK(path("f/b/../a").normalize(), "f/a"); | |
89 | PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo"); | |
90 | PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch"); | |
91 | PATH_CHECK(path("//net").normalize(), "//net"); | |
92 | PATH_CHECK(path("//net/").normalize(), "//net/"); | |
93 | PATH_CHECK(path("//..net").normalize(), "//..net"); | |
94 | PATH_CHECK(path("//net/..").normalize(), "//net/.."); | |
95 | PATH_CHECK(path("//net/foo").normalize(), "//net/foo"); | |
96 | PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/."); | |
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 | PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar"); | |
111 | PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/."); | |
112 | PATH_CHECK(path("///net///foo///..").normalize(), "/net"); | |
113 | PATH_CHECK(path("///net///foo///..///").normalize(), "/net/."); | |
114 | ||
115 | if (platform == "Windows") | |
116 | { | |
117 | PATH_CHECK(path("c:..").normalize(), "c:.."); | |
118 | PATH_CHECK(path("c:foo/..").normalize(), "c:"); | |
119 | ||
120 | PATH_CHECK(path("c:foo/../").normalize(), "c:."); | |
121 | ||
122 | PATH_CHECK(path("c:/foo/..").normalize(), "c:/"); | |
123 | PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); | |
124 | PATH_CHECK(path("c:/..").normalize(), "c:/.."); | |
125 | PATH_CHECK(path("c:/../").normalize(), "c:/../."); | |
126 | PATH_CHECK(path("c:/../..").normalize(), "c:/../.."); | |
127 | PATH_CHECK(path("c:/../../").normalize(), "c:/../../."); | |
128 | PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo"); | |
129 | PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/."); | |
130 | PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo"); | |
131 | PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/."); | |
132 | PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); | |
133 | } | |
134 | else // POSIX | |
135 | { | |
136 | PATH_CHECK(path("c:..").normalize(), "c:.."); | |
137 | PATH_CHECK(path("c:foo/..").normalize(), "."); | |
138 | PATH_CHECK(path("c:foo/../").normalize(), "./."); | |
139 | PATH_CHECK(path("c:/foo/..").normalize(), "c:"); | |
140 | PATH_CHECK(path("c:/foo/../").normalize(), "c:/."); | |
141 | PATH_CHECK(path("c:/..").normalize(), "."); | |
142 | PATH_CHECK(path("c:/../").normalize(), "./."); | |
143 | PATH_CHECK(path("c:/../..").normalize(), ".."); | |
144 | PATH_CHECK(path("c:/../../").normalize(), "../."); | |
145 | PATH_CHECK(path("c:/../foo").normalize(), "foo"); | |
146 | PATH_CHECK(path("c:/../foo/").normalize(), "foo/."); | |
147 | PATH_CHECK(path("c:/../../foo").normalize(), "../foo"); | |
148 | PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/."); | |
149 | PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo"); | |
150 | } | |
151 | } | |
152 | ||
153 | // misc_test ------------------------------------------------------------------------// | |
154 | ||
155 | void misc_test() | |
156 | { | |
157 | fs::path p; | |
158 | ||
159 | fs::initial_path<fs::path>(); | |
160 | fs::initial_path<fs::wpath>(); | |
161 | ||
162 | p.file_string(); | |
163 | p.directory_string(); | |
164 | } | |
165 | ||
166 | // path_rename_test -----------------------------------------------------------------// | |
167 | ||
168 | void path_rename_test() | |
169 | { | |
170 | fs::path p("foo/bar/blah"); | |
171 | ||
172 | BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar"); | |
173 | BOOST_TEST_EQ(p.leaf(), "blah"); | |
174 | BOOST_TEST_EQ(p.branch_path(), "foo/bar"); | |
175 | BOOST_TEST(p.has_leaf()); | |
176 | BOOST_TEST(p.has_branch_path()); | |
177 | BOOST_TEST(!p.is_complete()); | |
178 | ||
179 | if (platform == "Windows") | |
180 | { | |
181 | BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar"); | |
182 | p = "foo\\bar\\blah"; | |
183 | BOOST_TEST_EQ(p.branch_path(), "foo\\bar"); | |
184 | } | |
185 | } | |
186 | ||
187 | } // unnamed namespace | |
188 | ||
189 | ||
190 | //--------------------------------------------------------------------------------------// | |
191 | ||
192 | int cpp_main(int /*argc*/, char* /*argv*/[]) | |
193 | { | |
194 | // The choice of platform is make at runtime rather than compile-time | |
195 | // so that compile errors for all platforms will be detected even though | |
196 | // only the current platform is runtime tested. | |
197 | platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin") | |
198 | ? "Windows" | |
199 | : "POSIX"; | |
200 | std::cout << "Platform is " << platform << '\n'; | |
201 | ||
202 | BOOST_TEST(fs::initial_path() == fs::current_path()); | |
203 | ||
204 | //path::default_name_check(fs::no_check); | |
205 | ||
206 | fs::directory_entry de("foo/bar"); | |
207 | ||
208 | de.replace_leaf("", fs::file_status(), fs::file_status()); | |
209 | ||
210 | //de.leaf(); | |
211 | //de.string(); | |
212 | ||
213 | fs::path ng(" no-way, Jose"); | |
214 | BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works | |
215 | BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory")); | |
216 | ||
217 | misc_test(); | |
218 | path_rename_test(); | |
219 | normalize_test(); | |
b32b8144 | 220 | BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar")); |
7c673cae FG |
221 | |
222 | // extension() tests ---------------------------------------------------------// | |
223 | ||
224 | BOOST_TEST(fs::extension("a/b") == ""); | |
225 | BOOST_TEST(fs::extension("a/b.txt") == ".txt"); | |
226 | BOOST_TEST(fs::extension("a/b.") == "."); | |
227 | BOOST_TEST(fs::extension("a.b.c") == ".c"); | |
228 | BOOST_TEST(fs::extension("a.b.c.") == "."); | |
229 | BOOST_TEST(fs::extension("") == ""); | |
230 | BOOST_TEST(fs::extension("a/") == ""); | |
231 | ||
232 | // basename() tests ----------------------------------------------------------// | |
233 | ||
234 | BOOST_TEST(fs::basename("b") == "b"); | |
235 | BOOST_TEST(fs::basename("a/b.txt") == "b"); | |
236 | BOOST_TEST(fs::basename("a/b.") == "b"); | |
237 | BOOST_TEST(fs::basename("a.b.c") == "a.b"); | |
238 | BOOST_TEST(fs::basename("a.b.c.") == "a.b.c"); | |
239 | BOOST_TEST(fs::basename("") == ""); | |
240 | ||
241 | // change_extension tests ---------------------------------------------------// | |
242 | ||
243 | BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex"); | |
244 | BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex"); | |
245 | BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt"); | |
246 | BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex"); | |
247 | // see the rationale in html docs for explanation why this works | |
248 | BOOST_TEST(fs::change_extension("", ".png").string() == ".png"); | |
249 | ||
250 | return ::boost::report_errors(); | |
251 | } |