127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  (C) Copyright Gennadiy Rozental 2001.
							 | 
						||
| 
								 | 
							
								//  Distributed under the Boost Software License, Version 1.0.
							 | 
						||
| 
								 | 
							
								//  (See accompanying file LICENSE_1_0.txt or copy at
							 | 
						||
| 
								 | 
							
								//  http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org/libs/test for the library home page.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  File        : $RCSfile$
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Version     : $Revision$
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Description : contains definition for setcolor iostream manipulator
							 | 
						||
| 
								 | 
							
								// ***************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_TEST_UTILS_SETCOLOR_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_TEST_UTILS_SETCOLOR_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Boost.Test
							 | 
						||
| 
								 | 
							
								#include <boost/test/detail/config.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// STL
							 | 
						||
| 
								 | 
							
								#include <iostream>
							 | 
						||
| 
								 | 
							
								#include <cstdio>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/test/detail/suppress_warnings.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//____________________________________________________________________________//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace unit_test {
							 | 
						||
| 
								 | 
							
								namespace utils {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								// **************                    term_attr                 ************** //
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct term_attr { enum _ {
							 | 
						||
| 
								 | 
							
								    NORMAL    = 0,
							 | 
						||
| 
								 | 
							
								    BRIGHT    = 1,
							 | 
						||
| 
								 | 
							
								    DIM       = 2,
							 | 
						||
| 
								 | 
							
								    UNDERLINE = 4,
							 | 
						||
| 
								 | 
							
								    BLINK     = 5,
							 | 
						||
| 
								 | 
							
								    REVERSE   = 7,
							 | 
						||
| 
								 | 
							
								    CROSSOUT  = 9
							 | 
						||
| 
								 | 
							
								}; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								// **************                   term_color                 ************** //
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct term_color { enum _ {
							 | 
						||
| 
								 | 
							
								    BLACK    = 0,
							 | 
						||
| 
								 | 
							
								    RED      = 1,
							 | 
						||
| 
								 | 
							
								    GREEN    = 2,
							 | 
						||
| 
								 | 
							
								    YELLOW   = 3,
							 | 
						||
| 
								 | 
							
								    BLUE     = 4,
							 | 
						||
| 
								 | 
							
								    MAGENTA  = 5,
							 | 
						||
| 
								 | 
							
								    CYAN     = 6,
							 | 
						||
| 
								 | 
							
								    WHITE    = 7,
							 | 
						||
| 
								 | 
							
								    ORIGINAL = 9
							 | 
						||
| 
								 | 
							
								}; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								// **************                    setcolor                  ************** //
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class setcolor {
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    // Constructor
							 | 
						||
| 
								 | 
							
								    explicit    setcolor( term_attr::_  attr = term_attr::NORMAL,
							 | 
						||
| 
								 | 
							
								                          term_color::_ fg   = term_color::ORIGINAL,
							 | 
						||
| 
								 | 
							
								                          term_color::_ bg   = term_color::ORIGINAL )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        m_command_size = std::sprintf( m_control_command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40 );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    friend std::ostream&
							 | 
						||
| 
								 | 
							
								    operator<<( std::ostream& os, setcolor const& sc )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return os.write( sc.m_control_command, sc.m_command_size );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    // Data members
							 | 
						||
| 
								 | 
							
								    char        m_control_command[13];
							 | 
						||
| 
								 | 
							
								    int         m_command_size;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								// **************                 scope_setcolor               ************** //
							 | 
						||
| 
								 | 
							
								// ************************************************************************** //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct scope_setcolor {
							 | 
						||
| 
								 | 
							
								    scope_setcolor() : m_os( 0 ) {}
							 | 
						||
| 
								 | 
							
								    explicit    scope_setcolor( std::ostream& os,
							 | 
						||
| 
								 | 
							
								                                term_attr::_  attr = term_attr::NORMAL,
							 | 
						||
| 
								 | 
							
								                                term_color::_ fg   = term_color::ORIGINAL,
							 | 
						||
| 
								 | 
							
								                                term_color::_ bg   = term_color::ORIGINAL )
							 | 
						||
| 
								 | 
							
								    : m_os( &os )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        os << setcolor( attr, fg, bg );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    ~scope_setcolor()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if( m_os )
							 | 
						||
| 
								 | 
							
								            *m_os << setcolor();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    // Data members
							 | 
						||
| 
								 | 
							
								    std::ostream* m_os;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_TEST_SCOPE_SETCOLOR( is_color_output, os, attr, color )   \
							 | 
						||
| 
								 | 
							
								    utils::scope_setcolor const& sc = is_color_output                   \
							 | 
						||
| 
								 | 
							
								           ? utils::scope_setcolor( os, utils::attr, utils::color )     \
							 | 
						||
| 
								 | 
							
								           : utils::scope_setcolor();                                   \
							 | 
						||
| 
								 | 
							
								    ut_detail::ignore_unused_variable_warning( sc )                     \
							 | 
						||
| 
								 | 
							
								/**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace utils
							 | 
						||
| 
								 | 
							
								} // namespace unit_test
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/test/detail/enable_warnings.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_TEST_UTILS_SETCOLOR_HPP
							 |