gherkin 2.4.21-universal-dotnet → 2.5.0-universal-dotnet
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +5 -6
- data/History.md +71 -0
- data/features/json_formatter.feature +134 -80
- data/features/json_parser.feature +8 -12
- data/gherkin.gemspec +2 -2
- data/lib/gherkin.dll +0 -0
- data/lib/gherkin/formatter/json_formatter.rb +10 -6
- data/lib/gherkin/formatter/model.rb +6 -20
- data/lib/gherkin/formatter/pretty_formatter.rb +3 -6
- data/lib/gherkin/json_parser.rb +5 -6
- data/lib/gherkin/listener/formatter_listener.rb +5 -1
- data/spec/gherkin/fixtures/complex.json +30 -42
- data/spec/gherkin/formatter/json_formatter_spec.rb +74 -0
- data/spec/gherkin/json_parser_spec.rb +5 -8
- data/tasks/cucumber.rake +1 -0
- metadata +26 -24
data/Gemfile.lock
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gherkin (2.
|
4
|
+
gherkin (2.5.0)
|
5
5
|
json (>= 1.4.6)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
10
|
builder (3.0.0)
|
11
|
-
cucumber (1.0
|
11
|
+
cucumber (1.1.0)
|
12
12
|
builder (>= 2.1.2)
|
13
13
|
diff-lcs (>= 1.1.2)
|
14
|
-
gherkin (~> 2.
|
14
|
+
gherkin (~> 2.5.0)
|
15
15
|
json (>= 1.4.6)
|
16
16
|
term-ansicolor (>= 1.0.6)
|
17
17
|
diff-lcs (1.1.3)
|
18
|
-
json (1.6.
|
18
|
+
json (1.6.1)
|
19
19
|
libv8 (3.3.10.2)
|
20
20
|
rake (0.9.2)
|
21
21
|
rake-compiler (0.7.9)
|
@@ -35,13 +35,12 @@ GEM
|
|
35
35
|
yard (0.7.2)
|
36
36
|
|
37
37
|
PLATFORMS
|
38
|
-
java
|
39
38
|
ruby
|
40
39
|
|
41
40
|
DEPENDENCIES
|
42
41
|
builder (>= 2.1.2)
|
43
42
|
bundler (>= 1.0.18)
|
44
|
-
cucumber (>= 1.0
|
43
|
+
cucumber (>= 1.1.0)
|
45
44
|
gherkin!
|
46
45
|
rake (>= 0.9.2)
|
47
46
|
rake-compiler (>= 0.7.9)
|
data/History.md
CHANGED
@@ -1,3 +1,74 @@
|
|
1
|
+
## [2.5.0](https://github.com/cucumber/gherkin/compare/v2.4.21...v2.5.0)
|
2
|
+
|
3
|
+
### Changed Features
|
4
|
+
|
5
|
+
The JSON representation of features has changed. The difference lies in how Doc Strings and Data Tables are represented. Consider the following steps:
|
6
|
+
|
7
|
+
Given a Data Table:
|
8
|
+
| Hipster | Ipsum |
|
9
|
+
| Freegan | Vinyl |
|
10
|
+
Given a Doc String:
|
11
|
+
"""
|
12
|
+
Hipster
|
13
|
+
Ipsum
|
14
|
+
"""
|
15
|
+
|
16
|
+
This is now represented in JSON as:
|
17
|
+
|
18
|
+
"steps": [
|
19
|
+
{
|
20
|
+
"keyword": "Given ",
|
21
|
+
"name": "a Data Table"
|
22
|
+
"line": 5,
|
23
|
+
"rows": [
|
24
|
+
{ "cells": ["Hipster", "Ipsum"], "line": 6 },
|
25
|
+
{ "cells": ["Freegan", "Vinyl"], "line": 7 }
|
26
|
+
]
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"keyword": "Given ",
|
30
|
+
"name": "a Doc String"
|
31
|
+
"line": 8,
|
32
|
+
"doc_string": {
|
33
|
+
"value": "Hipster\nIpsum"
|
34
|
+
"line": 9,
|
35
|
+
"content_type": "plaintext",
|
36
|
+
}
|
37
|
+
}
|
38
|
+
]
|
39
|
+
|
40
|
+
Previously it would be represented in JSON as:
|
41
|
+
|
42
|
+
"steps": [
|
43
|
+
{
|
44
|
+
"keyword": "Given ",
|
45
|
+
"name": "a Data Table"
|
46
|
+
"line": 5,
|
47
|
+
"multiline_arg": {
|
48
|
+
"type": "table"
|
49
|
+
"value": [
|
50
|
+
{ "cells": ["Hipster", "Ipsum"], "line": 6 },
|
51
|
+
{ "cells": ["Freegan", "Vinyl"], "line": 7 }
|
52
|
+
]
|
53
|
+
}
|
54
|
+
},
|
55
|
+
{
|
56
|
+
"keyword": "Given ",
|
57
|
+
"name": "a Doc String"
|
58
|
+
"line": 8,
|
59
|
+
"multiline_arg": {
|
60
|
+
"type": "doc_string"
|
61
|
+
"value": "Hipster\nIpsum"
|
62
|
+
"line": 9,
|
63
|
+
"content_type": "plaintext",
|
64
|
+
}
|
65
|
+
}
|
66
|
+
]
|
67
|
+
|
68
|
+
### Bugfixes
|
69
|
+
* Java JSONFormatter produces invalid JSON ([#128](https://github.com/cucumber/gherkin/issues/128) Aslak Hellesøy)
|
70
|
+
* Missing matches and results in JSONFormatter output ([#129](https://github.com/cucumber/gherkin/issues/129) Aslak Hellesøy)
|
71
|
+
|
1
72
|
## [2.4.21](https://github.com/cucumber/gherkin/compare/v2.4.20...v2.4.21)
|
2
73
|
|
3
74
|
### Bugfixes
|
@@ -71,154 +71,208 @@ Feature: JSON formatter
|
|
71
71
|
Then the outputted JSON should be:
|
72
72
|
"""
|
73
73
|
{
|
74
|
-
"tags": [{"name": "@one", "line":1}],
|
75
|
-
"keyword": "Feature",
|
76
|
-
"name": "OH HAI",
|
77
74
|
"description": "",
|
78
|
-
"
|
79
|
-
"elements":[
|
75
|
+
"elements": [
|
80
76
|
{
|
81
|
-
"type": "scenario",
|
82
|
-
"keyword": "Scenario",
|
83
|
-
"name": "Fujin",
|
84
77
|
"description": "",
|
78
|
+
"keyword": "Scenario",
|
85
79
|
"line": 4,
|
80
|
+
"name": "Fujin",
|
86
81
|
"steps": [
|
87
82
|
{
|
88
83
|
"keyword": "Given ",
|
89
|
-
"
|
90
|
-
"
|
84
|
+
"line": 5,
|
85
|
+
"name": "wind"
|
91
86
|
},
|
92
87
|
{
|
93
88
|
"keyword": "Then ",
|
94
|
-
"
|
95
|
-
"
|
89
|
+
"line": 6,
|
90
|
+
"name": "spirit"
|
96
91
|
}
|
97
|
-
]
|
92
|
+
],
|
93
|
+
"type": "scenario"
|
98
94
|
},
|
99
95
|
{
|
100
|
-
"type": "scenario",
|
101
|
-
"tags": [{"name": "@two", "line":8}],
|
102
|
-
"keyword": "Scenario",
|
103
|
-
"name": "_why",
|
104
96
|
"description": "",
|
97
|
+
"keyword": "Scenario",
|
105
98
|
"line": 9,
|
99
|
+
"name": "_why",
|
106
100
|
"steps": [
|
107
101
|
{
|
108
102
|
"keyword": "Given ",
|
109
|
-
"
|
110
|
-
"
|
103
|
+
"line": 10,
|
104
|
+
"name": "chunky"
|
111
105
|
},
|
112
106
|
{
|
113
107
|
"keyword": "Then ",
|
114
|
-
"
|
115
|
-
"
|
108
|
+
"line": 11,
|
109
|
+
"name": "bacon"
|
116
110
|
}
|
117
|
-
]
|
118
|
-
|
119
|
-
{
|
120
|
-
"type": "scenario_outline",
|
121
|
-
"tags": [{"name": "@three", "line":13}, {"name": "@four", "line":13}],
|
122
|
-
"keyword": "Scenario Outline",
|
123
|
-
"name": "Life",
|
124
|
-
"description": "",
|
125
|
-
"line": 14,
|
126
|
-
"steps": [
|
111
|
+
],
|
112
|
+
"tags": [
|
127
113
|
{
|
128
|
-
"
|
129
|
-
"name": "
|
130
|
-
"line": 15
|
114
|
+
"line": 8,
|
115
|
+
"name": "@two"
|
131
116
|
}
|
132
117
|
],
|
118
|
+
"type": "scenario"
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"description": "",
|
133
122
|
"examples": [
|
134
123
|
{
|
135
|
-
"tags": [{"name": "@five", "line":17}],
|
136
|
-
"keyword": "Examples",
|
137
|
-
"name": "Real life",
|
138
124
|
"description": "",
|
125
|
+
"keyword": "Examples",
|
139
126
|
"line": 18,
|
127
|
+
"name": "Real life",
|
140
128
|
"rows": [
|
141
129
|
{
|
142
|
-
"cells": [
|
130
|
+
"cells": [
|
131
|
+
"boredom"
|
132
|
+
],
|
143
133
|
"line": 19
|
144
134
|
},
|
145
135
|
{
|
146
|
-
"cells": [
|
136
|
+
"cells": [
|
137
|
+
"airport"
|
138
|
+
],
|
147
139
|
"line": 20
|
148
140
|
},
|
149
141
|
{
|
150
|
-
"cells": [
|
142
|
+
"cells": [
|
143
|
+
"meeting"
|
144
|
+
],
|
151
145
|
"line": 21
|
152
146
|
}
|
147
|
+
],
|
148
|
+
"tags": [
|
149
|
+
{
|
150
|
+
"line": 17,
|
151
|
+
"name": "@five"
|
152
|
+
}
|
153
153
|
]
|
154
154
|
}
|
155
|
-
]
|
155
|
+
],
|
156
|
+
"keyword": "Scenario Outline",
|
157
|
+
"line": 14,
|
158
|
+
"name": "Life",
|
159
|
+
"steps": [
|
160
|
+
{
|
161
|
+
"keyword": "Given ",
|
162
|
+
"line": 15,
|
163
|
+
"name": "some <boredom>"
|
164
|
+
}
|
165
|
+
],
|
166
|
+
"tags": [
|
167
|
+
{
|
168
|
+
"line": 13,
|
169
|
+
"name": "@three"
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"line": 13,
|
173
|
+
"name": "@four"
|
174
|
+
}
|
175
|
+
],
|
176
|
+
"type": "scenario_outline"
|
156
177
|
},
|
157
178
|
{
|
158
|
-
"type": "scenario",
|
159
|
-
"keyword": "Scenario",
|
160
|
-
"name": "who stole my mojo?",
|
161
179
|
"description": "",
|
180
|
+
"keyword": "Scenario",
|
162
181
|
"line": 23,
|
182
|
+
"name": "who stole my mojo?",
|
163
183
|
"steps": [
|
164
184
|
{
|
165
185
|
"keyword": "When ",
|
166
|
-
"name": "I was",
|
167
186
|
"line": 24,
|
168
|
-
"
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
"
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
187
|
+
"name": "I was",
|
188
|
+
"rows": [
|
189
|
+
{
|
190
|
+
"cells": [
|
191
|
+
"asleep"
|
192
|
+
],
|
193
|
+
"line": 25
|
194
|
+
}
|
195
|
+
]
|
177
196
|
},
|
178
197
|
{
|
198
|
+
"doc_string": {
|
199
|
+
"content_type": "plaintext",
|
200
|
+
"line": 27,
|
201
|
+
"value": "innocent"
|
202
|
+
},
|
179
203
|
"keyword": "And ",
|
180
|
-
"name": "so",
|
181
204
|
"line": 26,
|
182
|
-
"
|
183
|
-
"type": "doc_string",
|
184
|
-
"content_type": "plaintext",
|
185
|
-
"value": "innocent",
|
186
|
-
"line": 27
|
187
|
-
}
|
205
|
+
"name": "so"
|
188
206
|
}
|
189
|
-
]
|
207
|
+
],
|
208
|
+
"type": "scenario"
|
190
209
|
},
|
191
210
|
{
|
192
|
-
"
|
193
|
-
"comments": [{"value": "# The", "line":31}],
|
194
|
-
"keyword": "Scenario Outline",
|
195
|
-
"name": "with",
|
196
|
-
"description": "",
|
197
|
-
"line": 32,
|
198
|
-
"steps": [
|
211
|
+
"comments": [
|
199
212
|
{
|
200
|
-
"
|
201
|
-
"
|
202
|
-
"line": 34,
|
203
|
-
"name": "nice"
|
213
|
+
"line": 31,
|
214
|
+
"value": "# The"
|
204
215
|
}
|
205
216
|
],
|
217
|
+
"description": "",
|
206
218
|
"examples": [
|
207
219
|
{
|
208
|
-
"comments": [
|
209
|
-
|
210
|
-
|
220
|
+
"comments": [
|
221
|
+
{
|
222
|
+
"line": 36,
|
223
|
+
"value": "# comments"
|
224
|
+
},
|
225
|
+
{
|
226
|
+
"line": 37,
|
227
|
+
"value": "# everywhere"
|
228
|
+
}
|
229
|
+
],
|
211
230
|
"description": "",
|
231
|
+
"keyword": "Examples",
|
212
232
|
"line": 38,
|
233
|
+
"name": "An example",
|
213
234
|
"rows": [
|
214
235
|
{
|
215
|
-
"
|
216
|
-
|
217
|
-
|
236
|
+
"cells": [
|
237
|
+
"partout"
|
238
|
+
],
|
239
|
+
"comments": [
|
240
|
+
{
|
241
|
+
"line": 39,
|
242
|
+
"value": "# I mean"
|
243
|
+
}
|
244
|
+
],
|
245
|
+
"line": 40
|
218
246
|
}
|
219
247
|
]
|
220
248
|
}
|
221
|
-
]
|
249
|
+
],
|
250
|
+
"keyword": "Scenario Outline",
|
251
|
+
"line": 32,
|
252
|
+
"name": "with",
|
253
|
+
"steps": [
|
254
|
+
{
|
255
|
+
"comments": [
|
256
|
+
{
|
257
|
+
"line": 33,
|
258
|
+
"value": "# all"
|
259
|
+
}
|
260
|
+
],
|
261
|
+
"keyword": "Then ",
|
262
|
+
"line": 34,
|
263
|
+
"name": "nice"
|
264
|
+
}
|
265
|
+
],
|
266
|
+
"type": "scenario_outline"
|
267
|
+
}
|
268
|
+
],
|
269
|
+
"keyword": "Feature",
|
270
|
+
"line": 2,
|
271
|
+
"name": "OH HAI",
|
272
|
+
"tags": [
|
273
|
+
{
|
274
|
+
"line": 1,
|
275
|
+
"name": "@one"
|
222
276
|
}
|
223
277
|
]
|
224
278
|
}
|
@@ -144,24 +144,20 @@ Feature: JSON lexer
|
|
144
144
|
"keyword": "When ",
|
145
145
|
"name": "I was",
|
146
146
|
"line": 24,
|
147
|
-
"
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
}
|
155
|
-
]
|
156
|
-
}
|
147
|
+
"rows": [
|
148
|
+
{
|
149
|
+
"comments": [],
|
150
|
+
"line": 25,
|
151
|
+
"cells": ["asleep"]
|
152
|
+
}
|
153
|
+
]
|
157
154
|
},
|
158
155
|
{
|
159
156
|
"comments": [],
|
160
157
|
"keyword": "And ",
|
161
158
|
"name": "so",
|
162
159
|
"line": 26,
|
163
|
-
"
|
164
|
-
"type": "doc_string",
|
160
|
+
"doc_string": {
|
165
161
|
"value": "innocent",
|
166
162
|
"line": 27
|
167
163
|
}
|
data/gherkin.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "gherkin"
|
5
|
-
s.version = "2.
|
5
|
+
s.version = "2.5.0"
|
6
6
|
s.authors = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Hellesøy"]
|
7
7
|
s.description = "A fast Gherkin lexer/parser based on the Ragel State Machine Compiler."
|
8
8
|
s.summary = "#{s.name}-#{s.version}"
|
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
|
|
46
46
|
# Hack because json is released as two different versions for MRI and JRuby :-/
|
47
47
|
s.add_dependency('json', '>= 1.4.6')
|
48
48
|
|
49
|
-
s.add_development_dependency('cucumber', '>= 1.0
|
49
|
+
s.add_development_dependency('cucumber', '>= 1.1.0')
|
50
50
|
s.add_development_dependency('rake', '>= 0.9.2')
|
51
51
|
s.add_development_dependency('bundler', '>= 1.0.18')
|
52
52
|
s.add_development_dependency('rspec', '>= 2.6.0')
|
data/lib/gherkin.dll
CHANGED
Binary file
|
@@ -29,14 +29,17 @@ module Gherkin
|
|
29
29
|
|
30
30
|
def background(background)
|
31
31
|
feature_elements << background.to_hash
|
32
|
+
@step_index = 0
|
32
33
|
end
|
33
34
|
|
34
35
|
def scenario(scenario)
|
35
36
|
feature_elements << scenario.to_hash
|
37
|
+
@step_index = 0
|
36
38
|
end
|
37
39
|
|
38
40
|
def scenario_outline(scenario_outline)
|
39
41
|
feature_elements << scenario_outline.to_hash
|
42
|
+
@step_index = 0
|
40
43
|
end
|
41
44
|
|
42
45
|
def examples(examples)
|
@@ -48,11 +51,16 @@ module Gherkin
|
|
48
51
|
end
|
49
52
|
|
50
53
|
def match(match)
|
51
|
-
|
54
|
+
current_steps[@step_index]['match'] = match.to_hash
|
52
55
|
end
|
53
56
|
|
54
57
|
def result(result)
|
55
|
-
|
58
|
+
current_steps[@step_index]['result'] = result.to_hash
|
59
|
+
@step_index += 1
|
60
|
+
end
|
61
|
+
|
62
|
+
def last_step
|
63
|
+
current_steps[-1]
|
56
64
|
end
|
57
65
|
|
58
66
|
def embedding(mime_type, data)
|
@@ -81,10 +89,6 @@ module Gherkin
|
|
81
89
|
feature_element['steps'] ||= []
|
82
90
|
end
|
83
91
|
|
84
|
-
def last_step
|
85
|
-
current_steps[-1]
|
86
|
-
end
|
87
|
-
|
88
92
|
def embeddings
|
89
93
|
last_step['embeddings'] ||= []
|
90
94
|
end
|
@@ -112,15 +112,15 @@ module Gherkin
|
|
112
112
|
class Step < BasicStatement
|
113
113
|
native_impl('gherkin')
|
114
114
|
|
115
|
-
attr_accessor :
|
115
|
+
attr_accessor :rows
|
116
|
+
attr_accessor :doc_string
|
116
117
|
|
117
118
|
def line_range
|
118
119
|
range = super
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
range = range.first..multiline_arg.line_range.last
|
120
|
+
if(rows)
|
121
|
+
range = range.first..rows[-1].line
|
122
|
+
elsif(doc_string)
|
123
|
+
range = range.first..doc_string.line_range.last
|
124
124
|
end
|
125
125
|
range
|
126
126
|
end
|
@@ -136,20 +136,6 @@ module Gherkin
|
|
136
136
|
Argument.new(offset, val)
|
137
137
|
end
|
138
138
|
end
|
139
|
-
|
140
|
-
def to_hash
|
141
|
-
hash = super
|
142
|
-
if Array === @multiline_arg
|
143
|
-
hash['multiline_arg'] = {
|
144
|
-
'type' => 'table',
|
145
|
-
'value' => hash['multiline_arg']
|
146
|
-
}
|
147
|
-
elsif DocString === @multiline_arg
|
148
|
-
hash['multiline_arg']['type'] = 'doc_string'
|
149
|
-
hash['multiline_arg']['content_type'] = @multiline_arg.content_type
|
150
|
-
end
|
151
|
-
hash
|
152
|
-
end
|
153
139
|
end
|
154
140
|
|
155
141
|
class Comment < Hashable
|
@@ -110,12 +110,9 @@ module Gherkin
|
|
110
110
|
@io.write(text_format.text(step.keyword))
|
111
111
|
@step_printer.write_step(@io, text_format, arg_format, step.name, arguments)
|
112
112
|
@io.puts(indented_location(location, proceed))
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
when Array
|
117
|
-
table(step.multiline_arg)
|
118
|
-
end
|
113
|
+
|
114
|
+
doc_string(step.doc_string) if step.doc_string
|
115
|
+
table(step.rows) if step.rows
|
119
116
|
end
|
120
117
|
|
121
118
|
class MonochromeFormat
|
data/lib/gherkin/json_parser.rb
CHANGED
@@ -53,12 +53,11 @@ module Gherkin
|
|
53
53
|
def step(o)
|
54
54
|
step = Formatter::Model::Step.new(comments(o), keyword(o), name(o), line(o))
|
55
55
|
|
56
|
-
if(
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
56
|
+
if(o['rows'])
|
57
|
+
step.rows = rows(o['rows'])
|
58
|
+
elsif(o['doc_string'])
|
59
|
+
ds = o['doc_string']
|
60
|
+
step.doc_string = Formatter::Model::DocString.new(ds['content_type'].to_s, ds['value'], ds['line'])
|
62
61
|
end
|
63
62
|
|
64
63
|
step
|
@@ -98,7 +98,11 @@ module Gherkin
|
|
98
98
|
|
99
99
|
def replay_step_or_examples
|
100
100
|
if(@step_statement)
|
101
|
-
|
101
|
+
if(doc_string = grab_doc_string!)
|
102
|
+
@step_statement.doc_string = doc_string
|
103
|
+
elsif(rows = grab_rows!)
|
104
|
+
@step_statement.rows = rows
|
105
|
+
end
|
102
106
|
@formatter.step(@step_statement)
|
103
107
|
@step_statement = nil
|
104
108
|
end
|
@@ -29,14 +29,9 @@
|
|
29
29
|
"steps": [
|
30
30
|
{ "name": "A step with a table",
|
31
31
|
"keyword": "Given ",
|
32
|
-
"
|
33
|
-
"
|
34
|
-
|
35
|
-
{"cells":
|
36
|
-
[ "a","row","for","a","step" ]
|
37
|
-
}
|
38
|
-
]
|
39
|
-
}
|
32
|
+
"rows" : [
|
33
|
+
{"cells": [ "a","row","for","a","step" ]}
|
34
|
+
]
|
40
35
|
}
|
41
36
|
],
|
42
37
|
"examples": [
|
@@ -79,41 +74,35 @@
|
|
79
74
|
"steps" : [
|
80
75
|
{ "name" : "a third step with a table",
|
81
76
|
"keyword": "Given ",
|
82
|
-
"
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
}
|
95
|
-
]
|
96
|
-
}
|
77
|
+
"rows": [
|
78
|
+
{
|
79
|
+
"cells" : [ "a","b" ],
|
80
|
+
"line" : 987
|
81
|
+
},
|
82
|
+
{ "cells" :
|
83
|
+
[ "c","d" ]
|
84
|
+
},
|
85
|
+
{ "cells" :
|
86
|
+
[ "e", "f" ]
|
87
|
+
}
|
88
|
+
]
|
97
89
|
},
|
98
90
|
{ "name" : "I am still testing things",
|
99
91
|
"keyword": "Given ",
|
100
|
-
"
|
101
|
-
"
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
}
|
115
|
-
]
|
116
|
-
}
|
92
|
+
"rows": [
|
93
|
+
{ "cells" :
|
94
|
+
[ "g","h" ]
|
95
|
+
},
|
96
|
+
{ "cells" :
|
97
|
+
[ "e","r" ]
|
98
|
+
},
|
99
|
+
{ "cells" :
|
100
|
+
[ "k", "i" ]
|
101
|
+
},
|
102
|
+
{ "cells" :
|
103
|
+
[ "n", "" ]
|
104
|
+
}
|
105
|
+
]
|
117
106
|
},
|
118
107
|
{ "name" : "I am done testing these tables",
|
119
108
|
"keyword": "Given " },
|
@@ -128,8 +117,7 @@
|
|
128
117
|
"steps" : [
|
129
118
|
{ "name" : "All work and no play",
|
130
119
|
"keyword": "Given ",
|
131
|
-
"
|
132
|
-
"type": "doc_string",
|
120
|
+
"doc_string": {
|
133
121
|
"content_type": "text",
|
134
122
|
"value": "Makes Homer something something\nAnd something else",
|
135
123
|
"line": 777
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'stringio'
|
3
|
+
require 'gherkin/formatter/json_formatter'
|
4
|
+
require 'gherkin/formatter/model'
|
5
|
+
|
6
|
+
module Gherkin
|
7
|
+
module Formatter
|
8
|
+
describe JSONFormatter do
|
9
|
+
it "renders results" do
|
10
|
+
io = StringIO.new
|
11
|
+
f = JSONFormatter.new(io)
|
12
|
+
f.uri("f.feature")
|
13
|
+
f.feature(Model::Feature.new([], [], "Feature", "f", "", 1))
|
14
|
+
f.scenario(Model::Scenario.new([], [], "Feature", "f", "", 2))
|
15
|
+
f.step(Model::Step.new([], "Given ", "g", 3))
|
16
|
+
f.step(Model::Step.new([], "When ", "w", 4))
|
17
|
+
|
18
|
+
f.match(Model::Match.new([], "def.rb:33"))
|
19
|
+
f.result(Model::Result.new(:passed, 1, nil))
|
20
|
+
|
21
|
+
f.match(Model::Match.new([], "def.rb:44"))
|
22
|
+
f.result(Model::Result.new(:passed, 1, nil))
|
23
|
+
|
24
|
+
f.eof
|
25
|
+
|
26
|
+
expected = %{
|
27
|
+
{
|
28
|
+
"keyword": "Feature",
|
29
|
+
"name": "f",
|
30
|
+
"line": 1,
|
31
|
+
"description": "",
|
32
|
+
"elements": [
|
33
|
+
{
|
34
|
+
"keyword": "Feature",
|
35
|
+
"name": "f",
|
36
|
+
"line": 2,
|
37
|
+
"description": "",
|
38
|
+
"type": "scenario",
|
39
|
+
"steps": [
|
40
|
+
{
|
41
|
+
"keyword": "Given ",
|
42
|
+
"name": "g",
|
43
|
+
"line": 3,
|
44
|
+
"match": {
|
45
|
+
"location": "def.rb:33"
|
46
|
+
},
|
47
|
+
"result": {
|
48
|
+
"status": "passed",
|
49
|
+
"duration": 1
|
50
|
+
}
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"keyword": "When ",
|
54
|
+
"name": "w",
|
55
|
+
"line": 4,
|
56
|
+
"match": {
|
57
|
+
"location": "def.rb:44"
|
58
|
+
},
|
59
|
+
"result": {
|
60
|
+
"status": "passed",
|
61
|
+
"duration": 1
|
62
|
+
}
|
63
|
+
}
|
64
|
+
]
|
65
|
+
}
|
66
|
+
]
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
JSON.parse(expected).should == JSON.parse(io.string)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/tasks/cucumber.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gherkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: universal-dotnet
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-09-
|
14
|
+
date: 2011-09-22 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
18
|
-
requirement: &
|
18
|
+
requirement: &2155955960 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,21 +23,21 @@ dependencies:
|
|
23
23
|
version: 1.4.6
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2155955960
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cucumber
|
29
|
-
requirement: &
|
29
|
+
requirement: &2155950940 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 1.0
|
34
|
+
version: 1.1.0
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2155950940
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rake
|
40
|
-
requirement: &
|
40
|
+
requirement: &2155927640 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: 0.9.2
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2155927640
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: bundler
|
51
|
-
requirement: &
|
51
|
+
requirement: &2155926020 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 1.0.18
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2155926020
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rspec
|
62
|
-
requirement: &
|
62
|
+
requirement: &2155925000 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: 2.6.0
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *2155925000
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: therubyracer
|
73
|
-
requirement: &
|
73
|
+
requirement: &2155923680 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: 0.9.4
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *2155923680
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: yard
|
84
|
-
requirement: &
|
84
|
+
requirement: &2155922360 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: 0.7.2
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *2155922360
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: rdiscount
|
95
|
-
requirement: &
|
95
|
+
requirement: &2152900280 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: 1.6.8
|
101
101
|
type: :development
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *2152900280
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: term-ansicolor
|
106
|
-
requirement: &
|
106
|
+
requirement: &2152899660 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: 1.0.6
|
112
112
|
type: :development
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *2152899660
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: builder
|
117
|
-
requirement: &
|
117
|
+
requirement: &2152898420 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ! '>='
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
version: 2.1.2
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *2152898420
|
126
126
|
description: A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.
|
127
127
|
email: cukes@googlegroups.com
|
128
128
|
executables: []
|
@@ -220,6 +220,7 @@ files:
|
|
220
220
|
- spec/gherkin/fixtures/with_bom.feature
|
221
221
|
- spec/gherkin/formatter/ansi_escapes_spec.rb
|
222
222
|
- spec/gherkin/formatter/filter_formatter_spec.rb
|
223
|
+
- spec/gherkin/formatter/json_formatter_spec.rb
|
223
224
|
- spec/gherkin/formatter/model_spec.rb
|
224
225
|
- spec/gherkin/formatter/pretty_formatter_spec.rb
|
225
226
|
- spec/gherkin/formatter/spaces.feature
|
@@ -290,7 +291,7 @@ rubyforge_project:
|
|
290
291
|
rubygems_version: 1.8.10
|
291
292
|
signing_key:
|
292
293
|
specification_version: 3
|
293
|
-
summary: gherkin-2.
|
294
|
+
summary: gherkin-2.5.0
|
294
295
|
test_files:
|
295
296
|
- features/escaped_pipes.feature
|
296
297
|
- features/feature_parser.feature
|
@@ -326,6 +327,7 @@ test_files:
|
|
326
327
|
- spec/gherkin/fixtures/with_bom.feature
|
327
328
|
- spec/gherkin/formatter/ansi_escapes_spec.rb
|
328
329
|
- spec/gherkin/formatter/filter_formatter_spec.rb
|
330
|
+
- spec/gherkin/formatter/json_formatter_spec.rb
|
329
331
|
- spec/gherkin/formatter/model_spec.rb
|
330
332
|
- spec/gherkin/formatter/pretty_formatter_spec.rb
|
331
333
|
- spec/gherkin/formatter/spaces.feature
|