]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/filesystem/test/fstream_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / filesystem / test / fstream_test.cpp
CommitLineData
7c673cae
FG
1// fstream_test.cpp ------------------------------------------------------------------//
2
3// Copyright Beman Dawes 2002
4
5// Distributed under the Boost Software License, Version 1.0.
6// See http://www.boost.org/LICENSE_1_0.txt
7
8// Library home page: http://www.boost.org/libs/filesystem
9
10#include <boost/config/warning_disable.hpp>
11
12// See deprecated_test for tests of deprecated features
92f5a8d4 13#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
7c673cae
FG
14# define BOOST_FILESYSTEM_NO_DEPRECATED
15#endif
92f5a8d4 16#ifndef BOOST_SYSTEM_NO_DEPRECATED
7c673cae
FG
17# define BOOST_SYSTEM_NO_DEPRECATED
18#endif
19
20#include <boost/filesystem/fstream.hpp>
21
22#include <boost/config.hpp>
23# if defined( BOOST_NO_STD_WSTRING )
24# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
25# endif
26
27#include <boost/filesystem/operations.hpp>
28#include <string>
29#include <iostream>
30#include <cstdio> // for std::remove
31
32#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
33
34namespace fs = boost::filesystem;
35
36#include <boost/config.hpp>
37#ifdef BOOST_NO_STDC_NAMESPACE
38 namespace std { using ::remove; }
39#endif
40
41#include <boost/detail/lightweight_test.hpp>
42#include <boost/detail/lightweight_main.hpp>
43
44namespace
45{
46 bool cleanup = true;
92f5a8d4 47
7c673cae
FG
48 void test(const fs::path & p)
49 {
50 fs::remove(p);
51 {
52 std::cout << " in test 1\n";
53 fs::filebuf fb1;
54 fb1.open(p, std::ios_base::out);
55 BOOST_TEST(fb1.is_open());
56 }
57 {
58 std::cout << " in test 2\n";
59 fs::filebuf fb2;
60 fb2.open(p, std::ios_base::in);
61 BOOST_TEST(fb2.is_open());
62 }
63 {
64 std::cout << " in test 3\n";
65 fs::ifstream tfs(p);
66 BOOST_TEST(tfs.is_open());
67 }
68 {
69 std::cout << " in test 4\n";
70 fs::ifstream tfs(p / p.filename()); // should fail
71 BOOST_TEST(!tfs.is_open());
72 }
73 {
74 std::cout << " in test 5\n";
75 fs::ifstream tfs(p, std::ios_base::in);
76 BOOST_TEST(tfs.is_open());
77 }
78 {
79 std::cout << " in test 6\n";
80 fs::ifstream tfs;
81 tfs.open(p);
82 BOOST_TEST(tfs.is_open());
83 }
84 {
85 std::cout << " in test 7\n";
86 fs::ifstream tfs;
87 tfs.open(p, std::ios_base::in);
88 BOOST_TEST(tfs.is_open());
89 }
90 {
91 std::cout << " in test 8\n";
92 fs::ofstream tfs(p);
93 BOOST_TEST(tfs.is_open());
94 }
95 {
96 std::cout << " in test 9\n";
97 fs::ofstream tfs(p, std::ios_base::out);
98 BOOST_TEST(tfs.is_open());
99 }
100 {
101 std::cout << " in test 10\n";
102 fs::ofstream tfs;
103 tfs.open(p);
104 BOOST_TEST(tfs.is_open());
105 }
106 {
107 std::cout << " in test 11\n";
108 fs::ofstream tfs;
109 tfs.open(p, std::ios_base::out);
110 BOOST_TEST(tfs.is_open());
111 }
112 {
113 std::cout << " in test 12\n";
114 fs::fstream tfs(p);
115 BOOST_TEST(tfs.is_open());
116 }
117 {
118 std::cout << " in test 13\n";
119 fs::fstream tfs(p, std::ios_base::in|std::ios_base::out);
120 BOOST_TEST(tfs.is_open());
121 }
122 {
123 std::cout << " in test 14\n";
124 fs::fstream tfs;
125 tfs.open(p);
126 BOOST_TEST(tfs.is_open());
127 }
128 {
129 std::cout << " in test 15\n";
130 fs::fstream tfs;
131 tfs.open(p, std::ios_base::in|std::ios_base::out);
132 BOOST_TEST(tfs.is_open());
133 }
134
135 if (cleanup)
136 fs::remove(p);
137
138 } // test
139} // unnamed namespace
140
141int cpp_main(int argc, char*[])
142{
143 if (argc > 1) cleanup = false;
144
145 std::cout << "BOOST_FILESYSTEM_C_STR defined as \""
146 << BOOST_STRINGIZE(BOOST_FILESYSTEM_C_STR) << "\"\n";
147
148 // test narrow characters
149 std::cout << "narrow character tests:\n";
150 test("narrow_fstream_test");
151
152
153 // So that tests are run with known encoding, use Boost UTF-8 codecvt
154 std::locale global_loc = std::locale();
155 std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet);
156 fs::path::imbue(loc);
157
158 // test with some wide characters
159 // \u2780 is circled 1 against white background == e2 9e 80 in UTF-8
160 // \u2781 is circled 2 against white background == e2 9e 81 in UTF-8
161 // \u263A is a white smiling face
162 std::cout << "\nwide character tests:\n";
163 std::wstring ws(L"wide_fstream_test_");
164 ws += 0x2780;
165 ws += 0x263A;
166 test(ws);
167
168 return ::boost::report_errors();
169}