| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | /* *  Created by Phil on 14/8/2012. *  Copyright 2010 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_TEST_SPEC_HPP_INCLUDED#define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED#ifdef __clang__#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wpadded"#endif#include "catch_wildcard_pattern.h"#include "catch_test_case_info.h"#include <string>#include <vector>#include <memory>namespace Catch {    struct IConfig;    class TestSpec {        class Pattern {        public:            explicit Pattern( std::string const& name );            virtual ~Pattern();            virtual bool matches( TestCaseInfo const& testCase ) const = 0;            std::string const& name() const;        private:            std::string const m_name;        };        using PatternPtr = std::shared_ptr<Pattern>;        class NamePattern : public Pattern {        public:            explicit NamePattern( std::string const& name, std::string const& filterString );            bool matches( TestCaseInfo const& testCase ) const override;        private:            WildcardPattern m_wildcardPattern;        };        class TagPattern : public Pattern {        public:            explicit TagPattern( std::string const& tag, std::string const& filterString );            bool matches( TestCaseInfo const& testCase ) const override;        private:            std::string m_tag;        };        class ExcludedPattern : public Pattern {        public:            explicit ExcludedPattern( PatternPtr const& underlyingPattern );            bool matches( TestCaseInfo const& testCase ) const override;        private:            PatternPtr m_underlyingPattern;        };        struct Filter {            std::vector<PatternPtr> m_patterns;            bool matches( TestCaseInfo const& testCase ) const;            std::string name() const;        };    public:        struct FilterMatch {            std::string name;            std::vector<TestCase const*> tests;        };        using Matches = std::vector<FilterMatch>;        using vectorStrings = std::vector<std::string>;        bool hasFilters() const;        bool matches( TestCaseInfo const& testCase ) const;        Matches matchesByFilter( std::vector<TestCase> const& testCases, IConfig const& config ) const;        const vectorStrings & getInvalidArgs() const;    private:        std::vector<Filter> m_filters;        std::vector<std::string> m_invalidArgs;        friend class TestSpecParser;    };}#ifdef __clang__#pragma clang diagnostic pop#endif#endif // TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED
 |