Chris@16: // (C) Copyright Gennadiy Rozental 2001-2008. Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : enhanced result for test predicate that include message explaining failure Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_TEST_PREDICATE_RESULT_HPP_012705GER Chris@16: #define BOOST_TEST_PREDICATE_RESULT_HPP_012705GER Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: // Boost Chris@16: #include Chris@16: #include Chris@16: Chris@16: // STL Chris@16: #include // for std::size_t Chris@16: Chris@16: #include Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace test_tools { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** predicate_result ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: class BOOST_TEST_DECL predicate_result { Chris@16: typedef unit_test::const_string const_string; Chris@16: struct dummy { void nonnull() {}; }; Chris@16: typedef void (dummy::*safe_bool)(); Chris@16: Chris@16: public: Chris@16: // Constructor Chris@16: predicate_result( bool pv_ ) Chris@16: : p_predicate_value( pv_ ) Chris@16: {} Chris@16: Chris@16: template Chris@16: predicate_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {} Chris@16: Chris@16: // Access methods Chris@16: bool operator!() const { return !p_predicate_value; } Chris@16: void operator=( bool pv_ ) { p_predicate_value.value = pv_; } Chris@16: operator safe_bool() const { return !!p_predicate_value ? &dummy::nonnull : 0; } Chris@16: Chris@16: // Public properties Chris@16: BOOST_READONLY_PROPERTY( bool, (predicate_result) ) p_predicate_value; Chris@16: Chris@16: // Access methods Chris@16: bool has_empty_message() const { return !m_message; } Chris@16: wrap_stringstream& message() Chris@16: { Chris@16: if( !m_message ) Chris@16: m_message.reset( new wrap_stringstream ); Chris@16: Chris@16: return *m_message; Chris@16: } Chris@16: const_string message() const { return !m_message ? const_string() : const_string( m_message->str() ); } Chris@16: Chris@16: private: Chris@16: // Data members Chris@16: shared_ptr m_message; Chris@16: }; Chris@16: Chris@16: } // namespace test_tools Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER