| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Created by Phil on 1/10/2015. | 
					
						
							|  |  |  |  *  Copyright 2015 Two Blue Cubes Ltd | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  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)
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #include "internal/catch_suppress_warnings.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-07 11:24:33 +01:00
										 |  |  | #include "internal/catch_test_case_tracker.h"
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "catch.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace Catch; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 11:13:07 +02:00
										 |  |  | namespace { | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  | Catch::TestCaseTracking::NameAndLocation makeNAL( std::string const& name ) { | 
					
						
							| 
									
										
										
										
											2017-08-08 01:02:24 +01:00
										 |  |  |     return Catch::TestCaseTracking::NameAndLocation( name, Catch::SourceLineInfo("",0) ); | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-02 11:13:07 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  | TEST_CASE( "Tracker" ) { | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |     TrackerContext ctx; | 
					
						
							|  |  |  |     ctx.startRun(); | 
					
						
							|  |  |  |     ctx.startCycle(); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ITracker& testCase = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |     REQUIRE( testCase.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |     ITracker& s1 = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |     REQUIRE( s1.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |     SECTION( "successfully close one section" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         s1.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |         REQUIRE( s1.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |         REQUIRE( testCase.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         testCase.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |         REQUIRE( ctx.completedCycle() ); | 
					
						
							|  |  |  |         REQUIRE( testCase.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |     SECTION( "fail one section" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         s1.fail(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |         REQUIRE( s1.isComplete() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:44:48 +01:00
										 |  |  |         REQUIRE( s1.isSuccessfullyCompleted() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |         REQUIRE( testCase.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         testCase.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |         REQUIRE( ctx.completedCycle() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:44:48 +01:00
										 |  |  |         REQUIRE( testCase.isSuccessfullyCompleted() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |         SECTION( "re-enter after failed section" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             ctx.startCycle(); | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( testCase2.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:02:40 +00:00
										 |  |  |             REQUIRE( s1b.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             testCase2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( ctx.completedCycle() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |             REQUIRE( testCase.isComplete() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( testCase.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |         SECTION( "re-enter after failed section and find next section" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             ctx.startCycle(); | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( testCase2.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( s1b.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             REQUIRE( s2.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             s2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( ctx.completedCycle() ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             testCase2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |             REQUIRE( testCase.isComplete() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( testCase.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |     SECTION( "successfully close one section, then find another" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         s1.close(); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |         ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         REQUIRE( s2.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         testCase.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |         REQUIRE( testCase.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |         SECTION( "Re-enter - skips S1 and enters S2" ) { | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             ctx.startCycle(); | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |             REQUIRE( testCase2.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:44:48 +01:00
										 |  |  |             REQUIRE( s1b.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |             ITracker& s2b = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             REQUIRE( s2b.isOpen() ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             REQUIRE( ctx.completedCycle() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             SECTION ("Successfully close S2") { | 
					
						
							|  |  |  |                 s2b.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( ctx.completedCycle() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( s2b.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |                 REQUIRE( testCase2.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |                 testCase2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( testCase2.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |             SECTION ("fail S2") { | 
					
						
							|  |  |  |                 s2b.fail(); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( ctx.completedCycle() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 08:33:50 +00:00
										 |  |  |                 REQUIRE( s2b.isComplete() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:44:48 +01:00
										 |  |  |                 REQUIRE( s2b.isSuccessfullyCompleted() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |                 testCase2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:44:48 +01:00
										 |  |  |                 REQUIRE( testCase2.isSuccessfullyCompleted() == false ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 // Need a final cycle
 | 
					
						
							|  |  |  |                 ctx.startCycle(); | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |                 ITracker& testCase3 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( testCase3.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |                 ITracker& s1c = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( s1c.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |                 ITracker& s2c = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 REQUIRE( s2c.isOpen() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |                 testCase3.close(); | 
					
						
							|  |  |  |                 REQUIRE( testCase3.isSuccessfullyCompleted() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 09:20:37 +01:00
										 |  |  |     SECTION( "open a nested section" ) { | 
					
						
							| 
									
										
										
										
											2017-01-12 17:10:38 +00:00
										 |  |  |         ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); | 
					
						
							| 
									
										
										
										
											2015-10-29 08:17:55 +00:00
										 |  |  |         REQUIRE( s2.isOpen() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         s2.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 19:25:27 +00:00
										 |  |  |         REQUIRE( s2.isComplete() ); | 
					
						
							|  |  |  |         REQUIRE( s1.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         s1.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 19:25:27 +00:00
										 |  |  |         REQUIRE( s1.isComplete() ); | 
					
						
							|  |  |  |         REQUIRE( testCase.isComplete() == false ); | 
					
						
							| 
									
										
										
										
											2015-11-04 18:01:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |         testCase.close(); | 
					
						
							| 
									
										
										
										
											2015-10-29 19:25:27 +00:00
										 |  |  |         REQUIRE( testCase.isComplete() ); | 
					
						
							| 
									
										
										
										
											2015-10-23 18:20:33 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-01-15 23:13:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | static bool previouslyRun = false; | 
					
						
							|  |  |  | static bool previouslyRunNested = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE( "#1394", "[.][approvals][tracker]" ) { | 
					
						
							|  |  |  |     // -- Don't re-run after specified section is done
 | 
					
						
							|  |  |  |     REQUIRE(previouslyRun == false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SECTION( "RunSection" ) { | 
					
						
							|  |  |  |         previouslyRun = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     SECTION( "SkipSection" ) { | 
					
						
							|  |  |  |         // cause an error if this section is called because it shouldn't be
 | 
					
						
							|  |  |  |         REQUIRE(1 == 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE( "#1394 nested", "[.][approvals][tracker]" ) { | 
					
						
							|  |  |  |     REQUIRE(previouslyRunNested == false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SECTION( "NestedRunSection" ) { | 
					
						
							|  |  |  |         SECTION( "s1" ) { | 
					
						
							|  |  |  |             previouslyRunNested = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     SECTION( "NestedSkipSection" ) { | 
					
						
							|  |  |  |         // cause an error if this section is called because it shouldn't be
 | 
					
						
							|  |  |  |         REQUIRE(1 == 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-30 00:00:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Selecting a "not last" section inside a test case via -c "section" would
 | 
					
						
							|  |  |  | // previously only run the first subsection, instead of running all of them.
 | 
					
						
							|  |  |  | // This allows us to check that `"#1670 regression check" -c A` leads to
 | 
					
						
							|  |  |  | // 2 successful assertions.
 | 
					
						
							|  |  |  | TEST_CASE("#1670 regression check", "[.approvals][tracker]") { | 
					
						
							|  |  |  |     SECTION("A") { | 
					
						
							|  |  |  |         SECTION("1") SUCCEED(); | 
					
						
							|  |  |  |         SECTION("2") SUCCEED(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     SECTION("B") { | 
					
						
							|  |  |  |         SECTION("1") SUCCEED(); | 
					
						
							|  |  |  |         SECTION("2") SUCCEED(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |