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