mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Moved catch_test_spec.h to catch_test_spec.hpp
This commit is contained in:
		| @@ -11,7 +11,7 @@ | |||||||
| #include "internal/catch_commandline.hpp" | #include "internal/catch_commandline.hpp" | ||||||
| #include "internal/catch_list.hpp" | #include "internal/catch_list.hpp" | ||||||
| #include "internal/catch_runner_impl.hpp" | #include "internal/catch_runner_impl.hpp" | ||||||
| #include "internal/catch_test_spec.h" | #include "internal/catch_test_spec.hpp" | ||||||
| #include "internal/catch_version.h" | #include "internal/catch_version.h" | ||||||
| #include "internal/catch_text.h" | #include "internal/catch_text.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ | |||||||
| #include "catch_test_case_info.h" | #include "catch_test_case_info.h" | ||||||
| #include "catch_capture.hpp" | #include "catch_capture.hpp" | ||||||
| #include "catch_totals.hpp" | #include "catch_totals.hpp" | ||||||
| #include "catch_test_spec.h" | #include "catch_test_spec.hpp" | ||||||
| #include "catch_test_case_tracker.hpp" | #include "catch_test_case_tracker.hpp" | ||||||
| #include "catch_timer.h" | #include "catch_timer.h" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ | |||||||
| #ifndef TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED | #ifndef TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED | ||||||
| #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED | #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED | ||||||
|  |  | ||||||
| #include "catch_test_spec.h" | #include "catch_test_spec.hpp" | ||||||
| #include "catch_test_case_info.h" | #include "catch_test_case_info.h" | ||||||
| #include "catch_interfaces_testcase.h" | #include "catch_interfaces_testcase.h" | ||||||
| #include "catch_tags.h" | #include "catch_tags.h" | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ | |||||||
|  |  | ||||||
| #include "catch_test_registry.hpp" | #include "catch_test_registry.hpp" | ||||||
| #include "catch_test_case_info.h" | #include "catch_test_case_info.h" | ||||||
| #include "catch_test_spec.h" | #include "catch_test_spec.hpp" | ||||||
| #include "catch_context.h" | #include "catch_context.h" | ||||||
|  |  | ||||||
| #include <vector> | #include <vector> | ||||||
|   | |||||||
| @@ -1,118 +0,0 @@ | |||||||
| /* |  | ||||||
|  *  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_H_INCLUDED |  | ||||||
| #define TWOBLUECUBES_CATCH_TEST_SPEC_H_INCLUDED |  | ||||||
|  |  | ||||||
| #ifdef __clang__ |  | ||||||
| #pragma clang diagnostic push |  | ||||||
| #pragma clang diagnostic ignored "-Wpadded" |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include "catch_test_case_info.h" |  | ||||||
|  |  | ||||||
| #include <string> |  | ||||||
| #include <vector> |  | ||||||
|  |  | ||||||
| namespace Catch { |  | ||||||
|  |  | ||||||
|     class TestSpec { |  | ||||||
|         struct Pattern : SharedImpl<> { |  | ||||||
|             virtual ~Pattern(); |  | ||||||
|             virtual bool matches( TestCaseInfo const& testCase ) const = 0; |  | ||||||
|         }; |  | ||||||
|         class NamePattern : public Pattern { |  | ||||||
|             enum WildcardPosition { |  | ||||||
|                 NoWildcard = 0, |  | ||||||
|                 WildcardAtStart = 1, |  | ||||||
|                 WildcardAtEnd = 2, |  | ||||||
|                 WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd |  | ||||||
|             }; |  | ||||||
|  |  | ||||||
|         public: |  | ||||||
|             NamePattern( std::string const& name ) : m_name( toLower( name ) ), m_wildcard( NoWildcard ) { |  | ||||||
|                 if( startsWith( m_name, "*" ) ) { |  | ||||||
|                     m_name = name.substr( 1 ); |  | ||||||
|                     m_wildcard = WildcardAtStart; |  | ||||||
|                 } |  | ||||||
|                 if( endsWith( m_name, "*" ) ) { |  | ||||||
|                     m_name = m_name.substr( 0, m_name.size()-1 ); |  | ||||||
|                     m_wildcard = (WildcardPosition)( m_wildcard | WildcardAtEnd ); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             virtual ~NamePattern(); |  | ||||||
|             virtual bool matches( TestCaseInfo const& testCase ) const { |  | ||||||
|                 switch( m_wildcard ) { |  | ||||||
|                     case NoWildcard: |  | ||||||
|                         return m_name == toLower( testCase.name ); |  | ||||||
|                     case WildcardAtStart: |  | ||||||
|                         return endsWith( toLower( testCase.name ), m_name ); |  | ||||||
|                     case WildcardAtEnd: |  | ||||||
|                         return startsWith( toLower( testCase.name ), m_name ); |  | ||||||
|                     case WildcardAtBothEnds: |  | ||||||
|                         return contains( toLower( testCase.name ), m_name ); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         private: |  | ||||||
|             std::string m_name; |  | ||||||
|             WildcardPosition m_wildcard; |  | ||||||
|         }; |  | ||||||
|         class TagPattern : public Pattern { |  | ||||||
|         public: |  | ||||||
|             TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} |  | ||||||
|             virtual ~TagPattern(); |  | ||||||
|             virtual bool matches( TestCaseInfo const& testCase ) const { |  | ||||||
|                 return testCase.tags.find( m_tag ) != testCase.tags.end(); |  | ||||||
|             } |  | ||||||
|         private: |  | ||||||
|             std::string m_tag; |  | ||||||
|         }; |  | ||||||
|         class ExcludedPattern : public Pattern { |  | ||||||
|         public: |  | ||||||
|             ExcludedPattern( Ptr<Pattern> const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} |  | ||||||
|             virtual ~ExcludedPattern(); |  | ||||||
|             virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } |  | ||||||
|         private: |  | ||||||
|             Ptr<Pattern> m_underlyingPattern; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         struct Filter { |  | ||||||
|             std::vector<Ptr<Pattern> > m_patterns; |  | ||||||
|  |  | ||||||
|             bool matches( TestCaseInfo const& testCase ) const { |  | ||||||
|                 // All patterns in a filter must match for the filter to be a match |  | ||||||
|                 for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) |  | ||||||
|                     if( !(*it)->matches( testCase ) ) |  | ||||||
|                         return false; |  | ||||||
|                     return true; |  | ||||||
|             } |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|     public: |  | ||||||
|         bool hasFilters() const { |  | ||||||
|             return !m_filters.empty(); |  | ||||||
|         } |  | ||||||
|         bool matches( TestCaseInfo const& testCase ) const { |  | ||||||
|             // A TestSpec matches if any filter matches |  | ||||||
|             for( std::vector<Filter>::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) |  | ||||||
|                 if( it->matches( testCase ) ) |  | ||||||
|                     return true; |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     private: |  | ||||||
|         std::vector<Filter> m_filters; |  | ||||||
|  |  | ||||||
|         friend class TestSpecParser; |  | ||||||
|     }; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #ifdef __clang__ |  | ||||||
| #pragma clang diagnostic pop |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #endif // TWOBLUECUBES_CATCH_TEST_SPEC_H_INCLUDED |  | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| /* | /* | ||||||
|  *  Created by Phil on 2/12/2013. |  *  Created by Phil on 14/8/2012. | ||||||
|  *  Copyright 2013 Two Blue Cubes Ltd. All rights reserved. |  *  Copyright 2010 Two Blue Cubes Ltd. All rights reserved. | ||||||
|  * |  * | ||||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying |  *  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) |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||||||
| @@ -8,8 +8,111 @@ | |||||||
| #ifndef TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | #ifndef TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | ||||||
| #define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | #define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | ||||||
|  |  | ||||||
| #include "catch_test_spec.hpp" | #ifdef __clang__ | ||||||
|  | #pragma clang diagnostic push | ||||||
|  | #pragma clang diagnostic ignored "-Wpadded" | ||||||
|  | #endif | ||||||
|  |  | ||||||
| // deprecated | #include "catch_test_case_info.h" | ||||||
|  |  | ||||||
|  | #include <string> | ||||||
|  | #include <vector> | ||||||
|  |  | ||||||
|  | namespace Catch { | ||||||
|  |  | ||||||
|  |     class TestSpec { | ||||||
|  |         struct Pattern : SharedImpl<> { | ||||||
|  |             virtual ~Pattern(); | ||||||
|  |             virtual bool matches( TestCaseInfo const& testCase ) const = 0; | ||||||
|  |         }; | ||||||
|  |         class NamePattern : public Pattern { | ||||||
|  |             enum WildcardPosition { | ||||||
|  |                 NoWildcard = 0, | ||||||
|  |                 WildcardAtStart = 1, | ||||||
|  |                 WildcardAtEnd = 2, | ||||||
|  |                 WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |         public: | ||||||
|  |             NamePattern( std::string const& name ) : m_name( toLower( name ) ), m_wildcard( NoWildcard ) { | ||||||
|  |                 if( startsWith( m_name, "*" ) ) { | ||||||
|  |                     m_name = name.substr( 1 ); | ||||||
|  |                     m_wildcard = WildcardAtStart; | ||||||
|  |                 } | ||||||
|  |                 if( endsWith( m_name, "*" ) ) { | ||||||
|  |                     m_name = m_name.substr( 0, m_name.size()-1 ); | ||||||
|  |                     m_wildcard = (WildcardPosition)( m_wildcard | WildcardAtEnd ); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             virtual ~NamePattern(); | ||||||
|  |             virtual bool matches( TestCaseInfo const& testCase ) const { | ||||||
|  |                 switch( m_wildcard ) { | ||||||
|  |                     case NoWildcard: | ||||||
|  |                         return m_name == toLower( testCase.name ); | ||||||
|  |                     case WildcardAtStart: | ||||||
|  |                         return endsWith( toLower( testCase.name ), m_name ); | ||||||
|  |                     case WildcardAtEnd: | ||||||
|  |                         return startsWith( toLower( testCase.name ), m_name ); | ||||||
|  |                     case WildcardAtBothEnds: | ||||||
|  |                         return contains( toLower( testCase.name ), m_name ); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         private: | ||||||
|  |             std::string m_name; | ||||||
|  |             WildcardPosition m_wildcard; | ||||||
|  |         }; | ||||||
|  |         class TagPattern : public Pattern { | ||||||
|  |         public: | ||||||
|  |             TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} | ||||||
|  |             virtual ~TagPattern(); | ||||||
|  |             virtual bool matches( TestCaseInfo const& testCase ) const { | ||||||
|  |                 return testCase.tags.find( m_tag ) != testCase.tags.end(); | ||||||
|  |             } | ||||||
|  |         private: | ||||||
|  |             std::string m_tag; | ||||||
|  |         }; | ||||||
|  |         class ExcludedPattern : public Pattern { | ||||||
|  |         public: | ||||||
|  |             ExcludedPattern( Ptr<Pattern> const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} | ||||||
|  |             virtual ~ExcludedPattern(); | ||||||
|  |             virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } | ||||||
|  |         private: | ||||||
|  |             Ptr<Pattern> m_underlyingPattern; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         struct Filter { | ||||||
|  |             std::vector<Ptr<Pattern> > m_patterns; | ||||||
|  |  | ||||||
|  |             bool matches( TestCaseInfo const& testCase ) const { | ||||||
|  |                 // All patterns in a filter must match for the filter to be a match | ||||||
|  |                 for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) | ||||||
|  |                     if( !(*it)->matches( testCase ) ) | ||||||
|  |                         return false; | ||||||
|  |                     return true; | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |     public: | ||||||
|  |         bool hasFilters() const { | ||||||
|  |             return !m_filters.empty(); | ||||||
|  |         } | ||||||
|  |         bool matches( TestCaseInfo const& testCase ) const { | ||||||
|  |             // A TestSpec matches if any filter matches | ||||||
|  |             for( std::vector<Filter>::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) | ||||||
|  |                 if( it->matches( testCase ) ) | ||||||
|  |                     return true; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     private: | ||||||
|  |         std::vector<Filter> m_filters; | ||||||
|  |  | ||||||
|  |         friend class TestSpecParser; | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifdef __clang__ | ||||||
|  | #pragma clang diagnostic pop | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #endif // TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | #endif // TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ | |||||||
| #pragma clang diagnostic ignored "-Wpadded" | #pragma clang diagnostic ignored "-Wpadded" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include "catch_test_spec.h" | #include "catch_test_spec.hpp" | ||||||
|  |  | ||||||
| namespace Catch { | namespace Catch { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,2 @@ | |||||||
| // This file is only here to verify (to the extent possible) the self sufficiency of the header | // This file is only here to verify (to the extent possible) the self sufficiency of the header | ||||||
| #include "catch_test_spec.h" | #include "catch_test_spec.hpp" | ||||||
|   | |||||||
| @@ -93,7 +93,6 @@ | |||||||
| 		26DACF2F17206D3400A21326 /* catch_text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_text.h; sourceTree = "<group>"; }; | 		26DACF2F17206D3400A21326 /* catch_text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_text.h; sourceTree = "<group>"; }; | ||||||
| 		26E1B7D119213BC900812682 /* CmdLineTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CmdLineTests.cpp; path = ../../../SelfTest/CmdLineTests.cpp; sourceTree = "<group>"; }; | 		26E1B7D119213BC900812682 /* CmdLineTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CmdLineTests.cpp; path = ../../../SelfTest/CmdLineTests.cpp; sourceTree = "<group>"; }; | ||||||
| 		4A084F1C15DACEEA0027E631 /* catch_test_case_info.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_test_case_info.hpp; sourceTree = "<group>"; }; | 		4A084F1C15DACEEA0027E631 /* catch_test_case_info.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_test_case_info.hpp; sourceTree = "<group>"; }; | ||||||
| 		4A084F1D15DAD15F0027E631 /* catch_test_spec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_test_spec.h; sourceTree = "<group>"; }; |  | ||||||
| 		4A3D7DD01503869D005F9203 /* catch_matchers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_matchers.hpp; sourceTree = "<group>"; }; | 		4A3D7DD01503869D005F9203 /* catch_matchers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_matchers.hpp; sourceTree = "<group>"; }; | ||||||
| 		4A45DA2316161EF9004F8D6B /* catch_console_colour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_console_colour.cpp; path = ../../../SelfTest/SurrogateCpps/catch_console_colour.cpp; sourceTree = "<group>"; }; | 		4A45DA2316161EF9004F8D6B /* catch_console_colour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_console_colour.cpp; path = ../../../SelfTest/SurrogateCpps/catch_console_colour.cpp; sourceTree = "<group>"; }; | ||||||
| 		4A45DA2616161F1F004F8D6B /* catch_ptr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_ptr.cpp; path = ../../../SelfTest/SurrogateCpps/catch_ptr.cpp; sourceTree = "<group>"; }; | 		4A45DA2616161F1F004F8D6B /* catch_ptr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_ptr.cpp; path = ../../../SelfTest/SurrogateCpps/catch_ptr.cpp; sourceTree = "<group>"; }; | ||||||
| @@ -333,7 +332,6 @@ | |||||||
| 			isa = PBXGroup; | 			isa = PBXGroup; | ||||||
| 			children = ( | 			children = ( | ||||||
| 				4A6D0C5F149B3E3D00DB3EAA /* catch_section.hpp */, | 				4A6D0C5F149B3E3D00DB3EAA /* catch_section.hpp */, | ||||||
| 				261488FA184C81130041FBEB /* catch_test_spec.hpp */, |  | ||||||
| 				263FD06017AF8DF200988A20 /* catch_timer.hpp */, | 				263FD06017AF8DF200988A20 /* catch_timer.hpp */, | ||||||
| 				4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */, | 				4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */, | ||||||
| 				4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */, | 				4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */, | ||||||
| @@ -388,6 +386,7 @@ | |||||||
| 		4AC91CBF155C381600DC5117 /* Test execution */ = { | 		4AC91CBF155C381600DC5117 /* Test execution */ = { | ||||||
| 			isa = PBXGroup; | 			isa = PBXGroup; | ||||||
| 			children = ( | 			children = ( | ||||||
|  | 				261488FA184C81130041FBEB /* catch_test_spec.hpp */, | ||||||
| 				2656C2221925EC6F0040DB02 /* catch_tags.h */, | 				2656C2221925EC6F0040DB02 /* catch_tags.h */, | ||||||
| 				2656C2231925EC6F0040DB02 /* catch_tags.hpp */, | 				2656C2231925EC6F0040DB02 /* catch_tags.hpp */, | ||||||
| 				2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */, | 				2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */, | ||||||
| @@ -396,7 +395,6 @@ | |||||||
| 				4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */, | 				4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */, | ||||||
| 				4A7ADB4314F631E10094FE10 /* catch_totals.hpp */, | 				4A7ADB4314F631E10094FE10 /* catch_totals.hpp */, | ||||||
| 				4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */, | 				4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */, | ||||||
| 				4A084F1D15DAD15F0027E631 /* catch_test_spec.h */, |  | ||||||
| 				26948287179EF7F900ED166E /* catch_test_case_tracker.hpp */, | 				26948287179EF7F900ED166E /* catch_test_case_tracker.hpp */, | ||||||
| 			); | 			); | ||||||
| 			name = "Test execution"; | 			name = "Test execution"; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash