Home | History | Annotate | Download | only in internal
      1 /*
      2  *  Created by Phil on 8/8/12
      3  *  Copyright 2012 Two Blue Cubes Ltd. All rights reserved.
      4  *
      5  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
      6  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
      7  */
      8 
      9 #include "catch_assertionresult.h"
     10 
     11 namespace Catch {
     12     AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):
     13         lazyExpression(_lazyExpression),
     14         resultType(_resultType) {}
     15 
     16     std::string AssertionResultData::reconstructExpression() const {
     17 
     18         if( reconstructedExpression.empty() ) {
     19             if( lazyExpression ) {
     20                 ReusableStringStream rss;
     21                 rss << lazyExpression;
     22                 reconstructedExpression = rss.str();
     23             }
     24         }
     25         return reconstructedExpression;
     26     }
     27 
     28     AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data )
     29     :   m_info( info ),
     30         m_resultData( data )
     31     {}
     32 
     33     // Result was a success
     34     bool AssertionResult::succeeded() const {
     35         return Catch::isOk( m_resultData.resultType );
     36     }
     37 
     38     // Result was a success, or failure is suppressed
     39     bool AssertionResult::isOk() const {
     40         return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition );
     41     }
     42 
     43     ResultWas::OfType AssertionResult::getResultType() const {
     44         return m_resultData.resultType;
     45     }
     46 
     47     bool AssertionResult::hasExpression() const {
     48         return m_info.capturedExpression[0] != 0;
     49     }
     50 
     51     bool AssertionResult::hasMessage() const {
     52         return !m_resultData.message.empty();
     53     }
     54 
     55     std::string AssertionResult::getExpression() const {
     56         if( isFalseTest( m_info.resultDisposition ) )
     57             return "!(" + m_info.capturedExpression + ")";
     58         else
     59             return m_info.capturedExpression;
     60     }
     61 
     62     std::string AssertionResult::getExpressionInMacro() const {
     63         std::string expr;
     64         if( m_info.macroName[0] == 0 )
     65             expr = m_info.capturedExpression;
     66         else {
     67             expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 );
     68             expr += m_info.macroName;
     69             expr += "( ";
     70             expr += m_info.capturedExpression;
     71             expr += " )";
     72         }
     73         return expr;
     74     }
     75 
     76     bool AssertionResult::hasExpandedExpression() const {
     77         return hasExpression() && getExpandedExpression() != getExpression();
     78     }
     79 
     80     std::string AssertionResult::getExpandedExpression() const {
     81         std::string expr = m_resultData.reconstructExpression();
     82         return expr.empty()
     83                 ? getExpression()
     84                 : expr;
     85     }
     86 
     87     std::string AssertionResult::getMessage() const {
     88         return m_resultData.message;
     89     }
     90     SourceLineInfo AssertionResult::getSourceInfo() const {
     91         return m_info.lineInfo;
     92     }
     93 
     94     StringRef AssertionResult::getTestMacroName() const {
     95         return m_info.macroName;
     96     }
     97 
     98 } // end namespace Catch
     99