forked from catchorg/Catch2
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 29/11/2010.
 | 
						|
 *  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)
 | 
						|
 */
 | 
						|
 | 
						|
#include "catch.hpp"
 | 
						|
 | 
						|
namespace { namespace BDDTests {
 | 
						|
 | 
						|
#ifndef BDD_TEST_HELPERS_INCLUDED // Don't compile this more than once per TU
 | 
						|
#define BDD_TEST_HELPERS_INCLUDED
 | 
						|
 | 
						|
    inline bool itDoesThis() { return true; }
 | 
						|
 | 
						|
    inline bool itDoesThat() { return true; }
 | 
						|
 | 
						|
    namespace {
 | 
						|
 | 
						|
// a trivial fixture example to support SCENARIO_METHOD tests
 | 
						|
        struct Fixture {
 | 
						|
            Fixture()
 | 
						|
                    : d_counter(0) {
 | 
						|
            }
 | 
						|
 | 
						|
            int counter() {
 | 
						|
                return d_counter++;
 | 
						|
            }
 | 
						|
 | 
						|
            int d_counter;
 | 
						|
        };
 | 
						|
 | 
						|
    }
 | 
						|
#endif
 | 
						|
 | 
						|
    SCENARIO("Do that thing with the thing", "[Tags]") {
 | 
						|
        GIVEN("This stuff exists") {
 | 
						|
            // make stuff exist
 | 
						|
            WHEN("I do this") {
 | 
						|
                // do this
 | 
						|
                THEN("it should do this") {
 | 
						|
                    REQUIRE(itDoesThis());
 | 
						|
                    AND_THEN("do that")REQUIRE(itDoesThat());
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    SCENARIO("Vector resizing affects size and capacity", "[vector][bdd][size][capacity]") {
 | 
						|
        GIVEN("an empty vector") {
 | 
						|
            std::vector<int> v;
 | 
						|
            REQUIRE(v.size() == 0);
 | 
						|
 | 
						|
            WHEN("it is made larger") {
 | 
						|
                v.resize(10);
 | 
						|
                THEN("the size and capacity go up") {
 | 
						|
                    REQUIRE(v.size() == 10);
 | 
						|
                    REQUIRE(v.capacity() >= 10);
 | 
						|
 | 
						|
                    AND_WHEN("it is made smaller again") {
 | 
						|
                        v.resize(5);
 | 
						|
                        THEN("the size goes down but the capacity stays the same") {
 | 
						|
                            REQUIRE(v.size() == 5);
 | 
						|
                            REQUIRE(v.capacity() >= 10);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            WHEN("we reserve more space") {
 | 
						|
                v.reserve(10);
 | 
						|
                THEN("The capacity is increased but the size remains the same") {
 | 
						|
                    REQUIRE(v.capacity() >= 10);
 | 
						|
                    REQUIRE(v.size() == 0);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    SCENARIO("This is a really long scenario name to see how the list command deals with wrapping",
 | 
						|
             "[very long tags][lots][long][tags][verbose]"
 | 
						|
                     "[one very long tag name that should cause line wrapping writing out using the list command]"
 | 
						|
                     "[anotherReallyLongTagNameButThisOneHasNoObviousWrapPointsSoShouldSplitWithinAWordUsingADashCharacter]") {
 | 
						|
        GIVEN("A section name that is so long that it cannot fit in a single console width")WHEN(
 | 
						|
                    "The test headers are printed as part of the normal running of the scenario")THEN(
 | 
						|
                        "The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent")SUCCEED(
 | 
						|
                            "boo!");
 | 
						|
    }
 | 
						|
 | 
						|
    SCENARIO_METHOD(Fixture,
 | 
						|
                    "BDD tests requiring Fixtures to provide commonly-accessed data or methods",
 | 
						|
                    "[bdd][fixtures]") {
 | 
						|
        const int before(counter());
 | 
						|
        GIVEN("No operations precede me") {
 | 
						|
            REQUIRE(before == 0);
 | 
						|
            WHEN("We get the count") {
 | 
						|
                const int after(counter());
 | 
						|
                THEN("Subsequently values are higher") {
 | 
						|
                    REQUIRE(after > before);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
}} // namespace BDDtests
 |