/
parser.js
96 lines (82 loc) · 3.29 KB
/
parser.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
var Parser = function(featureSources, astFilter) {
var Gherkin = require('gherkin');
var Cucumber = require('../cucumber');
var features = Cucumber.Ast.Features();
var astAssembler = Cucumber.Ast.Assembler(features, astFilter);
var currentSourceUri;
var self = {
parse: function parse() {
var Lexer = Gherkin.Lexer('en');
var lexer = new Lexer(self.getEventHandlers());
for (i in featureSources) {
var currentSourceUri = featureSources[i][Parser.FEATURE_NAME_SOURCE_PAIR_URI_INDEX];
var featureSource = featureSources[i][Parser.FEATURE_NAME_SOURCE_PAIR_SOURCE_INDEX];
self.setCurrentSourceUri(currentSourceUri);
lexer.scan(featureSource);
}
return features;
},
setCurrentSourceUri: function setCurrentSourceUri(uri) {
currentSourceUri = uri;
},
getCurrentSourceUri: function getCurrentSourceUri() {
return currentSourceUri;
},
getEventHandlers: function getEventHandlers() {
return {
background: self.handleBackground,
comment: self.handleComment,
doc_string: self.handleDocString,
eof: self.handleEof,
feature: self.handleFeature,
row: self.handleDataTableRow,
scenario: self.handleScenario,
step: self.handleStep,
tag: self.handleTag
};
},
handleBackground: function handleBackground(keyword, name, description, line) {
var uri = self.getCurrentSourceUri();
var background = Cucumber.Ast.Background(keyword, name, description, uri, line);
astAssembler.insertBackground(background);
},
handleComment: function handleComment() {},
handleDocString: function handleDocString(contentType, string, line) {
var uri = self.getCurrentSourceUri();
var docString = Cucumber.Ast.DocString(contentType, string, uri, line);
astAssembler.insertDocString(docString);
},
handleEof: function handleEof() {
astAssembler.finish();
},
handleFeature: function handleFeature(keyword, name, description, line) {
var uri = self.getCurrentSourceUri();
var feature = Cucumber.Ast.Feature(keyword, name, description, uri, line);
astAssembler.insertFeature(feature);
},
handleDataTableRow: function handleDataTableRow(cells, line) {
var uri = self.getCurrentSourceUri();
var dataTableRow = Cucumber.Ast.DataTable.Row(cells, uri, line);
astAssembler.insertDataTableRow(dataTableRow);
},
handleScenario: function handleScenario(keyword, name, description, line) {
var uri = self.getCurrentSourceUri();
var scenario = Cucumber.Ast.Scenario(keyword, name, description, uri, line);
astAssembler.insertScenario(scenario);
},
handleStep: function handleStep(keyword, name, line) {
var uri = self.getCurrentSourceUri();
var step = Cucumber.Ast.Step(keyword, name, uri, line);
astAssembler.insertStep(step);
},
handleTag: function handleTag(tag, line) {
var uri = self.getCurrentSourceUri();
var tag = Cucumber.Ast.Tag(tag, uri, line);
astAssembler.insertTag(tag);
}
};
return self;
};
Parser.FEATURE_NAME_SOURCE_PAIR_URI_INDEX = 0;
Parser.FEATURE_NAME_SOURCE_PAIR_SOURCE_INDEX = 1;
module.exports = Parser;