cucumber 4.0.0.rc.1 → 4.0.0.rc.2
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.
- 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)
|