summaryrefslogtreecommitdiff
path: root/vendor/bandit/bandit/assertion_frameworks/matchers/Contain.h
blob: f048e3a3e7df0037ea3131483f1b0895104072c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#ifndef BANDIT_CONTAIN_H
#define BANDIT_CONTAIN_H

#include <cstring>
#include <vector>

#include "Matcher.h"

namespace bandit { namespace Matchers {

    template<typename T>
    class Contain : public Matcher
    {
    public:
        explicit Contain(const T& element) : Matcher(), _element(element) {}

        template<typename U>
        bool matches(const U& container) const
	{
	    return container.find(_element) != container.end();
	}

        template<typename U>
        bool matches(const std::vector<U>& container) const
	{
	    return std::find(container.begin(), container.end(), _element) != container.end();
	}

	bool matches(const char *const container) const
	{
	    return (_element != NULL) && (container != NULL) && (strstr(container, _element) != NULL);
	}

	bool matches(char *const container) const
	{
	    return (_element != NULL) && (container != NULL) && (strstr(container, _element) != NULL);
	}

    protected:
	std::string failure_message_end() const
	{
	    std::ostringstream ss;
	    ss << "contain <" << _element << ">";
	    return ss.str();
	}

    private:
        const T& _element;
    };

    template<typename T>
    Contain<T> contain(const T& element)
    {
        return Contain<T>(element);
    }
}}

#endif	// BANDIT_CONTAIN_H