blob: 8afa6f6f671c5b98f6970c3a13bb82f92164e3b7 (
plain)
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
|
#ifndef BIBOUMI_IO_TESTER_HPP
#define BIBOUMI_IO_TESTER_HPP
#include <ostream>
#include <sstream>
/**
* Redirects a stream into a streambuf until the object is destroyed.
*/
template <typename StreamType>
class IoTester
{
public:
IoTester(StreamType& ios):
stream{},
ios(ios),
old_buf(ios.rdbuf())
{
// Redirect the given os into our stringstream’s buf
this->ios.rdbuf(this->stream.rdbuf());
}
~IoTester()
{
this->ios.rdbuf(this->old_buf);
}
IoTester& operator=(const IoTester&) = delete;
IoTester& operator=(IoTester&&) = delete;
IoTester(const IoTester&) = delete;
IoTester(IoTester&&) = delete;
std::string str() const
{
return this->stream.str();
}
void set_string(const std::string& s)
{
this->stream.str(s);
}
private:
std::stringstream stream;
StreamType& ios;
std::streambuf* const old_buf;
};
#endif //BIBOUMI_IO_TESTER_HPP
|