-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
library.js
116 lines (96 loc) · 3.71 KB
/
library.js
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
var Library = function(supportCodeDefinition) {
var Cucumber = require('../../cucumber');
var listeners = Cucumber.Type.Collection();
var stepDefinitions = Cucumber.Type.Collection();
var hooker = Cucumber.SupportCode.Library.Hooker();
var worldConstructor = Cucumber.SupportCode.WorldConstructor();
var self = {
lookupStepDefinitionByName: function lookupStepDefinitionByName(name) {
var matchingStepDefinition;
stepDefinitions.syncForEach(function(stepDefinition) {
if (stepDefinition.matchesStepName(name)) {
matchingStepDefinition = stepDefinition;
}
});
return matchingStepDefinition;
},
isStepDefinitionNameDefined: function isStepDefinitionNameDefined(name) {
var stepDefinition = self.lookupStepDefinitionByName(name);
return (stepDefinition != undefined);
},
hookUpFunction: function hookUpFunction(userFunction, scenario, world) {
var hookedUpFunction = hooker.hookUpFunction(userFunction, scenario, world);
return hookedUpFunction;
},
defineAroundHook: function defineAroundHook() {
var tagGroupStrings = Cucumber.Util.Arguments(arguments);
var code = tagGroupStrings.pop();
hooker.addAroundHookCode(code, {tags: tagGroupStrings});
},
defineBeforeHook: function defineBeforeHook() {
var tagGroupStrings = Cucumber.Util.Arguments(arguments);
var code = tagGroupStrings.pop();
hooker.addBeforeHookCode(code, {tags: tagGroupStrings});
},
defineAfterHook: function defineAfterHook() {
var tagGroupStrings = Cucumber.Util.Arguments(arguments);
var code = tagGroupStrings.pop();
hooker.addAfterHookCode(code, {tags: tagGroupStrings});
},
defineStep: function defineStep(name, code) {
var stepDefinition = Cucumber.SupportCode.StepDefinition(name, code);
stepDefinitions.add(stepDefinition);
},
registerListener: function registerListener(listener) {
listeners.add(listener);
},
registerHandler: function registerHandler(eventName, handler) {
var listener = Cucumber.Listener();
listener.setHandlerForEvent(eventName, handler);
self.registerListener(listener);
},
getListeners: function getListeners() {
return listeners;
},
instantiateNewWorld: function instantiateNewWorld(callback) {
var world = new worldConstructor(function(explicitWorld) {
process.nextTick(function() { // release the constructor
callback(explicitWorld || world);
});
});
}
};
var supportCodeHelper = {
Around : self.defineAroundHook,
Before : self.defineBeforeHook,
After : self.defineAfterHook,
Given : self.defineStep,
When : self.defineStep,
Then : self.defineStep,
defineStep : self.defineStep,
registerListener : self.registerListener,
registerHandler : self.registerHandler,
World : worldConstructor
};
appendEventHandlers(supportCodeHelper, self);
supportCodeDefinition.call(supportCodeHelper);
worldConstructor = supportCodeHelper.World;
return self;
};
function appendEventHandlers(supportCodeHelper, library) {
var Cucumber = require('../../cucumber');
var events = Cucumber.Listener.Events;
var eventName;
for (eventName in events) {
if (events.hasOwnProperty(eventName)) {
supportCodeHelper[eventName] = createEventListenerMethod(library, eventName);
}
}
}
function createEventListenerMethod(library, eventName) {
return function(handler) {
library.registerHandler(eventName, handler);
};
}
Library.Hooker = require('./library/hooker');
module.exports = Library;