Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2001-2008.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : enhanced result for test predicate that include message explaining failure
|
Chris@16
|
13 // ***************************************************************************
|
Chris@16
|
14
|
Chris@16
|
15 #ifndef BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
|
Chris@16
|
16 #define BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
|
Chris@16
|
17
|
Chris@16
|
18 // Boost.Test
|
Chris@16
|
19 #include <boost/test/utils/class_properties.hpp>
|
Chris@16
|
20 #include <boost/test/utils/wrap_stringstream.hpp>
|
Chris@16
|
21 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
|
Chris@16
|
22
|
Chris@16
|
23 // Boost
|
Chris@16
|
24 #include <boost/shared_ptr.hpp>
|
Chris@16
|
25 #include <boost/detail/workaround.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 // STL
|
Chris@16
|
28 #include <cstddef> // for std::size_t
|
Chris@16
|
29
|
Chris@16
|
30 #include <boost/test/detail/suppress_warnings.hpp>
|
Chris@16
|
31
|
Chris@16
|
32 //____________________________________________________________________________//
|
Chris@16
|
33
|
Chris@16
|
34 namespace boost {
|
Chris@16
|
35
|
Chris@16
|
36 namespace test_tools {
|
Chris@16
|
37
|
Chris@16
|
38 // ************************************************************************** //
|
Chris@16
|
39 // ************** predicate_result ************** //
|
Chris@16
|
40 // ************************************************************************** //
|
Chris@16
|
41
|
Chris@16
|
42 class BOOST_TEST_DECL predicate_result {
|
Chris@16
|
43 typedef unit_test::const_string const_string;
|
Chris@16
|
44 struct dummy { void nonnull() {}; };
|
Chris@16
|
45 typedef void (dummy::*safe_bool)();
|
Chris@16
|
46
|
Chris@16
|
47 public:
|
Chris@16
|
48 // Constructor
|
Chris@16
|
49 predicate_result( bool pv_ )
|
Chris@16
|
50 : p_predicate_value( pv_ )
|
Chris@16
|
51 {}
|
Chris@16
|
52
|
Chris@16
|
53 template<typename BoolConvertable>
|
Chris@16
|
54 predicate_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {}
|
Chris@16
|
55
|
Chris@16
|
56 // Access methods
|
Chris@16
|
57 bool operator!() const { return !p_predicate_value; }
|
Chris@16
|
58 void operator=( bool pv_ ) { p_predicate_value.value = pv_; }
|
Chris@16
|
59 operator safe_bool() const { return !!p_predicate_value ? &dummy::nonnull : 0; }
|
Chris@16
|
60
|
Chris@16
|
61 // Public properties
|
Chris@16
|
62 BOOST_READONLY_PROPERTY( bool, (predicate_result) ) p_predicate_value;
|
Chris@16
|
63
|
Chris@16
|
64 // Access methods
|
Chris@16
|
65 bool has_empty_message() const { return !m_message; }
|
Chris@16
|
66 wrap_stringstream& message()
|
Chris@16
|
67 {
|
Chris@16
|
68 if( !m_message )
|
Chris@16
|
69 m_message.reset( new wrap_stringstream );
|
Chris@16
|
70
|
Chris@16
|
71 return *m_message;
|
Chris@16
|
72 }
|
Chris@16
|
73 const_string message() const { return !m_message ? const_string() : const_string( m_message->str() ); }
|
Chris@16
|
74
|
Chris@16
|
75 private:
|
Chris@16
|
76 // Data members
|
Chris@16
|
77 shared_ptr<wrap_stringstream> m_message;
|
Chris@16
|
78 };
|
Chris@16
|
79
|
Chris@16
|
80 } // namespace test_tools
|
Chris@16
|
81
|
Chris@16
|
82 } // namespace boost
|
Chris@16
|
83
|
Chris@16
|
84 //____________________________________________________________________________//
|
Chris@16
|
85
|
Chris@16
|
86 #include <boost/test/detail/enable_warnings.hpp>
|
Chris@16
|
87
|
Chris@16
|
88 #endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
|