diff --git a/include/internal/catch_expression.hpp b/include/internal/catch_expression.hpp index f7c570ea..ad78a909 100644 --- a/include/internal/catch_expression.hpp +++ b/include/internal/catch_expression.hpp @@ -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 { diff --git a/include/internal/catch_expression_builder.hpp b/include/internal/catch_expression_builder.hpp index 4296146d..1f8487f8 100644 --- a/include/internal/catch_expression_builder.hpp +++ b/include/internal/catch_expression_builder.hpp @@ -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" diff --git a/include/internal/catch_impl.hpp b/include/internal/catch_impl.hpp index 4cb99083..5320d8d8 100644 --- a/include/internal/catch_impl.hpp +++ b/include/internal/catch_impl.hpp @@ -14,3 +14,4 @@ #include "catch_console_colour_impl.hpp" #include "catch_generators_impl.hpp" #include "catch_resultinfo.hpp" +#include "catch_resultinfo_builder.hpp" diff --git a/include/internal/catch_resultinfo_builder.h b/include/internal/catch_resultinfo_builder.h new file mode 100644 index 00000000..d236a884 --- /dev/null +++ b/include/internal/catch_resultinfo_builder.h @@ -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 + STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || + ( + const RhsT& + ); + + template + STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && + ( + const RhsT& + ); + +private: + friend class ExpressionBuilder; + template friend class Expression; + + template friend class PtrExpression; + + ResultInfoBuilder& captureBoolExpression( bool result ); + + template + ResultInfoBuilder& captureExpression( const T1& lhs, const T2& rhs ) { + setResultType( Internal::compare( lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed ); + m_lhs = Catch::toString( lhs ); + m_rhs = Catch::toString( rhs ); + m_op = Internal::OperatorTraits::getName(); + return *this; + } + + template + ResultInfoBuilder& captureExpression( const T* lhs, int rhs ) { + return captureExpression( lhs, reinterpret_cast( rhs ) ); + } +}; + +} // end namespace Catch + +#endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_H_INCLUDED diff --git a/include/internal/catch_resultinfo_builder.hpp b/include/internal/catch_resultinfo_builder.hpp index 53445e92..0dd87308 100644 --- a/include/internal/catch_resultinfo_builder.hpp +++ b/include/internal/catch_resultinfo_builder.hpp @@ -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 - STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || - ( - const RhsT& - ); - template - STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && - ( - const RhsT& - ); - -private: - friend class ExpressionBuilder; - template friend class Expression; - - template 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 - ResultInfoBuilder& captureExpression( const T1& lhs, const T2& rhs ) { - setResultType( Internal::compare( lhs, rhs ) ? ResultWas::Ok : ResultWas::ExpressionFailed ); - m_lhs = Catch::toString( lhs ); - m_rhs = Catch::toString( rhs ); - m_op = Internal::OperatorTraits::getName(); - return *this; } - - template - ResultInfoBuilder& captureExpression( const T* lhs, int rhs ) { - return captureExpression( lhs, reinterpret_cast( rhs ) ); - } -}; - + } // end namespace Catch #endif // TWOBLUECUBES_CATCH_RESULTINFO_BUILDER_HPP_INCLUDED diff --git a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj index bd9baf96..7dc83475 100644 --- a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj +++ b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj @@ -92,8 +92,9 @@ 4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = ""; }; 4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_generators.h; sourceTree = ""; }; 4A90B59D15D24FE900EF71BC /* catch_resultinfo.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo.hpp; sourceTree = ""; }; + 4A90B59E15D2521E00EF71BC /* catch_resultinfo_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo_builder.hpp; sourceTree = ""; }; 4A9D84B11558FC0400FBB209 /* catch_tostring.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_tostring.hpp; sourceTree = ""; }; - 4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_resultinfo_builder.hpp; sourceTree = ""; }; + 4A9D84B315599AC900FBB209 /* catch_resultinfo_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_resultinfo_builder.h; sourceTree = ""; }; 4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_console_colour_impl.hpp; sourceTree = ""; }; 4AB1C73714F97C1300F31DF7 /* catch_console_colour.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_console_colour.hpp; sourceTree = ""; }; 4AB77CB51551AEA200857BF0 /* catch_ptr.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_ptr.hpp; sourceTree = ""; }; @@ -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 = ""; @@ -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 */,