mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-27 05:03:30 +01:00
db32550898
There are two reasons for this: 1) It is highly unlikely that someone has use for this header, which has no customization points and only provides simplest possible main, and cannot link the static library which also provides a default main implementation. 2) It being a header was causing extra complications with the convenience headers, and our checking script. This would either require special handling in the checking script, or would break user's of the main convenience header. All in all, it is simpler and better in the long term to remove it, than to fix its problems.
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
// 231-Cfg-OutputStreams.cpp
|
|
// Show how to replace the streams with a simple custom made streambuf.
|
|
|
|
// Note that this reimplementation _does not_ follow `std::cerr`
|
|
// semantic, because it buffers the output. For most uses however,
|
|
// there is no important difference between having `std::cerr` buffered
|
|
// or unbuffered.
|
|
#include <catch2/catch_test_macros.hpp>
|
|
|
|
#include <sstream>
|
|
#include <cstdio>
|
|
|
|
class out_buff : public std::stringbuf {
|
|
std::FILE* m_stream;
|
|
public:
|
|
out_buff(std::FILE* stream):m_stream(stream) {}
|
|
~out_buff();
|
|
int sync() override {
|
|
int ret = 0;
|
|
for (unsigned char c : str()) {
|
|
if (putc(c, m_stream) == EOF) {
|
|
ret = -1;
|
|
break;
|
|
}
|
|
}
|
|
// Reset the buffer to avoid printing it multiple times
|
|
str("");
|
|
return ret;
|
|
}
|
|
};
|
|
|
|
out_buff::~out_buff() { pubsync(); }
|
|
|
|
#if defined(__clang__)
|
|
#pragma clang diagnostic ignored "-Wexit-time-destructors" // static variables in cout/cerr/clog
|
|
#endif
|
|
|
|
namespace Catch {
|
|
std::ostream& cout() {
|
|
static std::ostream ret(new out_buff(stdout));
|
|
return ret;
|
|
}
|
|
std::ostream& clog() {
|
|
static std::ostream ret(new out_buff(stderr));
|
|
return ret;
|
|
}
|
|
std::ostream& cerr() {
|
|
return clog();
|
|
}
|
|
}
|
|
|
|
|
|
TEST_CASE("This binary uses putc to write out output", "[compilation-only]") {
|
|
SUCCEED("Nothing to test.");
|
|
}
|