1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
// fstream_test.cpp --------------------------------------------------------//
// Copyright Beman Dawes 2002.
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
#define BOOST_FILESYSTEM_NO_DEPRECATED
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/operations.hpp>
#include <string>
#include <iostream>
#include <cstdio> // for std::remove
#include "../src/utf8_codecvt_facet.hpp"
#ifndef BOOST_FILESYSTEM_NARROW_ONLY
# include "lpath.hpp"
#endif
namespace fs = boost::filesystem;
#include <boost/config.hpp>
#ifdef BOOST_NO_STDC_NAMESPACE
namespace std { using ::remove; }
#endif
#include <boost/detail/lightweight_test.hpp>
namespace
{
bool cleanup = true;
template< class Path >
void test( const Path & p )
{
# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
{
std::cout << " in test 1\n";
fs::filebuf fb;
fb.open( p, std::ios_base::in );
BOOST_TEST( fb.is_open() == fs::exists( p ) );
}
{
std::cout << " in test 2\n";
fs::filebuf fb1;
fb1.open( p, std::ios_base::out );
BOOST_TEST( fb1.is_open() );
}
{
std::cout << " in test 3\n";
fs::filebuf fb2;
fb2.open( p, std::ios_base::in );
BOOST_TEST( fb2.is_open() );
}
# else
std::cout << "<note>\n";
std::cout <<
"VC++6.0 does not support boost::filesystem open()\n";
# endif
{
std::cout << " in test 4\n";
fs::ifstream tfs( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 4.1\n";
fs::ifstream tfs( p / p.filename() ); // should fail
BOOST_TEST( !tfs.is_open() );
}
{
std::cout << " in test 5\n";
fs::ifstream tfs( p, std::ios_base::in );
BOOST_TEST( tfs.is_open() );
}
# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
{
std::cout << " in test 6\n";
fs::ifstream tfs;
tfs.open( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 7\n";
fs::ifstream tfs;
tfs.open( p, std::ios_base::in );
BOOST_TEST( tfs.is_open() );
}
# endif
{
std::cout << " in test 8\n";
fs::ofstream tfs( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 9\n";
fs::ofstream tfs( p, std::ios_base::out );
BOOST_TEST( tfs.is_open() );
}
# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
{
std::cout << " in test 10\n";
fs::ofstream tfs;
tfs.open( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 11\n";
fs::ofstream tfs;
tfs.open( p, std::ios_base::out );
BOOST_TEST( tfs.is_open() );
}
# endif
{
std::cout << " in test 12\n";
fs::fstream tfs( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 13\n";
fs::fstream tfs( p, std::ios_base::in|std::ios_base::out );
BOOST_TEST( tfs.is_open() );
}
# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
{
std::cout << " in test 14\n";
fs::fstream tfs;
tfs.open( p );
BOOST_TEST( tfs.is_open() );
}
{
std::cout << " in test 15\n";
fs::fstream tfs;
tfs.open( p, std::ios_base::in|std::ios_base::out );
BOOST_TEST( tfs.is_open() );
}
# endif
if ( cleanup ) fs::remove( p );
} // test
} // unnamed namespace
int main( int argc, char*[] )
{
if ( argc > 1 ) cleanup = false;
// test fs::path
std::cout << "path tests:\n";
test( fs::path( "fstream_test_foo" ) );
#ifndef BOOST_FILESYSTEM_NARROW_ONLY
// So that tests are run with known encoding, use Boost UTF-8 codecvt
std::locale global_loc = std::locale();
std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
fs::wpath_traits::imbue( loc );
// test fs::wpath
// x2780 is circled 1 against white background == e2 9e 80 in UTF-8
// x2781 is circled 2 against white background == e2 9e 81 in UTF-8
std::cout << "\nwpath tests:\n";
test( fs::wpath( L"fstream_test_\x2780" ) );
// test user supplied basic_path
const long lname[] = { 'f', 's', 'r', 'e', 'a', 'm', '_', 't', 'e', 's',
't', '_', 'l', 'p', 'a', 't', 'h', 0 };
std::cout << "\nlpath tests:\n";
test( user::lpath( lname ) );
#endif
return ::boost::report_errors();
}
|