-
-
Notifications
You must be signed in to change notification settings - Fork 131
/
HookRegistrationTest.cpp
130 lines (114 loc) · 4.8 KB
/
HookRegistrationTest.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <gtest/gtest.h>
#include "../utils/HookRegistrationFixture.hpp"
#include <cucumber-cpp/internal/hook/HookMacros.hpp>
#define BEFORE_MARKER_1 "A"
#define BEFORE_MARKER_2 "B"
#define BEFORE_MARKER_3 "C"
BEFORE() { beforeHookCallMarker << BEFORE_MARKER_1; }
BEFORE() { beforeHookCallMarker << BEFORE_MARKER_2; }
BEFORE() { beforeHookCallMarker << BEFORE_MARKER_3; }
#define AROUND_STEP_MARKER_BEFORE_1 "D"
#define AROUND_STEP_MARKER_BEFORE_2 "E"
#define AROUND_STEP_MARKER_BEFORE_3 "F"
#define AROUND_STEP_MARKER_AFTER_3 "d"
#define AROUND_STEP_MARKER_AFTER_2 "e"
#define AROUND_STEP_MARKER_AFTER_1 "f"
AROUND_STEP() {
beforeAroundStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_1;
globalStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_1;
step->call();
globalStepHookCallMarker << AROUND_STEP_MARKER_AFTER_1;
afterAroundStepHookCallMarker << AROUND_STEP_MARKER_AFTER_1;
}
AROUND_STEP() {
beforeAroundStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_2;
globalStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_2;
step->call();
globalStepHookCallMarker << AROUND_STEP_MARKER_AFTER_2;
afterAroundStepHookCallMarker << AROUND_STEP_MARKER_AFTER_2;
}
AROUND_STEP() {
beforeAroundStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_3;
globalStepHookCallMarker << AROUND_STEP_MARKER_BEFORE_3;
step->call();
globalStepHookCallMarker << AROUND_STEP_MARKER_AFTER_3;
afterAroundStepHookCallMarker << AROUND_STEP_MARKER_AFTER_3;
}
#define AFTER_STEP_MARKER_1 "G"
#define AFTER_STEP_MARKER_2 "H"
#define AFTER_STEP_MARKER_3 "I"
AFTER_STEP() {
afterStepHookCallMarker << AFTER_STEP_MARKER_1;
globalStepHookCallMarker << AFTER_STEP_MARKER_1;
}
AFTER_STEP() {
afterStepHookCallMarker << AFTER_STEP_MARKER_2;
globalStepHookCallMarker << AFTER_STEP_MARKER_2;
}
AFTER_STEP() {
afterStepHookCallMarker << AFTER_STEP_MARKER_3;
globalStepHookCallMarker << AFTER_STEP_MARKER_3;
}
#define AFTER_MARKER_1 "J"
#define AFTER_MARKER_2 "K"
#define AFTER_MARKER_3 "L"
AFTER() { afterHookCallMarker << AFTER_MARKER_1; }
AFTER() { afterHookCallMarker << AFTER_MARKER_2; }
AFTER() { afterHookCallMarker << AFTER_MARKER_3; }
const std::string correctBeforeOrder(BEFORE_MARKER_1 BEFORE_MARKER_2 BEFORE_MARKER_3);
const std::string correctBeforeAroundStepOrder(AROUND_STEP_MARKER_BEFORE_1 AROUND_STEP_MARKER_BEFORE_2 AROUND_STEP_MARKER_BEFORE_3);
const std::string correctAfterAroundStepOrder(AROUND_STEP_MARKER_AFTER_3 AROUND_STEP_MARKER_AFTER_2 AROUND_STEP_MARKER_AFTER_1);
const std::string correctAfterStepOrder(AFTER_STEP_MARKER_1 AFTER_STEP_MARKER_2 AFTER_STEP_MARKER_3);
const std::string correctAfterOrder(AFTER_MARKER_1 AFTER_MARKER_2 AFTER_MARKER_3);
TEST_F(HookRegistrationTest, hooksAreRegisteredByTheMacros) {
beginScenario(0);
EXPECT_EQ(correctBeforeOrder, sort(beforeHookOrder()));
EXPECT_EQ(correctBeforeAroundStepOrder, sort(aroundStepHookOrder()));
EXPECT_EQ(correctAfterStepOrder, sort(afterStepHookOrder()));
EXPECT_EQ(correctAfterOrder, sort(afterHookOrder()));
endScenario();
}
TEST_F(HookRegistrationTest, beforeHooksAreInvokedInAnyOrder) {
EXPECT_EQ("", beforeHookCallMarker.str());
beginScenario(0);
EXPECT_EQ(correctBeforeOrder, sort(beforeHookCallMarker.str()));
invokeStep();
endScenario();
EXPECT_EQ(correctBeforeOrder, sort(beforeHookCallMarker.str()));
}
TEST_F(HookRegistrationTest, aroundStepHooksAreInvokedInAnyOrderButNested) {
beginScenario(0);
EXPECT_EQ("", beforeAroundStepHookCallMarker.str());
invokeStep();
EXPECT_EQ(correctBeforeAroundStepOrder, sort(beforeAroundStepHookCallMarker.str()));
EXPECT_EQ(correctAfterAroundStepOrder, sort(afterAroundStepHookCallMarker.str()));
endScenario();
EXPECT_EQ(correctBeforeAroundStepOrder, sort(beforeAroundStepHookCallMarker.str()));
EXPECT_EQ(correctAfterAroundStepOrder, sort(afterAroundStepHookCallMarker.str()));
}
TEST_F(HookRegistrationTest, afterStepHooksAreInvokedInAnyOrder) {
beginScenario(0);
EXPECT_EQ("", afterStepHookCallMarker.str());
invokeStep();
EXPECT_EQ(correctAfterStepOrder, sort(afterStepHookCallMarker.str()));
endScenario();
EXPECT_EQ(correctAfterStepOrder, sort(afterStepHookCallMarker.str()));
}
TEST_F(HookRegistrationTest, afterHooksAreInvokedInAnyOrder) {
beginScenario(0);
invokeStep();
invokeStep();
EXPECT_EQ("", sort(afterHookCallMarker.str()));
endScenario();
EXPECT_EQ(correctAfterOrder, sort(afterHookCallMarker.str()));
}
TEST_F(HookRegistrationTest, afterStepHooksAreInvokedAfterAroundStepHooks) {
beginScenario(0);
EXPECT_EQ("", globalStepHookCallMarker.str());
invokeStep();
EXPECT_EQ(beforeAroundStepHookCallMarker.str() +
afterAroundStepHookCallMarker.str() +
afterStepHookCallMarker.str(),
globalStepHookCallMarker.str());
endScenario();
}