1 //          Copyright Joakim Karlsson & Kim Gräsman 2010-2012.
2 // Distributed under the Boost Software License, Version 1.0.
3 //    (See accompanying file LICENSE_1_0.txt or copy at
4 //          http://www.boost.org/LICENSE_1_0.txt)
5 
6 #ifndef SNOWHOUSE_EQUALSCONSTRAINT_H
7 #define SNOWHOUSE_EQUALSCONSTRAINT_H
8 
9 #include "expressions/expression.h"
10 
11 namespace snowhouse
12 {
13   template<typename ExpectedType>
14   struct EqualsConstraint : Expression<EqualsConstraint<ExpectedType> >
15   {
EqualsConstraintEqualsConstraint16     EqualsConstraint(const ExpectedType& expected)
17         : m_expected(expected)
18     {
19     }
20 
21     template<typename ActualType>
operatorEqualsConstraint22     bool operator()(const ActualType& actual) const
23     {
24       return (m_expected == actual);
25     }
26 
27     ExpectedType m_expected;
28   };
29 
30   template<typename ExpectedType>
Equals(const ExpectedType & expected)31   inline EqualsConstraint<ExpectedType> Equals(const ExpectedType& expected)
32   {
33     return EqualsConstraint<ExpectedType>(expected);
34   }
35 
Equals(const char * expected)36   inline EqualsConstraint<std::string> Equals(const char* expected)
37   {
38     return EqualsConstraint<std::string>(expected);
39   }
40 
IsFalse()41   inline EqualsConstraint<bool> IsFalse()
42   {
43     return EqualsConstraint<bool>(false);
44   }
45 
IsTrue()46   inline EqualsConstraint<bool> IsTrue()
47   {
48     return EqualsConstraint<bool>(true);
49   }
50 
51 #ifdef SNOWHOUSE_HAS_NULLPTR
IsNull()52   inline EqualsConstraint<std::nullptr_t> IsNull()
53   {
54     return EqualsConstraint<std::nullptr_t>(nullptr);
55   }
56 #endif
57 
58   template<>
59   struct Stringizer<EqualsConstraint<bool> >
60   {
61     static std::string ToString(const EqualsConstraint<bool>& constraint)
62     {
63       return constraint.m_expected ? "true" : "false";
64     }
65   };
66 
67   template<typename ExpectedType>
68   struct Stringizer<EqualsConstraint<ExpectedType> >
69   {
70     static std::string ToString(const EqualsConstraint<ExpectedType>& constraint)
71     {
72       std::ostringstream builder;
73       builder << "equal to " << snowhouse::Stringize(constraint.m_expected);
74 
75       return builder.str();
76     }
77   };
78 }
79 
80 #endif
81