| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |  *  Created by Phil on 14/08/2012. | 
					
						
							|  |  |  |  *  Copyright 2012 Two Blue Cubes Ltd. All rights reserved. | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  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)
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2012-09-17 01:42:29 -04:00
										 |  |  | #ifndef TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED
 | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-21 07:48:03 +01:00
										 |  |  | #include "catch_tags.hpp"
 | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  | #include "catch_test_case_info.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | #include "catch_interfaces_testcase.h"
 | 
					
						
							| 
									
										
										
										
											2013-03-22 19:00:42 +00:00
										 |  |  | #include "catch_common.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 23:58:23 +01:00
										 |  |  | namespace Catch { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     TestCase makeTestCase(  ITestCase* _testCase, | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |                             std::string const& _className, | 
					
						
							|  |  |  |                             std::string const& _name, | 
					
						
							|  |  |  |                             std::string const& _descOrTags, | 
					
						
							|  |  |  |                             SourceLineInfo const& _lineInfo ) | 
					
						
							| 
									
										
										
										
											2012-09-15 17:53:27 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         std::string desc = _descOrTags; | 
					
						
							| 
									
										
										
										
											2013-11-19 07:21:03 +00:00
										 |  |  |         bool isHidden( startsWith( _name, "./" ) ); // Legacy support
 | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         std::set<std::string> tags; | 
					
						
							|  |  |  |         TagExtracter( tags ).parse( desc ); | 
					
						
							| 
									
										
										
										
											2013-06-28 16:05:13 +01:00
										 |  |  |         if( tags.find( "hide" ) != tags.end() || tags.find( "." ) != tags.end() ) | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |             isHidden = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         TestCaseInfo info( _name, _className, desc, tags, isHidden, _lineInfo ); | 
					
						
							|  |  |  |         return TestCase( _testCase, info ); | 
					
						
							| 
									
										
										
										
											2012-09-15 17:53:27 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCaseInfo::TestCaseInfo( std::string const& _name, | 
					
						
							|  |  |  |                                 std::string const& _className, | 
					
						
							|  |  |  |                                 std::string const& _description, | 
					
						
							|  |  |  |                                 std::set<std::string> const& _tags, | 
					
						
							| 
									
										
										
										
											2012-11-25 21:43:36 +00:00
										 |  |  |                                 bool _isHidden, | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |                                 SourceLineInfo const& _lineInfo ) | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     :   name( _name ), | 
					
						
							|  |  |  |         className( _className ), | 
					
						
							|  |  |  |         description( _description ), | 
					
						
							|  |  |  |         tags( _tags ), | 
					
						
							| 
									
										
										
										
											2012-12-05 08:40:53 +00:00
										 |  |  |         lineInfo( _lineInfo ), | 
					
						
							|  |  |  |         isHidden( _isHidden ) | 
					
						
							| 
									
										
										
										
											2013-03-28 22:13:31 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         std::ostringstream oss; | 
					
						
							|  |  |  |         for( std::set<std::string>::const_iterator it = _tags.begin(), itEnd = _tags.end(); it != itEnd; ++it ) | 
					
						
							|  |  |  |             oss << "[" << *it << "]"; | 
					
						
							|  |  |  |         tagsAsString = oss.str(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-08-14 08:38:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCaseInfo::TestCaseInfo( TestCaseInfo const& other ) | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     :   name( other.name ), | 
					
						
							|  |  |  |         className( other.className ), | 
					
						
							|  |  |  |         description( other.description ), | 
					
						
							|  |  |  |         tags( other.tags ), | 
					
						
							| 
									
										
										
										
											2013-03-28 22:13:31 +00:00
										 |  |  |         tagsAsString( other.tagsAsString ), | 
					
						
							| 
									
										
										
										
											2012-12-05 08:40:53 +00:00
										 |  |  |         lineInfo( other.lineInfo ), | 
					
						
							| 
									
										
										
										
											2013-07-03 19:14:59 +01:00
										 |  |  |         isHidden( other.isHidden ) | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     {} | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {} | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCase::TestCase( TestCase const& other ) | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     :   TestCaseInfo( other ), | 
					
						
							|  |  |  |         test( other.test ) | 
					
						
							| 
									
										
										
										
											2012-08-23 08:38:27 +01:00
										 |  |  |     {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCase TestCase::withName( std::string const& _newName ) const { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         TestCase other( *this ); | 
					
						
							|  |  |  |         other.name = _newName; | 
					
						
							|  |  |  |         return other; | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-01-14 08:47:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     void TestCase::invoke() const { | 
					
						
							|  |  |  |         test->invoke(); | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-22 19:17:20 +00:00
										 |  |  |     bool TestCase::isHidden() const { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         return TestCaseInfo::isHidden; | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     bool TestCase::hasTag( std::string const& tag ) const { | 
					
						
							| 
									
										
										
										
											2013-03-22 19:00:42 +00:00
										 |  |  |         return tags.find( toLower( tag ) ) != tags.end(); | 
					
						
							| 
									
										
										
										
											2012-09-15 17:53:27 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     bool TestCase::matchesTags( std::string const& tagPattern ) const { | 
					
						
							| 
									
										
										
										
											2012-09-21 07:48:03 +01:00
										 |  |  |         TagExpression exp; | 
					
						
							|  |  |  |         TagExpressionParser( exp ).parse( tagPattern ); | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         return exp.matches( tags ); | 
					
						
							| 
									
										
										
										
											2012-09-21 07:48:03 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     std::set<std::string> const& TestCase::getTags() const { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         return tags; | 
					
						
							| 
									
										
										
										
											2012-09-15 17:53:27 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-22 19:17:20 +00:00
										 |  |  |     void TestCase::swap( TestCase& other ) { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         test.swap( other.test ); | 
					
						
							|  |  |  |         className.swap( other.className ); | 
					
						
							|  |  |  |         name.swap( other.name ); | 
					
						
							|  |  |  |         description.swap( other.description ); | 
					
						
							|  |  |  |         std::swap( lineInfo, other.lineInfo ); | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     bool TestCase::operator == ( TestCase const& other ) const { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         return  test.get() == other.test.get() && | 
					
						
							|  |  |  |                 name == other.name && | 
					
						
							|  |  |  |                 className == other.className; | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     bool TestCase::operator < ( TestCase const& other ) const { | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |         return name < other.name; | 
					
						
							| 
									
										
										
										
											2012-08-14 19:30:30 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCase& TestCase::operator = ( TestCase const& other ) { | 
					
						
							| 
									
										
										
										
											2012-11-22 19:17:20 +00:00
										 |  |  |         TestCase temp( other ); | 
					
						
							| 
									
										
										
										
											2012-08-23 08:38:27 +01:00
										 |  |  |         swap( temp ); | 
					
						
							|  |  |  |         return *this; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-09-21 07:48:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |     TestCaseInfo const& TestCase::getTestCaseInfo() const | 
					
						
							| 
									
										
										
										
											2012-11-25 11:19:55 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         return *this; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-21 07:48:03 +01:00
										 |  |  | } // end namespace Catch
 | 
					
						
							| 
									
										
										
										
											2011-01-07 19:57:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-17 01:42:29 -04:00
										 |  |  | #endif // TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED
 |