mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-14 01:39:54 +01:00
165 lines
4.8 KiB
C++
165 lines
4.8 KiB
C++
/*
|
|
* Created by Phil on 20/07/2013.
|
|
* Copyright 2013 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)
|
|
*/
|
|
|
|
#ifdef __clang__
|
|
#pragma clang diagnostic ignored "-Wpadded"
|
|
#endif
|
|
|
|
#include "internal/catch_test_case_tracker.hpp"
|
|
|
|
#include "catch.hpp"
|
|
|
|
TEST_CASE( "section tracking" ) {
|
|
|
|
using namespace Catch;
|
|
TestCaseTracker testCaseTracker( "test case" );
|
|
|
|
const std::string section1Name = "section 1";
|
|
const std::string section2Name = "section 2";
|
|
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
SECTION( "test case with no sections" ) {
|
|
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
}
|
|
CHECK( testCaseTracker.isCompleted() );
|
|
}
|
|
|
|
SECTION( "test case with one section" ) {
|
|
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section1Name ) );
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// Leave test case - incomplete (still need to visit section)
|
|
}
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// ...
|
|
|
|
// Enter test case again
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section? - yes
|
|
CHECK( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Leave section and test case - now complete
|
|
testCaseTracker.leaveSection();
|
|
}
|
|
CHECK( testCaseTracker.isCompleted() );
|
|
}
|
|
|
|
SECTION( "test case with two consecutive sections" ) {
|
|
|
|
// Enter test case
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Enter section 2? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section2Name ) );
|
|
|
|
// Leave test case - incomplete (still need to visit sections)
|
|
}
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// ...
|
|
|
|
// Enter test case again
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - yes
|
|
CHECK( testCaseTracker.enterSection( section1Name ) );
|
|
testCaseTracker.leaveSection();
|
|
|
|
// Enter section 2? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section2Name ) );
|
|
|
|
// Leave test case - incomplete (still need to visit section 2)
|
|
}
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// ...
|
|
|
|
// Enter test case again
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - no, already done now
|
|
CHECK_FALSE( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Enter section 2? - yes - finally
|
|
CHECK( testCaseTracker.enterSection( section2Name ) );
|
|
testCaseTracker.leaveSection();
|
|
|
|
// Leave test case - now complete
|
|
}
|
|
CHECK( testCaseTracker.isCompleted() );
|
|
}
|
|
|
|
SECTION( "test case with one section within another" ) {
|
|
|
|
// Enter test case
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Leave test case - incomplete (still need to visit sections)
|
|
}
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// ...
|
|
|
|
// Enter test case again
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - yes
|
|
CHECK( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Enter section 2? - no, not yet
|
|
CHECK_FALSE( testCaseTracker.enterSection( section2Name ) );
|
|
|
|
testCaseTracker.leaveSection(); // section 1 - incomplete (section 2)
|
|
|
|
// Leave test case - incomplete
|
|
}
|
|
CHECK_FALSE( testCaseTracker.isCompleted() );
|
|
|
|
// ...
|
|
|
|
// Enter test case again
|
|
{
|
|
TestCaseTracker::Guard guard( testCaseTracker );
|
|
|
|
// Enter section 1? - yes - so we can execute section 2
|
|
CHECK( testCaseTracker.enterSection( section1Name ) );
|
|
|
|
// Enter section 2? - yes - finally
|
|
CHECK( testCaseTracker.enterSection( section2Name ) );
|
|
testCaseTracker.leaveSection(); // section 2
|
|
testCaseTracker.leaveSection(); // section 1
|
|
|
|
// Leave test case - now complete
|
|
}
|
|
CHECK( testCaseTracker.isCompleted() );
|
|
}
|
|
}
|