Release 1.39.0
[boost.git] / Boost_1_39_0 / libs / filesystem / test / deprecated_test.cpp
blob7da223542a09121f9f7236f501d25113c2b69f92
1 // deprecated_test program --------------------------------------------------//
3 // Copyright Beman Dawes 2002
4 // Copyright Vladimir Prus 2002
6 // Use, modification, and distribution is subject to the Boost Software
7 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // See library home page at http://www.boost.org/libs/filesystem
12 // This test verifies that various deprecated names still compile. This is
13 // important to preserve existing code that uses the old names.
15 #include <boost/filesystem.hpp>
16 #include <boost/detail/lightweight_test.hpp>
18 namespace fs = boost::filesystem;
19 using boost::filesystem::path;
21 #define PATH_CHECK( a, b ) check( a, b, __LINE__ )
23 namespace
25 std::string platform( BOOST_PLATFORM );
27 void check( const fs::path & source,
28 const std::string & expected, int line )
30 if ( source.string()== expected ) return;
32 ++::boost::detail::test_errors();
34 std::cout << '(' << line << ") source.string(): \"" << source.string()
35 << "\" != expected: \"" << expected
36 << "\"" << std::endl;
39 void check_normalize()
41 PATH_CHECK( path("").normalize(), "" );
42 PATH_CHECK( path("/").normalize(), "/" );
43 PATH_CHECK( path("//").normalize(), "//" );
44 PATH_CHECK( path("///").normalize(), "/" );
45 PATH_CHECK( path("f").normalize(), "f" );
46 PATH_CHECK( path("foo").normalize(), "foo" );
47 PATH_CHECK( path("foo/").normalize(), "foo/." );
48 PATH_CHECK( path("f/").normalize(), "f/." );
49 PATH_CHECK( path( "/foo" ).normalize(), "/foo" );
50 PATH_CHECK( path( "foo/bar" ).normalize(), "foo/bar" );
51 PATH_CHECK( path("..").normalize(), ".." );
52 PATH_CHECK( path("../..").normalize(), "../.." );
53 PATH_CHECK( path("/..").normalize(), "/.." );
54 PATH_CHECK( path("/../..").normalize(), "/../.." );
55 PATH_CHECK( path("../foo").normalize(), "../foo" );
56 PATH_CHECK( path("foo/..").normalize(), "." );
57 PATH_CHECK( path("foo/../").normalize(), "./." );
58 PATH_CHECK( (path("foo") / "..").normalize() , "." );
59 PATH_CHECK( path("foo/...").normalize(), "foo/..." );
60 PATH_CHECK( path("foo/.../").normalize(), "foo/.../." );
61 PATH_CHECK( path("foo/..bar").normalize(), "foo/..bar" );
62 PATH_CHECK( path("../f").normalize(), "../f" );
63 PATH_CHECK( path("/../f").normalize(), "/../f" );
64 PATH_CHECK( path("f/..").normalize(), "." );
65 PATH_CHECK( (path("f") / "..").normalize() , "." );
66 PATH_CHECK( path("foo/../..").normalize(), ".." );
67 PATH_CHECK( path("foo/../../").normalize(), "../." );
68 PATH_CHECK( path("foo/../../..").normalize(), "../.." );
69 PATH_CHECK( path("foo/../../../").normalize(), "../../." );
70 PATH_CHECK( path("foo/../bar").normalize(), "bar" );
71 PATH_CHECK( path("foo/../bar/").normalize(), "bar/." );
72 PATH_CHECK( path("foo/bar/..").normalize(), "foo" );
73 PATH_CHECK( path("foo/bar/../").normalize(), "foo/." );
74 PATH_CHECK( path("foo/bar/../..").normalize(), "." );
75 PATH_CHECK( path("foo/bar/../../").normalize(), "./." );
76 PATH_CHECK( path("foo/bar/../blah").normalize(), "foo/blah" );
77 PATH_CHECK( path("f/../b").normalize(), "b" );
78 PATH_CHECK( path("f/b/..").normalize(), "f" );
79 PATH_CHECK( path("f/b/../").normalize(), "f/." );
80 PATH_CHECK( path("f/b/../a").normalize(), "f/a" );
81 PATH_CHECK( path("foo/bar/blah/../..").normalize(), "foo" );
82 PATH_CHECK( path("foo/bar/blah/../../bletch").normalize(), "foo/bletch" );
83 PATH_CHECK( path( "//net" ).normalize(), "//net" );
84 PATH_CHECK( path( "//net/" ).normalize(), "//net/" );
85 PATH_CHECK( path( "//..net" ).normalize(), "//..net" );
86 PATH_CHECK( path( "//net/.." ).normalize(), "//net/.." );
87 PATH_CHECK( path( "//net/foo" ).normalize(), "//net/foo" );
88 PATH_CHECK( path( "//net/foo/" ).normalize(), "//net/foo/." );
89 PATH_CHECK( path( "//net/foo/.." ).normalize(), "//net/" );
90 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/." );
97 PATH_CHECK( path( "//net//foo//bar" ).normalize(), "//net/foo/bar" );
98 PATH_CHECK( path( "//net//foo//bar//" ).normalize(), "//net/foo/bar/." );
99 PATH_CHECK( path( "//net//foo//.." ).normalize(), "//net/" );
100 PATH_CHECK( path( "//net//foo//..//" ).normalize(), "//net/." );
102 PATH_CHECK( path( "///net///foo///bar" ).normalize(), "/net/foo/bar" );
103 PATH_CHECK( path( "///net///foo///bar///" ).normalize(), "/net/foo/bar/." );
104 PATH_CHECK( path( "///net///foo///.." ).normalize(), "/net" );
105 PATH_CHECK( path( "///net///foo///..///" ).normalize(), "/net/." );
107 if ( platform == "Windows" )
109 PATH_CHECK( path( "c:.." ).normalize(), "c:.." );
110 PATH_CHECK( path( "c:foo/.." ).normalize(), "c:" );
112 PATH_CHECK( path( "c:foo/../" ).normalize(), "c:." );
114 PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:/" );
115 PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." );
116 PATH_CHECK( path( "c:/.." ).normalize(), "c:/.." );
117 PATH_CHECK( path( "c:/../" ).normalize(), "c:/../." );
118 PATH_CHECK( path( "c:/../.." ).normalize(), "c:/../.." );
119 PATH_CHECK( path( "c:/../../" ).normalize(), "c:/../../." );
120 PATH_CHECK( path( "c:/../foo" ).normalize(), "c:/../foo" );
121 PATH_CHECK( path( "c:/../foo/" ).normalize(), "c:/../foo/." );
122 PATH_CHECK( path( "c:/../../foo" ).normalize(), "c:/../../foo" );
123 PATH_CHECK( path( "c:/../../foo/" ).normalize(), "c:/../../foo/." );
124 PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" );
126 else // POSIX
128 PATH_CHECK( path( "c:.." ).normalize(), "c:.." );
129 PATH_CHECK( path( "c:foo/.." ).normalize(), "." );
130 PATH_CHECK( path( "c:foo/../" ).normalize(), "./." );
131 PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:" );
132 PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." );
133 PATH_CHECK( path( "c:/.." ).normalize(), "." );
134 PATH_CHECK( path( "c:/../" ).normalize(), "./." );
135 PATH_CHECK( path( "c:/../.." ).normalize(), ".." );
136 PATH_CHECK( path( "c:/../../" ).normalize(), "../." );
137 PATH_CHECK( path( "c:/../foo" ).normalize(), "foo" );
138 PATH_CHECK( path( "c:/../foo/" ).normalize(), "foo/." );
139 PATH_CHECK( path( "c:/../../foo" ).normalize(), "../foo" );
140 PATH_CHECK( path( "c:/../../foo/" ).normalize(), "../foo/." );
141 PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" );
144 } // unnamed namespace
146 //----------------------------------------------------------------------------//
148 int main( int /*argc*/, char * /*argv*/[] )
150 // The choice of platform is make at runtime rather than compile-time
151 // so that compile errors for all platforms will be detected even though
152 // only the current platform is runtime tested.
153 platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" )
154 ? "Windows"
155 : "POSIX";
156 std::cout << "Platform is " << platform << '\n';
158 path::default_name_check( fs::no_check );
160 fs::directory_entry de( "foo/bar" );
162 de.replace_leaf( "", fs::file_status(), fs::file_status() );
164 de.leaf();
165 de.string();
167 fs::path ng( " no-way, Jose" );
168 BOOST_TEST( !fs::is_regular( ng ) ); // verify deprecated name still works
169 BOOST_TEST( !fs::symbolic_link_exists( "nosuchfileordirectory" ) );
171 check_normalize();
173 // extension() tests ---------------------------------------------------------//
175 BOOST_TEST( fs::extension("a/b") == "" );
176 BOOST_TEST( fs::extension("a/b.txt") == ".txt" );
177 BOOST_TEST( fs::extension("a/b.") == "." );
178 BOOST_TEST( fs::extension("a.b.c") == ".c" );
179 BOOST_TEST( fs::extension("a.b.c.") == "." );
180 BOOST_TEST( fs::extension("") == "" );
181 BOOST_TEST( fs::extension("a/") == "." );
183 // basename() tests ----------------------------------------------------------//
185 BOOST_TEST( fs::basename("b") == "b" );
186 BOOST_TEST( fs::basename("a/b.txt") == "b" );
187 BOOST_TEST( fs::basename("a/b.") == "b" );
188 BOOST_TEST( fs::basename("a.b.c") == "a.b" );
189 BOOST_TEST( fs::basename("a.b.c.") == "a.b.c" );
190 BOOST_TEST( fs::basename("") == "" );
192 // change_extension tests ---------------------------------------------------//
194 BOOST_TEST( fs::change_extension("a.txt", ".tex").string() == "a.tex" );
195 BOOST_TEST( fs::change_extension("a.", ".tex").string() == "a.tex" );
196 BOOST_TEST( fs::change_extension("a", ".txt").string() == "a.txt" );
197 BOOST_TEST( fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex" );
198 // see the rationale in html docs for explanation why this works
199 BOOST_TEST( fs::change_extension("", ".png").string() == ".png" );
201 return ::boost::report_errors();