cucumber 4.0.0.rc.1 → 4.0.0.rc.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +37 -5
- data/CONTRIBUTING.md +1 -18
- data/README.md +2 -3
- data/lib/autotest/cucumber_mixin.rb +2 -10
- data/lib/cucumber.rb +1 -1
- data/lib/cucumber/cli/configuration.rb +1 -1
- data/lib/cucumber/cli/main.rb +1 -0
- data/lib/cucumber/cli/options.rb +7 -9
- data/lib/cucumber/cli/profile_loader.rb +23 -12
- data/lib/cucumber/configuration.rb +6 -2
- data/lib/cucumber/errors.rb +2 -2
- data/lib/cucumber/formatter/ast_lookup.rb +43 -38
- data/lib/cucumber/formatter/backtrace_filter.rb +4 -1
- data/lib/cucumber/formatter/console.rb +1 -1
- data/lib/cucumber/formatter/console_issues.rb +1 -1
- data/lib/cucumber/formatter/duration.rb +1 -1
- data/lib/cucumber/formatter/duration_extractor.rb +2 -0
- data/lib/cucumber/formatter/interceptor.rb +0 -13
- data/lib/cucumber/formatter/json.rb +30 -29
- data/lib/cucumber/formatter/junit.rb +13 -11
- data/lib/cucumber/formatter/pretty.rb +62 -56
- data/lib/cucumber/formatter/summary.rb +1 -1
- data/lib/cucumber/formatter/usage.rb +3 -3
- data/lib/cucumber/gherkin/data_table_parser.rb +11 -2
- data/lib/cucumber/gherkin/steps_parser.rb +12 -2
- data/lib/cucumber/glue/proto_world.rb +2 -2
- data/lib/cucumber/glue/registry_and_more.rb +8 -1
- data/lib/cucumber/glue/snippet.rb +1 -1
- data/lib/cucumber/rake/task.rb +3 -0
- data/lib/cucumber/step_definitions.rb +2 -2
- data/lib/cucumber/version +1 -1
- metadata +185 -67
@@ -10,13 +10,16 @@ module Cucumber
|
|
10
10
|
bin/cucumber:
|
11
11
|
lib/rspec
|
12
12
|
gems/
|
13
|
+
site_ruby/
|
13
14
|
minitest
|
14
15
|
test/unit
|
15
16
|
.gem/ruby
|
16
|
-
lib/ruby/
|
17
17
|
bin/bundle
|
18
18
|
]
|
19
19
|
|
20
|
+
@backtrace_filters << RbConfig::CONFIG['rubyarchdir'] if RbConfig::CONFIG['rubyarchdir']
|
21
|
+
@backtrace_filters << RbConfig::CONFIG['rubylibdir'] if RbConfig::CONFIG['rubylibdir']
|
22
|
+
|
20
23
|
@backtrace_filters << 'org/jruby/' if ::Cucumber::JRUBY
|
21
24
|
|
22
25
|
BACKTRACE_FILTER_PATTERNS = Regexp.new(@backtrace_filters.join('|'))
|
@@ -143,7 +143,7 @@ module Cucumber
|
|
143
143
|
return unless config.wip?
|
144
144
|
messages = passed_test_cases.map do |test_case|
|
145
145
|
scenario_source = ast_lookup.scenario_source(test_case)
|
146
|
-
keyword = scenario_source.type == :Scenario ? scenario_source.scenario
|
146
|
+
keyword = scenario_source.type == :Scenario ? scenario_source.scenario.keyword : scenario_source.scenario_outline.keyword
|
147
147
|
linebreaks("#{test_case.location.on_line(test_case.location.lines.max)}:in `#{keyword}: #{test_case.name}'", ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
|
148
148
|
end
|
149
149
|
do_print_passing_wip(messages)
|
@@ -37,7 +37,7 @@ module Cucumber
|
|
37
37
|
return [] if test_cases.empty?
|
38
38
|
[format_string("#{type_heading(type)} Scenarios:", type)] + test_cases.map do |test_case|
|
39
39
|
scenario_source = @ast_lookup.scenario_source(test_case)
|
40
|
-
keyword = scenario_source.type == :Scenario ? scenario_source.scenario
|
40
|
+
keyword = scenario_source.type == :Scenario ? scenario_source.scenario.keyword : scenario_source.scenario_outline.keyword
|
41
41
|
source = @config.source? ? format_string(" # #{keyword}: #{test_case.name}", :comment) : ''
|
42
42
|
format_string("cucumber #{profiles_string}#{test_case.location.file}:#{test_case.location.lines.max}", type) + source
|
43
43
|
end
|
@@ -18,19 +18,6 @@ module Cucumber
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
# @deprecated use #buffer_string
|
22
|
-
def buffer
|
23
|
-
require 'cucumber/deprecate.rb'
|
24
|
-
Cucumber.deprecate(
|
25
|
-
'Use Cucumber::Formatter::Interceptor::Pipe#buffer_string instead',
|
26
|
-
'Cucumber::Formatter::Interceptor::Pipe#buffer',
|
27
|
-
'3.99'
|
28
|
-
)
|
29
|
-
lock.synchronize do
|
30
|
-
return @buffer.string.lines
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
21
|
def buffer_string
|
35
22
|
lock.synchronize do
|
36
23
|
return @buffer.string.dup
|
@@ -163,33 +163,34 @@ module Cucumber
|
|
163
163
|
def create_step_hash(test_step)
|
164
164
|
step_source = @ast_lookup.step_source(test_step).step
|
165
165
|
step_hash = {
|
166
|
-
keyword: step_source
|
166
|
+
keyword: step_source.keyword,
|
167
167
|
name: test_step.text,
|
168
168
|
line: test_step.location.lines.min
|
169
169
|
}
|
170
|
-
step_hash[:doc_string] = create_doc_string_hash(step_source
|
171
|
-
step_hash[:rows] = create_data_table_value(step_source
|
170
|
+
step_hash[:doc_string] = create_doc_string_hash(step_source.doc_string) unless step_source.doc_string.nil?
|
171
|
+
step_hash[:rows] = create_data_table_value(step_source.data_table) unless step_source.data_table.nil?
|
172
172
|
step_hash
|
173
173
|
end
|
174
174
|
|
175
175
|
def create_doc_string_hash(doc_string)
|
176
|
-
content_type = doc_string
|
176
|
+
content_type = doc_string.content_type || ''
|
177
177
|
{
|
178
|
-
value: doc_string
|
178
|
+
value: doc_string.content,
|
179
179
|
content_type: content_type,
|
180
|
-
line: doc_string
|
180
|
+
line: doc_string.location.line
|
181
181
|
}
|
182
182
|
end
|
183
183
|
|
184
184
|
def create_data_table_value(data_table)
|
185
|
-
data_table
|
186
|
-
{ cells: row
|
185
|
+
data_table.rows.map do |row|
|
186
|
+
{ cells: row.cells.map(&:value) }
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
190
|
def add_match_and_result(test_step, result)
|
191
191
|
@step_or_hook_hash[:match] = create_match_hash(test_step, result)
|
192
192
|
@step_or_hook_hash[:result] = create_result_hash(result)
|
193
|
+
result.embeddings.each { |e| embed(e['src'], e['mime_type'], e['label']) } if result.respond_to?(:embeddings)
|
193
194
|
end
|
194
195
|
|
195
196
|
def add_failed_around_hook(result)
|
@@ -230,9 +231,9 @@ module Cucumber
|
|
230
231
|
def initialize(test_case, ast_lookup)
|
231
232
|
@background_hash = nil
|
232
233
|
uri = test_case.location.file
|
233
|
-
feature = ast_lookup.gherkin_document(uri)
|
234
|
+
feature = ast_lookup.gherkin_document(uri).feature
|
234
235
|
feature(feature, uri)
|
235
|
-
background(feature
|
236
|
+
background(feature.children.first.background) unless feature.children.first.background.nil?
|
236
237
|
scenario(ast_lookup.scenario_source(test_case), test_case)
|
237
238
|
end
|
238
239
|
|
@@ -242,23 +243,23 @@ module Cucumber
|
|
242
243
|
|
243
244
|
def feature(feature, uri)
|
244
245
|
@feature_hash = {
|
245
|
-
id: create_id(feature
|
246
|
+
id: create_id(feature.name),
|
246
247
|
uri: uri,
|
247
|
-
keyword: feature
|
248
|
-
name: feature
|
249
|
-
description: value_or_empty_string(feature
|
250
|
-
line: feature
|
248
|
+
keyword: feature.keyword,
|
249
|
+
name: feature.name,
|
250
|
+
description: value_or_empty_string(feature.description),
|
251
|
+
line: feature.location.line
|
251
252
|
}
|
252
|
-
return if feature
|
253
|
-
@feature_hash[:tags] = create_tags_array_from_hash_array(feature
|
253
|
+
return if feature.tags.empty?
|
254
|
+
@feature_hash[:tags] = create_tags_array_from_hash_array(feature.tags)
|
254
255
|
end
|
255
256
|
|
256
257
|
def background(background)
|
257
258
|
@background_hash = {
|
258
|
-
keyword: background
|
259
|
-
name: background
|
260
|
-
description: value_or_empty_string(background
|
261
|
-
line: background
|
259
|
+
keyword: background.keyword,
|
260
|
+
name: background.name,
|
261
|
+
description: value_or_empty_string(background.description),
|
262
|
+
line: background.location.line,
|
262
263
|
type: 'background'
|
263
264
|
}
|
264
265
|
end
|
@@ -267,9 +268,9 @@ module Cucumber
|
|
267
268
|
scenario = scenario_source.type == :Scenario ? scenario_source.scenario : scenario_source.scenario_outline
|
268
269
|
@test_case_hash = {
|
269
270
|
id: "#{@feature_hash[:id]};#{create_id_from_scenario_source(scenario_source)}",
|
270
|
-
keyword: scenario
|
271
|
-
name:
|
272
|
-
description: value_or_empty_string(scenario
|
271
|
+
keyword: scenario.keyword,
|
272
|
+
name: test_case.name,
|
273
|
+
description: value_or_empty_string(scenario.description),
|
273
274
|
line: test_case.location.lines.max,
|
274
275
|
type: 'scenario'
|
275
276
|
}
|
@@ -288,24 +289,24 @@ module Cucumber
|
|
288
289
|
|
289
290
|
def create_id_from_scenario_source(scenario_source)
|
290
291
|
if scenario_source.type == :Scenario
|
291
|
-
create_id(scenario_source.scenario
|
292
|
+
create_id(scenario_source.scenario.name)
|
292
293
|
else
|
293
|
-
scenario_outline_name = scenario_source.scenario_outline
|
294
|
-
examples_name = scenario_source.examples
|
294
|
+
scenario_outline_name = scenario_source.scenario_outline.name
|
295
|
+
examples_name = scenario_source.examples.name
|
295
296
|
row_number = calculate_row_number(scenario_source)
|
296
297
|
"#{create_id(scenario_outline_name)};#{create_id(examples_name)};#{row_number}"
|
297
298
|
end
|
298
299
|
end
|
299
300
|
|
300
301
|
def calculate_row_number(scenario_source)
|
301
|
-
scenario_source.examples
|
302
|
+
scenario_source.examples.table_body.each_with_index do |row, index|
|
302
303
|
return index + 2 if row == scenario_source.row
|
303
304
|
end
|
304
305
|
end
|
305
306
|
|
306
307
|
def create_tags_array_from_hash_array(tags)
|
307
308
|
tags_array = []
|
308
|
-
tags.each { |tag| tags_array << { name: tag
|
309
|
+
tags.each { |tag| tags_array << { name: tag.name, line: tag.location.line } }
|
309
310
|
tags_array
|
310
311
|
end
|
311
312
|
|
@@ -82,8 +82,8 @@ module Cucumber
|
|
82
82
|
|
83
83
|
def start_feature(test_case)
|
84
84
|
uri = test_case.location.file
|
85
|
-
feature = @ast_lookup.gherkin_document(uri)
|
86
|
-
raise UnNamedFeatureError, uri if feature
|
85
|
+
feature = @ast_lookup.gherkin_document(uri).feature
|
86
|
+
raise UnNamedFeatureError, uri if feature.name.empty?
|
87
87
|
@current_feature_data = @features_data[uri]
|
88
88
|
@current_feature_data[:uri] = uri unless @current_feature_data[:uri]
|
89
89
|
@current_feature_data[:feature] = feature unless @current_feature_data[:feature]
|
@@ -97,8 +97,8 @@ module Cucumber
|
|
97
97
|
errors: feature_data[:errors],
|
98
98
|
skipped: feature_data[:skipped],
|
99
99
|
tests: feature_data[:tests],
|
100
|
-
time: format('
|
101
|
-
name: feature_data[:feature]
|
100
|
+
time: format('%<time>.6f', time: feature_data[:time]),
|
101
|
+
name: feature_data[:feature].name
|
102
102
|
) do
|
103
103
|
@testsuite << feature_data[:builder].target!
|
104
104
|
end
|
@@ -108,7 +108,7 @@ module Cucumber
|
|
108
108
|
|
109
109
|
def create_output_string(test_case, scenario, result, row_name) # rubocop:disable Metrics/PerceivedComplexity
|
110
110
|
scenario_source = @ast_lookup.scenario_source(test_case)
|
111
|
-
keyword = scenario_source.type == :Scenario ? scenario_source.scenario
|
111
|
+
keyword = scenario_source.type == :Scenario ? scenario_source.scenario.keyword : scenario_source.scenario_outline.keyword
|
112
112
|
output = "#{keyword}: #{scenario}\n\n"
|
113
113
|
return output if result.ok?(@config.strict)
|
114
114
|
if scenario_source.type == :Scenario
|
@@ -117,7 +117,7 @@ module Cucumber
|
|
117
117
|
output += "#{@failing_test_step.text} at #{@failing_test_step.location}\n"
|
118
118
|
else
|
119
119
|
step_source = @ast_lookup.step_source(@failing_test_step).step
|
120
|
-
output += "#{step_source
|
120
|
+
output += "#{step_source.keyword}#{@failing_test_step.text}\n"
|
121
121
|
end
|
122
122
|
else # An Around hook has failed
|
123
123
|
output += "Around hook\n"
|
@@ -131,10 +131,10 @@ module Cucumber
|
|
131
131
|
def build_testcase(result, scenario_designation, output)
|
132
132
|
duration = ResultBuilder.new(result).test_case_duration
|
133
133
|
@current_feature_data[:time] += duration
|
134
|
-
classname = @current_feature_data[:feature]
|
134
|
+
classname = @current_feature_data[:feature].name
|
135
135
|
name = scenario_designation
|
136
136
|
|
137
|
-
@current_feature_data[:builder].testcase(classname: classname, name: name, time: format('
|
137
|
+
@current_feature_data[:builder].testcase(classname: classname, name: name, time: format('%<duration>.6f', duration: duration)) do
|
138
138
|
if !result.passed? && result.ok?(@config.strict)
|
139
139
|
@current_feature_data[:builder].skipped
|
140
140
|
@current_feature_data[:skipped] += 1
|
@@ -203,15 +203,15 @@ module Cucumber
|
|
203
203
|
end
|
204
204
|
|
205
205
|
def scenario(scenario)
|
206
|
-
@scenario_name = scenario
|
206
|
+
@scenario_name = scenario.name.empty? ? 'Unnamed scenario' : scenario.name
|
207
207
|
end
|
208
208
|
|
209
209
|
def scenario_outline(outline)
|
210
|
-
@scenario_name = outline
|
210
|
+
@scenario_name = outline.name.empty? ? 'Unnamed scenario outline' : outline.name
|
211
211
|
end
|
212
212
|
|
213
213
|
def examples_table_row(row)
|
214
|
-
@row_name = '| ' + row
|
214
|
+
@row_name = '| ' + row.cells.map(&:value).join(' | ') + ' |'
|
215
215
|
@name_suffix = " (outline example : #{@row_name})"
|
216
216
|
end
|
217
217
|
end
|
@@ -238,6 +238,8 @@ module Cucumber
|
|
238
238
|
def duration(duration, *)
|
239
239
|
duration.tap { |dur| @test_case_duration = dur.nanoseconds / 10**9.0 }
|
240
240
|
end
|
241
|
+
|
242
|
+
def embed(*) end
|
241
243
|
end
|
242
244
|
end
|
243
245
|
end
|
@@ -19,7 +19,7 @@ module Cucumber
|
|
19
19
|
#
|
20
20
|
# If the output is STDOUT (and not a file), there are bright colours to watch too.
|
21
21
|
#
|
22
|
-
class Pretty
|
22
|
+
class Pretty # rubocop:disable Metrics/ClassLength
|
23
23
|
include FileUtils
|
24
24
|
include Console
|
25
25
|
include Io
|
@@ -101,13 +101,11 @@ module Cucumber
|
|
101
101
|
print_step_header(current_test_case) if first_step_after_printing_background_steps?(event.test_step)
|
102
102
|
end
|
103
103
|
|
104
|
-
def on_test_step_finished(event)
|
104
|
+
def on_test_step_finished(event)
|
105
105
|
collect_snippet_data(event.test_step, @ast_lookup) if event.result.undefined?
|
106
106
|
return if in_scenario_outline && !options[:expand]
|
107
107
|
exception_to_be_printed = find_exception_to_be_printed(event.result)
|
108
|
-
|
109
|
-
print_step_data(event.test_step, event.result) if !event.test_step.hook? && (print_background_steps || event.test_step.location.lines.max >= current_test_case.location.lines.max || exception_to_be_printed)
|
110
|
-
# rubocop:enable Metrics/LineLength
|
108
|
+
print_step_data(event.test_step, event.result) if print_step_data?(event, exception_to_be_printed)
|
111
109
|
print_step_output
|
112
110
|
return unless exception_to_be_printed
|
113
111
|
print_exception(exception_to_be_printed, event.result.to_sym, 6)
|
@@ -155,10 +153,10 @@ module Cucumber
|
|
155
153
|
end
|
156
154
|
|
157
155
|
def calculate_source_indent_for_ast_node(ast_node)
|
158
|
-
indent = 4 + ast_node
|
159
|
-
indent += 1 + ast_node
|
160
|
-
ast_node
|
161
|
-
step_indent = 5 + step
|
156
|
+
indent = 4 + ast_node.keyword.length
|
157
|
+
indent += 1 + ast_node.name.length
|
158
|
+
ast_node.steps.each do |step|
|
159
|
+
step_indent = 5 + step.keyword.length + step.text.length
|
162
160
|
indent = step_indent if step_indent > indent
|
163
161
|
end
|
164
162
|
indent
|
@@ -190,9 +188,9 @@ module Cucumber
|
|
190
188
|
end
|
191
189
|
|
192
190
|
def feature_has_background?
|
193
|
-
feature_children = gherkin_document
|
191
|
+
feature_children = gherkin_document.feature.children
|
194
192
|
return false if feature_children.empty?
|
195
|
-
!feature_children.first
|
193
|
+
!feature_children.first.background.nil?
|
196
194
|
end
|
197
195
|
|
198
196
|
def print_step_header(test_case)
|
@@ -240,12 +238,12 @@ module Cucumber
|
|
240
238
|
end
|
241
239
|
|
242
240
|
def print_feature_data
|
243
|
-
feature = gherkin_document
|
244
|
-
print_language_comment(feature
|
245
|
-
print_comments(feature
|
246
|
-
print_tags(feature
|
241
|
+
feature = gherkin_document.feature
|
242
|
+
print_language_comment(feature.location.line)
|
243
|
+
print_comments(feature.location.line, 0)
|
244
|
+
print_tags(feature.tags, 0)
|
247
245
|
print_feature_line(feature)
|
248
|
-
print_description(feature
|
246
|
+
print_description(feature.description)
|
249
247
|
@io.flush
|
250
248
|
end
|
251
249
|
|
@@ -256,11 +254,11 @@ module Cucumber
|
|
256
254
|
end
|
257
255
|
|
258
256
|
def print_comments(up_to_line, indent)
|
259
|
-
comments = gherkin_document
|
257
|
+
comments = gherkin_document.comments
|
260
258
|
return if comments.empty? || comments.length <= @next_comment_to_be_printed
|
261
259
|
comments[@next_comment_to_be_printed..-1].each do |comment|
|
262
|
-
if comment
|
263
|
-
@io.puts(format_string(comment
|
260
|
+
if comment.location.line <= up_to_line
|
261
|
+
@io.puts(format_string(comment.text.strip, :comment).indent(indent))
|
264
262
|
@next_comment_to_be_printed += 1
|
265
263
|
end
|
266
264
|
break if @next_comment_to_be_printed >= comments.length
|
@@ -269,11 +267,11 @@ module Cucumber
|
|
269
267
|
|
270
268
|
def print_tags(tags, indent)
|
271
269
|
return if !tags || tags.empty?
|
272
|
-
@io.puts(tags.map { |tag| format_string(tag
|
270
|
+
@io.puts(tags.map { |tag| format_string(tag.name, :tag) }.join(' ').indent(indent))
|
273
271
|
end
|
274
272
|
|
275
273
|
def print_feature_line(feature)
|
276
|
-
print_keyword_name(feature
|
274
|
+
print_keyword_name(feature.keyword, feature.name, 0)
|
277
275
|
end
|
278
276
|
|
279
277
|
def print_keyword_name(keyword, name, indent, location = nil)
|
@@ -296,29 +294,37 @@ module Cucumber
|
|
296
294
|
|
297
295
|
def print_background_data
|
298
296
|
@io.puts
|
299
|
-
background = gherkin_document
|
297
|
+
background = gherkin_document.feature.children.first.background
|
300
298
|
@source_indent = calculate_source_indent_for_ast_node(background) if options[:source]
|
301
|
-
print_comments(background
|
299
|
+
print_comments(background.location.line, 2)
|
302
300
|
print_background_line(background)
|
303
|
-
print_description(background
|
301
|
+
print_description(background.description)
|
304
302
|
@io.flush
|
305
303
|
end
|
306
304
|
|
307
305
|
def print_background_line(background)
|
308
|
-
print_keyword_name(background
|
306
|
+
print_keyword_name(background.keyword, background.name, 2, "#{current_feature_uri}:#{background.location.line}")
|
309
307
|
end
|
310
308
|
|
311
309
|
def print_scenario_data(test_case)
|
312
310
|
scenario = scenario_source(test_case).scenario
|
313
|
-
print_comments(scenario
|
314
|
-
print_tags(scenario
|
311
|
+
print_comments(scenario.location.line, 2)
|
312
|
+
print_tags(scenario.tags, 2)
|
315
313
|
print_scenario_line(scenario, test_case.location)
|
316
|
-
print_description(scenario
|
314
|
+
print_description(scenario.description)
|
317
315
|
@io.flush
|
318
316
|
end
|
319
317
|
|
320
318
|
def print_scenario_line(scenario, location = nil)
|
321
|
-
print_keyword_name(scenario
|
319
|
+
print_keyword_name(scenario.keyword, scenario.name, 2, location)
|
320
|
+
end
|
321
|
+
|
322
|
+
def print_step_data?(event, exception_to_be_printed)
|
323
|
+
!event.test_step.hook? && (
|
324
|
+
print_background_steps ||
|
325
|
+
event.test_step.location.lines.max >= current_test_case.location.lines.max ||
|
326
|
+
exception_to_be_printed
|
327
|
+
)
|
322
328
|
end
|
323
329
|
|
324
330
|
def print_step_data(test_step, result)
|
@@ -334,7 +340,7 @@ module Cucumber
|
|
334
340
|
|
335
341
|
def test_step_keyword(test_step)
|
336
342
|
step = step_source(test_step).step
|
337
|
-
step
|
343
|
+
step.keyword
|
338
344
|
end
|
339
345
|
|
340
346
|
def step_source(test_step)
|
@@ -355,38 +361,38 @@ module Cucumber
|
|
355
361
|
|
356
362
|
def print_multiline_argument(test_step, result, indent)
|
357
363
|
step = step_source(test_step).step
|
358
|
-
if !step
|
359
|
-
print_doc_string(step
|
360
|
-
elsif !step
|
361
|
-
print_data_table(step
|
364
|
+
if !step.doc_string.nil?
|
365
|
+
print_doc_string(step.doc_string.content, result.to_sym, indent)
|
366
|
+
elsif !step.data_table.nil?
|
367
|
+
print_data_table(step.data_table, result.to_sym, indent)
|
362
368
|
end
|
363
369
|
end
|
364
370
|
|
365
371
|
def print_data_table(data_table, status, indent)
|
366
|
-
data_table
|
367
|
-
print_comments(row
|
368
|
-
@io.puts format_string(gherkin_source.split("\n")[row
|
372
|
+
data_table.rows.each do |row|
|
373
|
+
print_comments(row.location.line, indent)
|
374
|
+
@io.puts format_string(gherkin_source.split("\n")[row.location.line - 1].strip, status).indent(indent)
|
369
375
|
end
|
370
376
|
end
|
371
377
|
|
372
378
|
def print_outline_data(scenario_outline) # rubocop:disable Metrics/AbcSize
|
373
|
-
print_comments(scenario_outline
|
374
|
-
print_tags(scenario_outline
|
379
|
+
print_comments(scenario_outline.location.line, 2)
|
380
|
+
print_tags(scenario_outline.tags, 2)
|
375
381
|
@source_indent = calculate_source_indent_for_ast_node(scenario_outline) if options[:source]
|
376
|
-
print_scenario_line(scenario_outline, "#{current_feature_uri}:#{scenario_outline
|
377
|
-
print_description(scenario_outline
|
378
|
-
scenario_outline
|
379
|
-
print_comments(step
|
380
|
-
step_line = " #{step
|
382
|
+
print_scenario_line(scenario_outline, "#{current_feature_uri}:#{scenario_outline.location.line}")
|
383
|
+
print_description(scenario_outline.description)
|
384
|
+
scenario_outline.steps.each do |step|
|
385
|
+
print_comments(step.location.line, 4)
|
386
|
+
step_line = " #{step.keyword}#{step.text}"
|
381
387
|
@io.print(format_string(step_line, :skipped))
|
382
388
|
if options[:source]
|
383
|
-
comment_line = format_string("# #{current_feature_uri}:#{step
|
389
|
+
comment_line = format_string("# #{current_feature_uri}:#{step.location.line}", :comment)
|
384
390
|
@io.print(comment_line.indent(@source_indent - step_line.length))
|
385
391
|
end
|
386
392
|
@io.puts
|
387
393
|
next if options[:no_multiline]
|
388
|
-
print_doc_string(step
|
389
|
-
print_data_table(step
|
394
|
+
print_doc_string(step.doc_string.content, :skipped, 6) unless step.doc_string.nil?
|
395
|
+
print_data_table(step.data_table, :skipped, 6) unless step.data_table.nil?
|
390
396
|
end
|
391
397
|
@io.flush
|
392
398
|
end
|
@@ -398,13 +404,13 @@ module Cucumber
|
|
398
404
|
end
|
399
405
|
|
400
406
|
def print_examples_data(examples)
|
401
|
-
print_comments(examples
|
402
|
-
print_tags(examples
|
403
|
-
print_keyword_name(examples
|
404
|
-
print_description(examples
|
407
|
+
print_comments(examples.location.line, 4)
|
408
|
+
print_tags(examples.tags, 4)
|
409
|
+
print_keyword_name(examples.keyword, examples.name, 4)
|
410
|
+
print_description(examples.description)
|
405
411
|
unless options[:expand]
|
406
|
-
print_comments(examples
|
407
|
-
@io.puts(gherkin_source.split("\n")[examples
|
412
|
+
print_comments(examples.table_header.location.line, 6)
|
413
|
+
@io.puts(gherkin_source.split("\n")[examples.table_header.location.line - 1].strip.indent(6))
|
408
414
|
end
|
409
415
|
@io.flush
|
410
416
|
end
|
@@ -427,12 +433,12 @@ module Cucumber
|
|
427
433
|
end
|
428
434
|
|
429
435
|
def print_expanded_row_data(test_case)
|
430
|
-
feature = gherkin_document
|
431
|
-
language_code = feature
|
436
|
+
feature = gherkin_document.feature
|
437
|
+
language_code = feature.language || 'en'
|
432
438
|
language = ::Gherkin::Dialect.for(language_code)
|
433
439
|
scenario_keyword = language.scenario_keywords[0]
|
434
440
|
row = scenario_source(test_case).row
|
435
|
-
expanded_name = '| ' + row
|
441
|
+
expanded_name = '| ' + row.cells.map(&:value).join(' | ') + ' |'
|
436
442
|
@source_indent = calculate_source_indent_for_expanded_test_case(test_case, scenario_keyword, expanded_name)
|
437
443
|
@io.puts
|
438
444
|
print_keyword_name(scenario_keyword, expanded_name, 6, test_case.location)
|