2012-05-08 20:29:51 +02:00
/*
2012-08-08 09:58:28 +02:00
* Created by Phil on 8 / 8 / 2012.
2012-05-08 20:29:51 +02:00
* Copyright 2012 Two Blue Cubes Ltd . All rights reserved .
*
* 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)
*/
# ifndef TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED
# define TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED
2012-08-08 09:58:28 +02:00
# include "catch_resultinfo_builder.h"
2012-05-08 20:29:51 +02:00
2012-05-15 08:42:26 +02:00
namespace Catch {
2012-05-08 20:29:51 +02:00
2012-10-04 09:09:09 +02:00
ResultInfoBuilder : : ResultInfoBuilder ( ) { }
ResultInfoBuilder & ResultInfoBuilder : : setResultType ( ResultWas : : OfType result ) {
2012-10-09 12:59:11 +02:00
// Flip bool results if isFalse is set
if ( m_isFalse & & result = = ResultWas : : Ok )
2012-10-09 12:48:55 +02:00
m_data . resultType = ResultWas : : ExpressionFailed ;
2012-10-09 12:59:11 +02:00
else if ( m_isFalse & & result = = ResultWas : : ExpressionFailed )
2012-10-09 12:48:55 +02:00
m_data . resultType = ResultWas : : Ok ;
2012-05-08 20:29:51 +02:00
else
2012-10-09 12:48:55 +02:00
m_data . resultType = result ;
2012-10-05 19:35:01 +02:00
return * this ;
}
ResultInfoBuilder & ResultInfoBuilder : : setCapturedExpression ( const std : : string & capturedExpression ) {
m_data . capturedExpression = capturedExpression ;
return * this ;
}
ResultInfoBuilder & ResultInfoBuilder : : setIsFalse ( bool isFalse ) {
2012-10-09 12:59:11 +02:00
m_isFalse = isFalse ;
2012-10-04 09:09:09 +02:00
return * this ;
2012-05-08 20:29:51 +02:00
}
2012-10-04 09:09:09 +02:00
ResultInfoBuilder & ResultInfoBuilder : : setMessage ( const std : : string & message ) {
2012-10-05 19:35:01 +02:00
m_data . message = message ;
2012-10-04 09:09:09 +02:00
return * this ;
2012-05-08 20:29:51 +02:00
}
2012-08-08 09:58:28 +02:00
2012-10-04 09:09:09 +02:00
ResultInfoBuilder & ResultInfoBuilder : : setLineInfo ( const SourceLineInfo & lineInfo ) {
2012-10-05 19:35:01 +02:00
m_data . lineInfo = lineInfo ;
return * this ;
}
ResultInfoBuilder & ResultInfoBuilder : : setMacroName ( const std : : string & macroName ) {
m_data . macroName = macroName ;
2012-10-04 09:09:09 +02:00
return * this ;
2012-05-08 20:29:51 +02:00
}
2012-08-08 09:58:28 +02:00
2012-10-04 09:09:09 +02:00
ResultInfoBuilder & ResultInfoBuilder : : setLhs ( const std : : string & lhs ) {
2012-05-08 20:29:51 +02:00
m_lhs = lhs ;
2012-10-04 09:09:09 +02:00
return * this ;
2012-05-08 20:29:51 +02:00
}
2012-08-08 09:58:28 +02:00
2012-10-04 09:09:09 +02:00
ResultInfoBuilder & ResultInfoBuilder : : setRhs ( const std : : string & rhs ) {
2012-05-08 20:29:51 +02:00
m_rhs = rhs ;
2012-10-04 09:09:09 +02:00
return * this ;
2012-05-08 20:29:51 +02:00
}
2012-10-04 09:09:09 +02:00
ResultInfoBuilder & ResultInfoBuilder : : setOp ( const std : : string & op ) {
2012-05-08 20:29:51 +02:00
m_op = op ;
2012-10-04 09:09:09 +02:00
return * this ;
}
2012-10-09 12:48:55 +02:00
ResultInfo ResultInfoBuilder : : build ( ) const
2012-10-05 19:35:01 +02:00
{
ResultData data = m_data ;
data . reconstructedExpression = reconstructExpression ( ) ;
2012-10-09 12:59:11 +02:00
if ( m_isFalse ) {
2012-10-09 12:48:55 +02:00
if ( m_op = = " " ) {
data . capturedExpression = " ! " + data . capturedExpression ;
data . reconstructedExpression = " ! " + data . reconstructedExpression ;
}
else {
data . capturedExpression = " !( " + data . capturedExpression + " ) " ;
data . reconstructedExpression = " !( " + data . reconstructedExpression + " ) " ;
}
}
return ResultInfo ( data ) ;
2012-05-08 20:29:51 +02:00
}
2012-10-05 19:35:01 +02:00
std : : string ResultInfoBuilder : : reconstructExpression ( ) const {
2012-10-09 12:48:55 +02:00
if ( m_op = = " " )
return m_lhs . empty ( ) ? m_data . capturedExpression : m_op + m_lhs ;
2012-10-05 19:35:01 +02:00
else if ( m_op = = " matches " )
return m_lhs + " " + m_rhs ;
2012-10-09 12:48:55 +02:00
else if ( m_op ! = " ! " ) {
2012-10-05 19:35:01 +02:00
if ( m_lhs . size ( ) + m_rhs . size ( ) < 30 )
return m_lhs + " " + m_op + " " + m_rhs ;
else if ( m_lhs . size ( ) < 70 & & m_rhs . size ( ) < 70 )
return " \n \t " + m_lhs + " \n \t " + m_op + " \n \t " + m_rhs ;
else
return " \n " + m_lhs + " \n " + m_op + " \n " + m_rhs + " \n \n " ;
}
else
2012-10-09 12:48:55 +02:00
return " {can't expand - use " + m_data . macroName + " _FALSE( " + m_data . capturedExpression . substr ( 1 ) + " ) instead of " + m_data . macroName + " ( " + m_data . capturedExpression + " ) for better diagnostics} " ;
2012-10-05 19:35:01 +02:00
}
2012-05-08 20:29:51 +02:00
} // end namespace Catch
# endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED