summaryrefslogtreecommitdiff
path: root/tests/io_tester.hpp
diff options
context:
space:
mode:
authorVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:41 +0530
committerVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:41 +0530
commit4e4de7284e6e4d89d182ea459823bbec1e408842 (patch)
tree47e0ed5216b48649b138f168f61fddca2b0c076a /tests/io_tester.hpp
parentdfb3a6edfacf2f16a8a63690b3e8058b6295d1a3 (diff)
parenteda4b75b1cff83336e87da90efca9fd6b4ced2c7 (diff)
downloadbiboumi-4e4de7284e6e4d89d182ea459823bbec1e408842.tar.gz
biboumi-4e4de7284e6e4d89d182ea459823bbec1e408842.tar.bz2
biboumi-4e4de7284e6e4d89d182ea459823bbec1e408842.tar.xz
biboumi-4e4de7284e6e4d89d182ea459823bbec1e408842.zip
Updated version 3.0 from 'upstream/3.0'
with Debian dir 0f18938e98f5a466f36719f60cef0490163ab845
Diffstat (limited to 'tests/io_tester.hpp')
-rw-r--r--tests/io_tester.hpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/io_tester.hpp b/tests/io_tester.hpp
new file mode 100644
index 0000000..b9cdaa7
--- /dev/null
+++ b/tests/io_tester.hpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#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;
+};
+