/
step_definition_snippet_builder.js
90 lines (81 loc) · 3.74 KB
/
step_definition_snippet_builder.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
var _ = require('underscore'),
stepDefinitionSnippetBuilderSyntax = require ('./step_definition_snippet_builder_syntax');
var StepDefinitionSnippetBuilder = function(step, syntax) {
var Cucumber = require('../../cucumber');
var self = {
buildSnippet: function buildSnippet() {
var functionName = self.buildStepDefinitionFunctionName();
var pattern = self.buildStepDefinitionPattern();
var parameters = self.buildStepDefinitionParameters();
var snippet =
syntax.getStepDefinitionStart() +
functionName +
syntax.getStepDefinitionInner1() +
pattern +
syntax.getStepDefinitionInner2() +
parameters +
syntax.getStepDefinitionEnd();
return snippet;
},
buildStepDefinitionFunctionName: function buildStepDefinitionFunctionName() {
var functionName;
if (step.isOutcomeStep())
functionName = syntax.getOutcomeStepDefinitionFunctionName();
else if (step.isEventStep())
functionName = syntax.getEventStepDefinitionFunctionName();
else
functionName = syntax.getContextStepDefinitionFunctionName();
return functionName;
},
buildStepDefinitionPattern: function buildStepDefinitionPattern() {
var stepName = step.getName();
var escapedStepName = Cucumber.Util.RegExp.escapeString(stepName);
var parameterizedStepName = self.parameterizeStepName(escapedStepName);
var pattern =
syntax.getPatternStart() +
parameterizedStepName +
syntax.getPatternEnd();
return pattern;
},
buildStepDefinitionParameters: function buildStepDefinitionParameters() {
var parameters = self.getStepDefinitionPatternMatchingGroupParameters();
if (step.hasDocString())
parameters = parameters.concat([syntax.getStepDefinitionDocString()]);
else if (step.hasDataTable())
parameters = parameters.concat([syntax.getStepDefinitionDataTable()]);
var parametersAndCallback =
parameters.concat([syntax.getStepDefinitionCallback()]);
var parameterString = parametersAndCallback.join(syntax.getFunctionParameterSeparator());
return parameterString;
},
getStepDefinitionPatternMatchingGroupParameters: function getStepDefinitionPatternMatchingGroupParameters() {
var parameterCount = self.countStepDefinitionPatternMatchingGroups();
var parameters = [];
_(parameterCount).times(function(n) {
var offset = n + 1;
parameters.push('arg' + offset);
});
return parameters;
},
countStepDefinitionPatternMatchingGroups: function countStepDefinitionPatternMatchingGroups() {
var stepDefinitionPattern = self.buildStepDefinitionPattern();
var numberMatchingGroupCount =
Cucumber.Util.String.count(stepDefinitionPattern, syntax.getNumberMatchingGroup());
var quotedStringMatchingGroupCount =
Cucumber.Util.String.count(stepDefinitionPattern, syntax.getQuotedStringMatchingGroup());
var count = numberMatchingGroupCount + quotedStringMatchingGroupCount;
return count;
},
parameterizeStepName: function parameterizeStepName(stepName) {
var parameterizedStepName =
stepName
.replace(StepDefinitionSnippetBuilder.NUMBER_PATTERN, syntax.getNumberMatchingGroup())
.replace(StepDefinitionSnippetBuilder.QUOTED_STRING_PATTERN, syntax.getQuotedStringMatchingGroup());
return parameterizedStepName;
}
};
return self;
};
StepDefinitionSnippetBuilder.NUMBER_PATTERN = /\d+/gi;
StepDefinitionSnippetBuilder.QUOTED_STRING_PATTERN = /"[^"]*"/gi;
module.exports = StepDefinitionSnippetBuilder;