1// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
2// (C) Copyright 2004-2007 Jonathan Turkanis
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
5
6// See http://www.boost.org/libs/iostreams for documentation.
7
8#ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
9#define BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
10
11#include <cctype> // toupper, tolower
12#include <cstdio> // tmpname, TMP_MAX, remove
13#include <cstdlib> // rand, toupper, tolower (VC6)
14#include <fstream>
15#include <string>
16#include <boost/filesystem/operations.hpp>
17#include "./constants.hpp"
18
19#ifdef BOOST_NO_STDC_NAMESPACE
20# undef toupper
21# undef tolower
22# undef remove
23# undef rand
24namespace std {
25 using ::toupper; using ::tolower; using ::remove; using ::rand;
26}
27#endif
28
29namespace boost { namespace iostreams { namespace test {
30
31// Represents a temp file, deleted upon destruction.
32class temp_file {
33public:
34
35 // Constructs a temp file which does not initially exist.
36 temp_file() { set_name(); }
37 ~temp_file() { (void)std::remove(filename: name_.c_str()); }
38 const ::std::string name() const { return name_; }
39 operator const ::std::string() const { return name_; }
40private:
41 void set_name() {
42 name_ = boost::filesystem::unique_path().string();
43 }
44
45 ::std::string name_;
46};
47
48struct test_file : public temp_file {
49 test_file()
50 {
51 BOOST_IOS::openmode mode =
52 BOOST_IOS::out | BOOST_IOS::binary;
53 ::std::ofstream f(name().c_str(), mode);
54 const ::std::string n(name());
55 const char* buf = narrow_data();
56 for (int z = 0; z < data_reps; ++z)
57 f.write(s: buf, n: data_length());
58 }
59};
60
61
62struct uppercase_file : public temp_file {
63 uppercase_file()
64 {
65 BOOST_IOS::openmode mode =
66 BOOST_IOS::out | BOOST_IOS::binary;
67 ::std::ofstream f(name().c_str(), mode);
68 const char* buf = narrow_data();
69 for (int z = 0; z < data_reps; ++z)
70 for (int w = 0; w < data_length(); ++w)
71 f.put(c: (char) std::toupper(c: buf[w]));
72 }
73};
74
75struct lowercase_file : public temp_file {
76 lowercase_file()
77 {
78 BOOST_IOS::openmode mode =
79 BOOST_IOS::out | BOOST_IOS::binary;
80 ::std::ofstream f(name().c_str(), mode);
81 const char* buf = narrow_data();
82 for (int z = 0; z < data_reps; ++z)
83 for (int w = 0; w < data_length(); ++w)
84 f.put(c: (char) std::tolower(c: buf[w]));
85 }
86};
87
88//----------------------------------------------------------------------------//
89
90} } } // End namespaces test, iostreams, boost.
91
92#endif // #ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
93

source code of boost/libs/iostreams/test/detail/temp_file.hpp