/* * Created by Phil on 8/8/12 * 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_RESULT_INFO_HPP_INCLUDED #define TWOBLUECUBES_CATCH_RESULT_INFO_HPP_INCLUDED #include "catch_resultinfo.h" namespace Catch { ResultInfo::ResultInfo() : m_macroName(), m_expr(), m_lhs(), m_rhs(), m_op(), m_message(), m_result( ResultWas::Unknown ), m_isNot( false ) {} ResultInfo::ResultInfo(const char* expr, ResultWas::OfType result, bool isNot, const SourceLineInfo& lineInfo, const char* macroName, const char* message ) : m_macroName( macroName ), m_lineInfo( lineInfo ), m_expr( expr ), m_lhs(), m_rhs(), m_op( isNotExpression( expr ) ? "!" : "" ), m_message( message ), m_result( result ), m_isNot( isNot ) { if( isNot ) m_expr = "!" + m_expr; } ResultInfo::~ResultInfo() {} bool ResultInfo::ok() const { return ( m_result & ResultWas::FailureBit ) != ResultWas::FailureBit; } ResultWas::OfType ResultInfo::getResultType() const { return m_result; } bool ResultInfo::hasExpression() const { return !m_expr.empty(); } bool ResultInfo::hasMessage() const { return !m_message.empty(); } std::string ResultInfo::getExpression() const { return m_expr; } bool ResultInfo::hasExpandedExpression() const { return hasExpression() && getExpandedExpressionInternal() != m_expr; } std::string ResultInfo::getExpandedExpression() const { return hasExpression() ? getExpandedExpressionInternal() : ""; } std::string ResultInfo::getMessage() const { return m_message; } std::string ResultInfo::getFilename() const { return m_lineInfo.file; } std::size_t ResultInfo::getLine() const { return m_lineInfo.line; } std::string ResultInfo::getTestMacroName() const { return m_macroName; } std::string ResultInfo::getExpandedExpressionInternal() const { if( m_op == "" || m_isNot ) return m_lhs.empty() ? m_expr : m_op + m_lhs; else if( m_op == "matches" ) return m_lhs + " " + m_rhs; else if( m_op != "!" ) { 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 return "{can't expand - use " + m_macroName + "_FALSE( " + m_expr.substr(1) + " ) instead of " + m_macroName + "( " + m_expr + " ) for better diagnostics}"; } bool ResultInfo::isNotExpression( const char* expr ) { return expr && expr[0] == '!'; } } // end namespace Catch #endif // TWOBLUECUBES_CATCH_RESULT_INFO_HPP_INCLUDED