Cleaned up ResultInfoBuilder a bit

This commit is contained in:
Phil Nash
2012-10-09 20:58:33 +01:00
parent 71edf8b727
commit 9902ac9f1a
3 changed files with 54 additions and 71 deletions

View File

@@ -19,53 +19,50 @@ class Expression {
public:
Expression( ResultInfoBuilder& result, T lhs )
: m_result( result ),
: m_result( result.setLhs( Catch::toString( lhs ) ) ),
m_lhs( lhs )
{}
template<typename RhsT>
ResultInfoBuilder& operator == ( const RhsT& rhs ) {
return captureExpression<Internal::IsEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsEqualTo>( rhs );
}
template<typename RhsT>
ResultInfoBuilder& operator != ( const RhsT& rhs ) {
return captureExpression<Internal::IsNotEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsNotEqualTo>( rhs );
}
template<typename RhsT>
ResultInfoBuilder& operator < ( const RhsT& rhs ) {
return captureExpression<Internal::IsLessThan>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsLessThan>( rhs );
}
template<typename RhsT>
ResultInfoBuilder& operator > ( const RhsT& rhs ) {
return captureExpression<Internal::IsGreaterThan>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsGreaterThan>( rhs );
}
template<typename RhsT>
ResultInfoBuilder& operator <= ( const RhsT& rhs ) {
return captureExpression<Internal::IsLessThanOrEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsLessThanOrEqualTo>( rhs );
}
template<typename RhsT>
ResultInfoBuilder& operator >= ( const RhsT& rhs ) {
return captureExpression<Internal::IsGreaterThanOrEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsGreaterThanOrEqualTo>( rhs );
}
ResultInfoBuilder& operator == ( bool rhs ) {
return captureExpression<Internal::IsEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsEqualTo>( rhs );
}
ResultInfoBuilder& operator != ( bool rhs ) {
return captureExpression<Internal::IsNotEqualTo>( m_result, m_lhs, rhs );
return captureExpression<Internal::IsNotEqualTo>( rhs );
}
operator ResultInfoBuilder& () {
return m_result
.setLhs( Catch::toString( m_lhs ) )
.setOp( "" )
.setResultType( m_lhs ? ResultWas::Ok : ResultWas::ExpressionFailed );
return m_result.setResultType( m_lhs ? ResultWas::Ok : ResultWas::ExpressionFailed );
}
template<typename RhsT>
@@ -74,6 +71,15 @@ public:
template<typename RhsT>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( const RhsT& );
private:
template<Internal::Operator Op, typename RhsT>
ResultInfoBuilder& captureExpression( const RhsT& rhs ) {
return m_result
.setResultType( Internal::compare<Op>( m_lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed )
.setRhs( Catch::toString( rhs ) )
.setOp( Internal::OperatorTraits<Op>::getName() );
}
private:
ResultInfoBuilder& m_result;
T m_lhs;

View File

@@ -53,21 +53,6 @@ private:
bool m_isFalse;
};
template<Internal::Operator Op, typename T1, typename T2>
ResultInfoBuilder& captureExpression( ResultInfoBuilder& builder, const T1& lhs, const T2& rhs ) {
return builder
.setResultType( Internal::compare<Op>( lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed )
.setLhs( Catch::toString( lhs ) )
.setRhs( Catch::toString( rhs ) )
.setOp( Internal::OperatorTraits<Op>::getName() );
}
template<Internal::Operator Op, typename T>
ResultInfoBuilder& captureExpression( ResultInfoBuilder& builder, const T* lhs, int rhs ) {
return captureExpression<Op>( builder, lhs, reinterpret_cast<const T*>( rhs ) );
}
} // end namespace Catch
#endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_H_INCLUDED