mirror of https://github.com/catchorg/Catch2.git
Added a handful of "built-in" matchers
This commit is contained in:
parent
eca5637c58
commit
a6a40b3ba9
|
@ -29,6 +29,7 @@
|
||||||
#include "internal/catch_interfaces_exception.h"
|
#include "internal/catch_interfaces_exception.h"
|
||||||
#include "internal/catch_approx.hpp"
|
#include "internal/catch_approx.hpp"
|
||||||
#include "internal/catch_test_case_info.hpp"
|
#include "internal/catch_test_case_info.hpp"
|
||||||
|
#include "internal/catch_matchers.hpp"
|
||||||
|
|
||||||
#ifdef __OBJC__
|
#ifdef __OBJC__
|
||||||
#include "internal/catch_objc.hpp"
|
#include "internal/catch_objc.hpp"
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
//
|
||||||
|
// catch_matchers.hpp
|
||||||
|
// CatchSelfTest
|
||||||
|
//
|
||||||
|
// Created by Phil Nash on 04/03/2012.
|
||||||
|
// Copyright (c) 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_MATCHERS_HPP_INCLUDED
|
||||||
|
#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
|
||||||
|
|
||||||
|
namespace Catch
|
||||||
|
{
|
||||||
|
namespace Matchers
|
||||||
|
{
|
||||||
|
namespace Impl
|
||||||
|
{
|
||||||
|
namespace StdString
|
||||||
|
{
|
||||||
|
struct Contains
|
||||||
|
{
|
||||||
|
Contains( const std::string& substr ) : m_substr( substr ){}
|
||||||
|
|
||||||
|
bool operator()( const std::string& str ) const
|
||||||
|
{
|
||||||
|
return str.find( m_substr ) != std::string::npos;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend std::ostream& operator<<( std::ostream& os, const Contains& matcher )
|
||||||
|
{
|
||||||
|
os << "contains: \"" << matcher.m_substr << "\"";
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
std::string m_substr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StartsWith
|
||||||
|
{
|
||||||
|
StartsWith( const std::string& substr ) : m_substr( substr ){}
|
||||||
|
|
||||||
|
bool operator()( const std::string& str ) const
|
||||||
|
{
|
||||||
|
return str.find( m_substr ) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend std::ostream& operator<<( std::ostream& os, const StartsWith& matcher )
|
||||||
|
{
|
||||||
|
os << "starts with: \"" << matcher.m_substr << "\"";
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
std::string m_substr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct EndsWith
|
||||||
|
{
|
||||||
|
EndsWith( const std::string& substr ) : m_substr( substr ){}
|
||||||
|
|
||||||
|
bool operator()( const std::string& str ) const
|
||||||
|
{
|
||||||
|
return str.find( m_substr ) == str.size() - m_substr.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
friend std::ostream& operator<<( std::ostream& os, const EndsWith& matcher )
|
||||||
|
{
|
||||||
|
os << "ends with: \"" << matcher.m_substr << "\"";
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
std::string m_substr;
|
||||||
|
};
|
||||||
|
} // namespace StdString
|
||||||
|
} // namespace Impl
|
||||||
|
|
||||||
|
inline Impl::StdString::Contains Contains( const std::string& substr ){ return Impl::StdString::Contains( substr ); }
|
||||||
|
inline Impl::StdString::StartsWith StartsWith( const std::string& substr ){ return Impl::StdString::StartsWith( substr ); }
|
||||||
|
inline Impl::StdString::EndsWith EndsWith( const std::string& substr ){ return Impl::StdString::EndsWith( substr ); }
|
||||||
|
|
||||||
|
} // namespace Matchers
|
||||||
|
|
||||||
|
using namespace Matchers;
|
||||||
|
|
||||||
|
} // namespace Catch
|
||||||
|
|
||||||
|
#endif // TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
|
|
@ -186,33 +186,33 @@ TEST_CASE("./succeeding/atomic if", "")
|
||||||
REQUIRE(x == 0);
|
REQUIRE(x == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Matchers
|
inline const char* testStringForMatching()
|
||||||
{
|
|
||||||
struct ContainsStdString
|
|
||||||
{
|
|
||||||
ContainsStdString( const std::string& substr ) : m_substr( substr ){}
|
|
||||||
|
|
||||||
bool operator()( const std::string& str ) const
|
|
||||||
{
|
|
||||||
return str.find( m_substr ) != std::string::npos;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend std::ostream& operator<<( std::ostream& os, const ContainsStdString& matcher )
|
|
||||||
{
|
|
||||||
os << "contains: \"" << matcher.m_substr << "\"";
|
|
||||||
return os;
|
|
||||||
}
|
|
||||||
std::string m_substr;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Matchers::ContainsStdString Contains( const std::string& substr ){ return Matchers::ContainsStdString( substr ); }
|
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("./succeeding/matcher", "")
|
|
||||||
{
|
{
|
||||||
const char* actualStr = "this string contains 'abc' as a substring";
|
return "this string contains 'abc' as a substring";
|
||||||
REQUIRE_THAT( actualStr, Contains( "string" ) );
|
}
|
||||||
CHECK_THAT( actualStr, Contains( "not there" ) );
|
|
||||||
CHECK_THAT( actualStr, Contains( "a2bc" ) );
|
using namespace Catch::Matchers;
|
||||||
|
|
||||||
|
TEST_CASE("./succeeding/matchers", "")
|
||||||
|
{
|
||||||
|
REQUIRE_THAT( testStringForMatching(), Contains( "string" ) );
|
||||||
|
CHECK_THAT( testStringForMatching(), Contains( "abc" ) );
|
||||||
|
|
||||||
|
CHECK_THAT( testStringForMatching(), StartsWith( "this" ) );
|
||||||
|
CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("./failing/matchers/Contains", "")
|
||||||
|
{
|
||||||
|
CHECK_THAT( testStringForMatching(), Contains( "not there" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("./failing/matchers/StartsWith", "")
|
||||||
|
{
|
||||||
|
CHECK_THAT( testStringForMatching(), StartsWith( "string" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("./failing/matchers/EndsWith", "")
|
||||||
|
{
|
||||||
|
CHECK_THAT( testStringForMatching(), EndsWith( "this" ) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results"
|
||||||
"Number of 'succeeding' tests is fixed" )
|
"Number of 'succeeding' tests is fixed" )
|
||||||
{
|
{
|
||||||
runner.runMatching( "./succeeding/*" );
|
runner.runMatching( "./succeeding/*" );
|
||||||
CHECK( runner.getTotals().assertions.passed == 268 );
|
CHECK( runner.getTotals().assertions.passed == 272 );
|
||||||
CHECK( runner.getTotals().assertions.failed == 0 );
|
CHECK( runner.getTotals().assertions.failed == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results"
|
||||||
{
|
{
|
||||||
runner.runMatching( "./failing/*" );
|
runner.runMatching( "./failing/*" );
|
||||||
CHECK( runner.getTotals().assertions.passed == 0 );
|
CHECK( runner.getTotals().assertions.passed == 0 );
|
||||||
CHECK( runner.getTotals().assertions.failed == 68 );
|
CHECK( runner.getTotals().assertions.failed == 71 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue