mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-30 19:57:10 +01:00 
			
		
		
		
	 cde3509664
			
		
	
	cde3509664
	
	
	
		
			
			* bugprone-branch-clone * bugprone-copy-constructor-init * bugprone-empty-catch * bugprone-sizeof-expression * bugprone-switch-missing-default-case * bugprone-unused-local-non-trivial-variable * clang-analyzer-core.uninitialized.Assign * clang-analyzer-cplusplus.Move * clang-analyzer-optin.cplusplus.VirtualCall * modernize-loop-convert * modernize-raw-string-literal * modernize-use-equals-default * modernize-use-override * modernize-use-using * performance-avoid-endl * performance-inefficient-string-concatenation * performance-inefficient-vector-operation * performance-noexcept-move-constructor * performance-unnecessary-value-param (and improve generator example) * readability-duplicate-include * readability-inconsistent-declaration-parameter-name * readability-non-const-parameter * readability-redundant-casting * readability-redundant-member-init * readability-redundant-smartptr-get * readability-static-accessed-through-instance * unused variable in amalgamted tests
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| //              Copyright Catch2 Authors
 | |
| // Distributed under the Boost Software License, Version 1.0.
 | |
| //   (See accompanying file LICENSE.txt or copy at
 | |
| //        https://www.boost.org/LICENSE_1_0.txt)
 | |
| 
 | |
| // SPDX-License-Identifier: BSL-1.0
 | |
| 
 | |
| // 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() override;
 | |
|     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.");
 | |
| }
 |