70fd8f7de4994668eeb9f532d0523266a176e795joncruz#ifndef SEEN_MULTI_PRINTER_H
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#define SEEN_MULTI_PRINTER_H
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include <cxxtest/Flags.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#ifndef _CXXTEST_HAVE_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# define _CXXTEST_HAVE_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#endif // _CXXTEST_HAVE_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include <cxxtest/ErrorFormatter.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include <cxxtest/StdValueTraits.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#ifdef _CXXTEST_OLD_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <iostream.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <fstream.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <string.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#else // !_CXXTEST_OLD_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <iostream>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <fstream>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz# include <string>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#endif // _CXXTEST_OLD_STD
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include <cxxtest/TeeListener.h>
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include "TRPIFormatter.h"
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#include "PylogFormatter.h"
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruznamespace CxxTest {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruzclass MultiPrinter : public TeeListener
70fd8f7de4994668eeb9f532d0523266a176e795joncruz{
70fd8f7de4994668eeb9f532d0523266a176e795joncruzpublic:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz MultiPrinter( const char* baseName = "result" ) :
70fd8f7de4994668eeb9f532d0523266a176e795joncruz TeeListener(),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _baseName( baseName ),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _xmlName( _baseName + ".xml" ),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _logName( _baseName + ".log" ),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _xmlFile( _xmlName.c_str(), CXXTEST_STD(ios::out)),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _logFile( _logName.c_str(), CXXTEST_STD(ios::out)),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _dstOne( new FileAdapter( CXXTEST_STD(cout) ) ),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _dstXml( new FileAdapter( _xmlFile ) ),
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _dstPylog( new FileAdapter( _logFile ), _baseName.c_str() )
70fd8f7de4994668eeb9f532d0523266a176e795joncruz {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz setFirst( _dstOne );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz setSecond( _subTee );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _subTee.setFirst( _dstXml );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _subTee.setSecond( _dstPylog );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz virtual ~MultiPrinter()
70fd8f7de4994668eeb9f532d0523266a176e795joncruz {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _xmlFile.close();
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _logFile.close();
70fd8f7de4994668eeb9f532d0523266a176e795joncruz }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz int run()
70fd8f7de4994668eeb9f532d0523266a176e795joncruz {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz TestRunner::runAllTests( *this );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz return tracker().failedTests();
70fd8f7de4994668eeb9f532d0523266a176e795joncruz }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruzprotected:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(string) _baseName;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(string) _xmlName;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(string) _logName;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(fstream) _xmlFile;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(fstream) _logFile;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz TeeListener _subTee;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz ErrorFormatter _dstOne;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz TRPIFormatter _dstXml;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz PylogFormatter _dstPylog;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruzprivate:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz class FileAdapter : public OutputStream
70fd8f7de4994668eeb9f532d0523266a176e795joncruz {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz FileAdapter( const FileAdapter & );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz FileAdapter &operator=( const FileAdapter & );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz CXXTEST_STD(ostream) &_o;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz public:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz FileAdapter( CXXTEST_STD(ostream) &o ) : _o(o) {}
70fd8f7de4994668eeb9f532d0523266a176e795joncruz void flush() { _o.flush(); }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz OutputStream &operator<<( const char *s ) { _o << s; return *this; }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz OutputStream &operator<<( Manipulator m ) { return OutputStream::operator<<( m ); }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz OutputStream &operator<<( unsigned i )
70fd8f7de4994668eeb9f532d0523266a176e795joncruz {
70fd8f7de4994668eeb9f532d0523266a176e795joncruz char s[1 + 3 * sizeof(unsigned)];
70fd8f7de4994668eeb9f532d0523266a176e795joncruz numberToString( i, s );
70fd8f7de4994668eeb9f532d0523266a176e795joncruz _o << s;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz return *this;
70fd8f7de4994668eeb9f532d0523266a176e795joncruz }
70fd8f7de4994668eeb9f532d0523266a176e795joncruz };
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz};
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz}
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz/*
70fd8f7de4994668eeb9f532d0523266a176e795joncruz Local Variables:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz mode:c++
70fd8f7de4994668eeb9f532d0523266a176e795joncruz c-file-style:"stroustrup"
70fd8f7de4994668eeb9f532d0523266a176e795joncruz c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
70fd8f7de4994668eeb9f532d0523266a176e795joncruz indent-tabs-mode:nil
70fd8f7de4994668eeb9f532d0523266a176e795joncruz fill-column:99
70fd8f7de4994668eeb9f532d0523266a176e795joncruz End:
70fd8f7de4994668eeb9f532d0523266a176e795joncruz*/
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
70fd8f7de4994668eeb9f532d0523266a176e795joncruz
70fd8f7de4994668eeb9f532d0523266a176e795joncruz#endif //SEEN_MULTI_PRINTER_H