1
1
var TreeWalker = function ( features , supportCodeLibrary , listeners ) {
2
2
var listeners ;
3
+ var allFeaturesSucceded = true ;
4
+ var skippingSteps = false ;
3
5
4
6
var self = {
5
7
walk : function walk ( callback ) {
6
- self . visitFeatures ( features , callback ) ;
8
+ self . visitFeatures ( features , function ( ) {
9
+ var featuresResult = self . didAllFeaturesSucceed ( ) ;
10
+ callback ( featuresResult ) ;
11
+ } ) ;
7
12
} ,
8
13
9
14
visitFeatures : function visitFeatures ( features , callback ) {
@@ -26,6 +31,7 @@ var TreeWalker = function(features, supportCodeLibrary, listeners) {
26
31
} ,
27
32
28
33
visitScenario : function visitScenario ( scenario , callback ) {
34
+ self . witnessNewScenario ( ) ;
29
35
var payload = { scenario : scenario } ;
30
36
var event = TreeWalker . Event ( TreeWalker . SCENARIO_EVENT_NAME , payload ) ;
31
37
self . broadcastEventAroundUserFunction (
@@ -36,16 +42,15 @@ var TreeWalker = function(features, supportCodeLibrary, listeners) {
36
42
} ,
37
43
38
44
visitStep : function visitStep ( step , callback ) {
39
- var payload = { step : step } ;
40
- var event = TreeWalker . Event ( TreeWalker . STEP_EVENT_NAME , payload ) ;
41
- self . broadcastEventAroundUserFunction (
42
- event ,
43
- function ( callback ) { step . acceptVisitor ( self , callback ) ; } ,
44
- callback
45
- ) ;
45
+ if ( self . isSkippingSteps ( ) )
46
+ self . skipStep ( step , callback ) ;
47
+ else
48
+ self . executeStep ( step , callback ) ;
46
49
} ,
47
50
48
51
visitStepResult : function visitStepResult ( stepResult , callback ) {
52
+ if ( ! stepResult . isSuccessful ( ) )
53
+ self . witnessFailedStep ( ) ;
49
54
var payload = { stepResult : stepResult } ;
50
55
var event = TreeWalker . Event ( TreeWalker . STEP_RESULT_EVENT_NAME , payload ) ;
51
56
self . broadcastEvent ( event , callback ) ;
@@ -86,6 +91,39 @@ var TreeWalker = function(features, supportCodeLibrary, listeners) {
86
91
87
92
lookupStepDefinitionByName : function lookupStepDefinitionByName ( stepName ) {
88
93
return supportCodeLibrary . lookupStepDefinitionByName ( stepName ) ;
94
+ } ,
95
+
96
+ didAllFeaturesSucceed : function didAllFeaturesSucceed ( ) {
97
+ return allFeaturesSucceded ;
98
+ } ,
99
+
100
+ witnessFailedStep : function witnessFailedStep ( ) {
101
+ allFeaturesSucceded = false ;
102
+ skippingSteps = true ;
103
+ } ,
104
+
105
+ witnessNewScenario : function witnessNewScenario ( ) {
106
+ skippingSteps = false ;
107
+ } ,
108
+
109
+ isSkippingSteps : function isSkippingSteps ( ) {
110
+ return skippingSteps ;
111
+ } ,
112
+
113
+ executeStep : function executeStep ( step , callback ) {
114
+ var payload = { step : step } ;
115
+ var event = TreeWalker . Event ( TreeWalker . STEP_EVENT_NAME , payload ) ;
116
+ self . broadcastEventAroundUserFunction (
117
+ event ,
118
+ function ( callback ) { step . acceptVisitor ( self , callback ) ; } ,
119
+ callback
120
+ ) ;
121
+ } ,
122
+
123
+ skipStep : function skipStep ( step , callback ) {
124
+ var payload = { step : step } ;
125
+ var event = TreeWalker . Event ( TreeWalker . SKIPPED_STEP_EVENT_NAME , payload ) ;
126
+ self . broadcastEvent ( event , callback ) ;
89
127
}
90
128
} ;
91
129
return self ;
@@ -94,6 +132,7 @@ TreeWalker.FEATURES_EVENT_NAME = 'Features';
94
132
TreeWalker . FEATURE_EVENT_NAME = 'Feature' ;
95
133
TreeWalker . SCENARIO_EVENT_NAME = 'Scenario' ;
96
134
TreeWalker . STEP_EVENT_NAME = 'Step' ;
135
+ TreeWalker . SKIPPED_STEP_EVENT_NAME = 'SkippedStep' ;
97
136
TreeWalker . STEP_RESULT_EVENT_NAME = 'StepResult' ;
98
137
TreeWalker . BEFORE_EVENT_NAME_PREFIX = 'Before' ;
99
138
TreeWalker . AFTER_EVENT_NAME_PREFIX = 'After' ;
0 commit comments