| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | /* *  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) */#include "catch_assertionresult.h"namespace Catch {    AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):        lazyExpression(_lazyExpression),        resultType(_resultType) {}    std::string AssertionResultData::reconstructExpression() const {        if( reconstructedExpression.empty() ) {            if( lazyExpression ) {                ReusableStringStream rss;                rss << lazyExpression;                reconstructedExpression = rss.str();            }        }        return reconstructedExpression;    }    AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data )    :   m_info( info ),        m_resultData( data )    {}    // Result was a success    bool AssertionResult::succeeded() const {        return Catch::isOk( m_resultData.resultType );    }    // Result was a success, or failure is suppressed    bool AssertionResult::isOk() const {        return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition );    }    ResultWas::OfType AssertionResult::getResultType() const {        return m_resultData.resultType;    }    bool AssertionResult::hasExpression() const {        return !m_info.capturedExpression.empty();    }    bool AssertionResult::hasMessage() const {        return !m_resultData.message.empty();    }    std::string AssertionResult::getExpression() const {        // Possibly overallocating by 3 characters should be basically free        std::string expr; expr.reserve(m_info.capturedExpression.size() + 3);        if (isFalseTest(m_info.resultDisposition)) {            expr += "!(";        }        expr += m_info.capturedExpression;        if (isFalseTest(m_info.resultDisposition)) {            expr += ')';        }        return expr;    }    std::string AssertionResult::getExpressionInMacro() const {        std::string expr;        if( m_info.macroName.empty() )            expr = static_cast<std::string>(m_info.capturedExpression);        else {            expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 );            expr += m_info.macroName;            expr += "( ";            expr += m_info.capturedExpression;            expr += " )";        }        return expr;    }    bool AssertionResult::hasExpandedExpression() const {        return hasExpression() && getExpandedExpression() != getExpression();    }    std::string AssertionResult::getExpandedExpression() const {        std::string expr = m_resultData.reconstructExpression();        return expr.empty()                ? getExpression()                : expr;    }    std::string AssertionResult::getMessage() const {        return m_resultData.message;    }    SourceLineInfo AssertionResult::getSourceInfo() const {        return m_info.lineInfo;    }    StringRef AssertionResult::getTestMacroName() const {        return m_info.macroName;    }} // end namespace Catch
 |