Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
231-Cfg-OutputStreams.cpp
Go to the documentation of this file.
1// 231-Cfg-OutputStreams.cpp
2// Show how to replace the streams with a simple custom made streambuf.
3
4// Note that this reimplementation _does not_ follow `std::cerr`
5// semantic, because it buffers the output. For most uses however,
6// there is no important difference between having `std::cerr` buffered
7// or unbuffered.
8
9#define CATCH_CONFIG_NOSTDOUT
10#define CATCH_CONFIG_MAIN
11#include <catch2/catch.hpp>
12
13class out_buff : public std::stringbuf {
14 std::FILE* m_stream;
15public:
16 out_buff(std::FILE* stream) :m_stream(stream) {}
17 ~out_buff() { pubsync(); }
18 int sync() {
19 int ret = 0;
20 for (unsigned char c : str()) {
21 if (putc(c, m_stream) == EOF) {
22 ret = -1;
23 break;
24 }
25 }
26 // Reset the buffer to avoid printing it multiple times
27 str("");
28 return ret;
29 }
30};
31
32namespace Catch {
33 std::ostream& cout() {
34 static std::ostream ret(new out_buff(stdout));
35 return ret;
36 }
37 std::ostream& clog() {
38 static std::ostream ret(new out_buff(stderr));
39 return ret;
40 }
41 std::ostream& cerr() {
42 return clog();
43 }
44}
45
46
47TEST_CASE("This binary uses putc to write out output", "[compilation-only]") {
48 SUCCEED("Nothing to test.");
49}
out_buff(std::FILE *stream)
#define SUCCEED()
Definition gtest.h:1867
#define TEST_CASE(...)
Definition catch.hpp:222
std::ostream & cout()
std::ostream & clog()
std::ostream & cerr()
CK_RV ret