1 /*
2  *  Created by Phil on 29/11/2010.
3  *  Copyright 2010 Two Blue Cubes Ltd. All rights reserved.
4  *
5  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
6  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7  */
8 
9 #include "catch.hpp"
10 
11 namespace { namespace BDDTests {
12 
13 #ifndef BDD_TEST_HELPERS_INCLUDED // Don't compile this more than once per TU
14 #define BDD_TEST_HELPERS_INCLUDED
15 
itDoesThis()16     inline bool itDoesThis() { return true; }
17 
itDoesThat()18     inline bool itDoesThat() { return true; }
19 
20     namespace {
21 
22 // a trivial fixture example to support SCENARIO_METHOD tests
23         struct Fixture {
Fixture__anon5213533a0111::BDDTests::__anon5213533a0211::Fixture24             Fixture()
25                     : d_counter(0) {
26             }
27 
counter__anon5213533a0111::BDDTests::__anon5213533a0211::Fixture28             int counter() {
29                 return d_counter++;
30             }
31 
32             int d_counter;
33         };
34 
35     }
36 #endif
37 
38     SCENARIO("Do that thing with the thing", "[Tags]") {
39         GIVEN("This stuff exists") {
40             // make stuff exist
41             AND_GIVEN("And some assumption") {
42                 // Validate assumption
43                 WHEN("I do this") {
44                     // do this
45                     THEN("it should do this") {
46                         REQUIRE(itDoesThis());
47                         AND_THEN("do that")REQUIRE(itDoesThat());
48                     }
49                 }
50             }
51         }
52     }
53 
54     SCENARIO("Vector resizing affects size and capacity", "[vector][bdd][size][capacity]") {
55         GIVEN("an empty vector") {
56             std::vector<int> v;
57             REQUIRE(v.size() == 0);
58 
59             WHEN("it is made larger") {
60                 v.resize(10);
61                 THEN("the size and capacity go up") {
62                     REQUIRE(v.size() == 10);
63                     REQUIRE(v.capacity() >= 10);
64 
65                     AND_WHEN("it is made smaller again") {
66                         v.resize(5);
67                         THEN("the size goes down but the capacity stays the same") {
68                             REQUIRE(v.size() == 5);
69                             REQUIRE(v.capacity() >= 10);
70                         }
71                     }
72                 }
73             }
74 
75             WHEN("we reserve more space") {
76                 v.reserve(10);
77                 THEN("The capacity is increased but the size remains the same") {
78                     REQUIRE(v.capacity() >= 10);
79                     REQUIRE(v.size() == 0);
80                 }
81             }
82         }
83     }
84 
85     SCENARIO("This is a really long scenario name to see how the list command deals with wrapping",
86              "[very long tags][lots][long][tags][verbose]"
87                      "[one very long tag name that should cause line wrapping writing out using the list command]"
88                      "[anotherReallyLongTagNameButThisOneHasNoObviousWrapPointsSoShouldSplitWithinAWordUsingADashCharacter]") {
89         GIVEN("A section name that is so long that it cannot fit in a single console width")WHEN(
90                     "The test headers are printed as part of the normal running of the scenario")THEN(
91                         "The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent")SUCCEED(
92                             "boo!");
93     }
94 
95     SCENARIO_METHOD(Fixture,
96                     "BDD tests requiring Fixtures to provide commonly-accessed data or methods",
97                     "[bdd][fixtures]") {
98         const int before(counter());
99         GIVEN("No operations precede me") {
100             REQUIRE(before == 0);
101             WHEN("We get the count") {
102                 const int after(counter());
103                 THEN("Subsequently values are higher") {
104                     REQUIRE(after > before);
105                 }
106             }
107         }
108     }
109 
110 }} // namespace BDDtests
111