Separated resultinfo_builder from impl

This commit is contained in:
Phil Nash 2012-08-08 08:58:28 +01:00
parent ffe986d4ee
commit c436a4dac1
6 changed files with 104 additions and 67 deletions

View File

@ -8,7 +8,7 @@
#ifndef TWOBLUECUBES_CATCH_EXPRESSION_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_EXPRESSION_HPP_INCLUDED
#include "catch_resultinfo_builder.hpp"
#include "catch_resultinfo_builder.h"
#include "catch_evaluate.hpp"
namespace Catch {

View File

@ -9,7 +9,7 @@
#define TWOBLUECUBES_CATCH_EXPRESSION_BUILDER_HPP_INCLUDED
#include "catch_expression.hpp"
#include "catch_resultinfo_builder.hpp"
#include "catch_resultinfo_builder.h"
#include "catch_tostring.hpp"
#include "catch_resultinfo.h"
#include "catch_result_type.h"

View File

@ -14,3 +14,4 @@
#include "catch_console_colour_impl.hpp"
#include "catch_generators_impl.hpp"
#include "catch_resultinfo.hpp"
#include "catch_resultinfo_builder.hpp"

View File

@ -0,0 +1,77 @@
/*
* Created by Phil on 8/5/2012.
* 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_H_INCLUDED
#define TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_H_INCLUDED
#include "catch_tostring.hpp"
#include "catch_resultinfo.h"
#include "catch_result_type.h"
#include "catch_evaluate.hpp"
#include "catch_common.h"
namespace Catch {
struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison;
class ResultInfoBuilder : public ResultInfo {
public:
ResultInfoBuilder();
ResultInfoBuilder( const char* expr,
bool isNot,
const SourceLineInfo& lineInfo,
const char* macroName,
const char* message = "" );
void setResultType( ResultWas::OfType result );
void setMessage( const std::string& message );
void setLineInfo( const SourceLineInfo& lineInfo );
void setLhs( const std::string& lhs );
void setRhs( const std::string& rhs );
void setOp( const std::string& op );
template<typename RhsT>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator ||
(
const RhsT&
);
template<typename RhsT>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator &&
(
const RhsT&
);
private:
friend class ExpressionBuilder;
template<typename T> friend class Expression;
template<typename T> friend class PtrExpression;
ResultInfoBuilder& captureBoolExpression( bool result );
template<Internal::Operator Op, typename T1, typename T2>
ResultInfoBuilder& captureExpression( const T1& lhs, const T2& rhs ) {
setResultType( Internal::compare<Op>( lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed );
m_lhs = Catch::toString( lhs );
m_rhs = Catch::toString( rhs );
m_op = Internal::OperatorTraits<Op>::getName();
return *this;
}
template<Internal::Operator Op, typename T>
ResultInfoBuilder& captureExpression( const T* lhs, int rhs ) {
return captureExpression<Op>( lhs, reinterpret_cast<const T*>( rhs ) );
}
};
} // end namespace Catch
#endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_H_INCLUDED

View File

@ -1,5 +1,5 @@
/*
* Created by Phil on 8/5/2012.
* Created by Phil on 8/8/2012.
* Copyright 2012 Two Blue Cubes Ltd. All rights reserved.
*
* Distributed under the Boost Software License, Version 1.0. (See accompanying
@ -8,100 +8,57 @@
#ifndef TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED
#include "catch_tostring.hpp"
#include "catch_resultinfo.h"
#include "catch_result_type.h"
#include "catch_evaluate.hpp"
#include "catch_common.h"
#include "catch_resultinfo_builder.h"
namespace Catch {
struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison;
class ResultInfoBuilder : public ResultInfo {
ResultInfoBuilder::ResultInfoBuilder() {}
public:
ResultInfoBuilder() {}
ResultInfoBuilder( const char* expr,
bool isNot,
const SourceLineInfo& lineInfo,
const char* macroName,
const char* message = "" )
ResultInfoBuilder::ResultInfoBuilder( const char* expr,
bool isNot,
const SourceLineInfo& lineInfo,
const char* macroName,
const char* message )
: ResultInfo( expr, ResultWas::Unknown, isNot, lineInfo, macroName, message )
{}
void setResultType( ResultWas::OfType result ) {
void ResultInfoBuilder::setResultType( ResultWas::OfType result ) {
// Flip bool results if isNot is set
if( m_isNot && result == ResultWas::Ok )
m_result = ResultWas::ExpressionFailed;
else if( m_isNot && result == ResultWas::ExpressionFailed )
m_result = ResultWas::Ok;
else
m_result = result;
m_result = result;
}
void setMessage( const std::string& message ) {
void ResultInfoBuilder::setMessage( const std::string& message ) {
m_message = message;
}
void setLineInfo( const SourceLineInfo& lineInfo ) {
void ResultInfoBuilder::setLineInfo( const SourceLineInfo& lineInfo ) {
m_lineInfo = lineInfo;
}
void setLhs( const std::string& lhs ) {
void ResultInfoBuilder::setLhs( const std::string& lhs ) {
m_lhs = lhs;
}
void setRhs( const std::string& rhs ) {
void ResultInfoBuilder::setRhs( const std::string& rhs ) {
m_rhs = rhs;
}
void setOp( const std::string& op ) {
void ResultInfoBuilder::setOp( const std::string& op ) {
m_op = op;
}
template<typename RhsT>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator ||
(
const RhsT&
);
template<typename RhsT>
STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator &&
(
const RhsT&
);
private:
friend class ExpressionBuilder;
template<typename T> friend class Expression;
template<typename T> friend class PtrExpression;
ResultInfoBuilder& captureBoolExpression( bool result ) {
ResultInfoBuilder& ResultInfoBuilder::captureBoolExpression( bool result ) {
m_lhs = Catch::toString( result );
m_op = m_isNot ? "!" : "";
setResultType( result ? ResultWas::Ok : ResultWas::ExpressionFailed );
return *this;
}
template<Internal::Operator Op, typename T1, typename T2>
ResultInfoBuilder& captureExpression( const T1& lhs, const T2& rhs ) {
setResultType( Internal::compare<Op>( lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed );
m_lhs = Catch::toString( lhs );
m_rhs = Catch::toString( rhs );
m_op = Internal::OperatorTraits<Op>::getName();
return *this;
}
template<Internal::Operator Op, typename T>
ResultInfoBuilder& captureExpression( const T* lhs, int rhs ) {
return captureExpression<Op>( lhs, reinterpret_cast<const T*>( rhs ) );
}
};
} // end namespace Catch
#endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED

View File

@ -92,8 +92,9 @@
4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = "<group>"; };
4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_generators.h; sourceTree = "<group>"; };
4A90B59D15D24FE900EF71BC /* catch_resultinfo.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo.hpp; sourceTree = "<group>"; };
4A90B59E15D2521E00EF71BC /* catch_resultinfo_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo_builder.hpp; sourceTree = "<group>"; };
4A9D84B11558FC0400FBB209 /* catch_tostring.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_tostring.hpp; sourceTree = "<group>"; };
4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo_builder.hpp; sourceTree = "<group>"; };
4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_resultinfo_builder.h; sourceTree = "<group>"; };
4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_console_colour_impl.hpp; sourceTree = "<group>"; };
4AB1C73714F97C1300F31DF7 /* catch_console_colour.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_console_colour.hpp; sourceTree = "<group>"; };
4AB77CB51551AEA200857BF0 /* catch_ptr.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_ptr.hpp; sourceTree = "<group>"; };
@ -212,6 +213,7 @@
4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */,
4A4B0F9B15CEF8C400AE2392 /* catch_notimplemented_exception.hpp */,
4A90B59D15D24FE900EF71BC /* catch_resultinfo.hpp */,
4A90B59E15D2521E00EF71BC /* catch_resultinfo_builder.hpp */,
);
name = impl;
sourceTree = "<group>";
@ -223,7 +225,7 @@
4A6D0C4F149B3E3D00DB3EAA /* catch_generators.hpp */,
4A6D0C5C149B3E3D00DB3EAA /* catch_result_type.h */,
4A6D0C5D149B3E3D00DB3EAA /* catch_resultinfo.h */,
4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.hpp */,
4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.h */,
4A6D0C5F149B3E3D00DB3EAA /* catch_section.hpp */,
4A3D7DD01503869D005F9203 /* catch_matchers.hpp */,
4A9D84B11558FC0400FBB209 /* catch_tostring.hpp */,