cucumber 11.0.0 → 11.1.0
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 +4 -4
- data/README.md +15 -6
- data/VERSION +1 -1
- data/lib/cucumber/cli/main.rb +22 -0
- data/lib/cucumber/configuration.rb +4 -0
- data/lib/cucumber/events/base.rb +25 -0
- data/lib/cucumber/events/envelope.rb +11 -2
- data/lib/cucumber/events/gherkin_source_parsed.rb +12 -3
- data/lib/cucumber/events/gherkin_source_read.rb +11 -3
- data/lib/cucumber/events/hook_test_step_created.rb +12 -2
- data/lib/cucumber/events/step_activated.rb +13 -7
- data/lib/cucumber/events/step_definition_registered.rb +12 -4
- data/lib/cucumber/events/test_case_created.rb +11 -3
- data/lib/cucumber/events/test_case_finished.rb +12 -4
- data/lib/cucumber/events/test_case_ready.rb +10 -4
- data/lib/cucumber/events/test_case_started.rb +11 -2
- data/lib/cucumber/events/test_run_finished.rb +10 -3
- data/lib/cucumber/events/test_run_hook_finished.rb +11 -3
- data/lib/cucumber/events/test_run_hook_started.rb +10 -1
- data/lib/cucumber/events/test_run_started.rb +11 -2
- data/lib/cucumber/events/test_step_created.rb +12 -2
- data/lib/cucumber/events/test_step_finished.rb +12 -2
- data/lib/cucumber/events/test_step_started.rb +11 -2
- data/lib/cucumber/events/undefined_parameter_type.rb +11 -3
- data/lib/cucumber/filters/fire_before_all_hooks.rb +36 -0
- data/lib/cucumber/formatter/console.rb +15 -7
- data/lib/cucumber/formatter/console_issues.rb +5 -5
- data/lib/cucumber/formatter/fail_fast.rb +3 -4
- data/lib/cucumber/formatter/global_hooks_summary.rb +36 -0
- data/lib/cucumber/formatter/json.rb +5 -3
- data/lib/cucumber/formatter/junit.rb +4 -6
- data/lib/cucumber/formatter/message.rb +7 -4
- data/lib/cucumber/formatter/message_builder.rb +207 -205
- data/lib/cucumber/formatter/pretty.rb +2 -5
- data/lib/cucumber/formatter/progress.rb +0 -2
- data/lib/cucumber/formatter/rerun.rb +10 -4
- data/lib/cucumber/formatter/usage.rb +1 -2
- data/lib/cucumber/glue/proto_world.rb +6 -4
- data/lib/cucumber/glue/registry_and_more.rb +98 -9
- data/lib/cucumber/runtime/user_interface.rb +2 -2
- data/lib/cucumber/runtime.rb +28 -9
- metadata +9 -14
- data/lib/cucumber/formatter/errors.rb +0 -9
- data/lib/cucumber/formatter/query/hook_by_test_step.rb +0 -34
- data/lib/cucumber/formatter/query/pickle_by_test.rb +0 -28
- data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +0 -42
- data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +0 -45
|
@@ -116,11 +116,11 @@ module Cucumber
|
|
|
116
116
|
def collect_snippet_data(test_step, ast_lookup)
|
|
117
117
|
# collect snippet data for undefined steps
|
|
118
118
|
keyword = ast_lookup.snippet_step_keyword(test_step)
|
|
119
|
-
|
|
119
|
+
snippets_input << Console::SnippetData.new(keyword, test_step)
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
def collect_undefined_parameter_type_names(undefined_parameter_type)
|
|
123
|
-
|
|
123
|
+
undefined_parameter_types << undefined_parameter_type.type_name
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
def print_snippets(options)
|
|
@@ -129,9 +129,9 @@ module Cucumber
|
|
|
129
129
|
snippet_text_proc = lambda do |step_keyword, step_name, multiline_arg|
|
|
130
130
|
snippet_text(step_keyword, step_name, multiline_arg)
|
|
131
131
|
end
|
|
132
|
-
do_print_snippets(snippet_text_proc) unless
|
|
132
|
+
do_print_snippets(snippet_text_proc) unless snippets_input.empty?
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
undefined_parameter_types.map do |type_name|
|
|
135
135
|
do_print_undefined_parameter_type_snippet(type_name)
|
|
136
136
|
end
|
|
137
137
|
end
|
|
@@ -169,7 +169,7 @@ module Cucumber
|
|
|
169
169
|
end
|
|
170
170
|
end
|
|
171
171
|
|
|
172
|
-
def attach(src, media_type, filename)
|
|
172
|
+
def attach(src, media_type, filename, _streamed_file)
|
|
173
173
|
return unless media_type == 'text/x.cucumber.log+plain'
|
|
174
174
|
return unless @io
|
|
175
175
|
|
|
@@ -249,11 +249,19 @@ module Cucumber
|
|
|
249
249
|
|
|
250
250
|
def snippet_text(step_keyword, step_name, multiline_arg)
|
|
251
251
|
keyword = Cucumber::Gherkin::I18n.code_keyword_for(step_keyword).strip
|
|
252
|
-
config.snippet_generators.map do |generator|
|
|
253
|
-
generator.call(keyword, step_name, multiline_arg, config.snippet_type)
|
|
252
|
+
@config.snippet_generators.map do |generator|
|
|
253
|
+
generator.call(keyword, step_name, multiline_arg, @config.snippet_type)
|
|
254
254
|
end.join("\n")
|
|
255
255
|
end
|
|
256
256
|
|
|
257
|
+
def snippets_input
|
|
258
|
+
@snippets_input ||= []
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def undefined_parameter_types
|
|
262
|
+
@undefined_parameter_types ||= []
|
|
263
|
+
end
|
|
264
|
+
|
|
257
265
|
class SnippetData
|
|
258
266
|
attr_reader :actual_keyword, :step
|
|
259
267
|
|
|
@@ -10,6 +10,7 @@ module Cucumber
|
|
|
10
10
|
def initialize(config, ast_lookup = AstLookup.new(config))
|
|
11
11
|
@previous_test_case = nil
|
|
12
12
|
@issues = Hash.new { |h, k| h[k] = [] }
|
|
13
|
+
@global_hooks_summary = GlobalHooksSummary.new(config)
|
|
13
14
|
@config = config
|
|
14
15
|
@config.on_event(:test_case_finished) do |event|
|
|
15
16
|
if event.test_case != @previous_test_case
|
|
@@ -24,14 +25,13 @@ module Cucumber
|
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
def to_s
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
result.flatten.join("\n")
|
|
28
|
+
test_case_result = @issues.empty? ? [] : Core::Test::Result::TYPES.map { |type| scenario_listing(type, @issues[type]) }
|
|
29
|
+
global_hooks_result = @global_hooks_summary.ok? ? [] : @global_hooks_summary.exception_listing
|
|
30
|
+
[test_case_result + global_hooks_result].flatten.join("\n")
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def any?
|
|
34
|
-
@issues.any?
|
|
34
|
+
@issues.any? || !@global_hooks_summary.ok?
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
private
|
|
@@ -9,11 +9,10 @@ module Cucumber
|
|
|
9
9
|
def initialize(configuration)
|
|
10
10
|
@previous_test_case = nil
|
|
11
11
|
configuration.on_event :test_case_finished do |event|
|
|
12
|
-
test_case
|
|
13
|
-
if test_case != @previous_test_case
|
|
12
|
+
if event.test_case != @previous_test_case
|
|
14
13
|
@previous_test_case = event.test_case
|
|
15
|
-
Cucumber.wants_to_quit = true unless result.ok?(strict: configuration.strict)
|
|
16
|
-
elsif result.passed?
|
|
14
|
+
Cucumber.wants_to_quit = true unless event.result.ok?(strict: configuration.strict)
|
|
15
|
+
elsif event.result.passed?
|
|
17
16
|
Cucumber.wants_to_quit = false
|
|
18
17
|
end
|
|
19
18
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'cucumber/formatter/io'
|
|
4
|
+
require 'cucumber/formatter/console'
|
|
5
|
+
require 'cucumber/formatter/console_counts'
|
|
6
|
+
require 'cucumber/formatter/console_issues'
|
|
7
|
+
require 'cucumber/core/test/result'
|
|
8
|
+
require 'cucumber/formatter/ast_lookup'
|
|
9
|
+
|
|
10
|
+
module Cucumber
|
|
11
|
+
module Formatter
|
|
12
|
+
# AllHookSummary formatter, keep track of failures in Before/AfterAll hooks
|
|
13
|
+
class GlobalHooksSummary
|
|
14
|
+
include Console
|
|
15
|
+
|
|
16
|
+
def initialize(config)
|
|
17
|
+
@config = config
|
|
18
|
+
@all_hook_failures = []
|
|
19
|
+
|
|
20
|
+
@config.on_event :test_run_hook_finished do |event|
|
|
21
|
+
@all_hook_failures << event unless event.test_result.ok?
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def ok?
|
|
26
|
+
@all_hook_failures.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def exception_listing
|
|
30
|
+
[format_string('Global hook failures:', :failed)] + @all_hook_failures.map do |event|
|
|
31
|
+
format_string("#{event.hook.location} # #{event.test_result.exception} (#{event.test_result.exception.class})", :failed)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -65,7 +65,8 @@ module Cucumber
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def on_test_step_finished(event)
|
|
68
|
-
test_step
|
|
68
|
+
test_step = event.test_step
|
|
69
|
+
result = event.result
|
|
69
70
|
result = result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
70
71
|
return if internal_hook?(test_step)
|
|
71
72
|
|
|
@@ -76,7 +77,8 @@ module Cucumber
|
|
|
76
77
|
def on_test_case_finished(event)
|
|
77
78
|
feature_elements << @test_case_hash if @in_background
|
|
78
79
|
|
|
79
|
-
_test_case
|
|
80
|
+
_test_case = event.test_case
|
|
81
|
+
result = event.result
|
|
80
82
|
result = result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
81
83
|
add_failed_around_hook(result) if result.failed? && !@any_step_failed
|
|
82
84
|
end
|
|
@@ -85,7 +87,7 @@ module Cucumber
|
|
|
85
87
|
@io.write(JSON.pretty_generate(@feature_hashes))
|
|
86
88
|
end
|
|
87
89
|
|
|
88
|
-
def attach(src, mime_type, _filename)
|
|
90
|
+
def attach(src, mime_type, _filename, _streamed_file)
|
|
89
91
|
if mime_type == 'text/x.cucumber.log+plain'
|
|
90
92
|
test_step_output << src
|
|
91
93
|
return
|
|
@@ -51,19 +51,17 @@ module Cucumber
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def on_test_step_finished(event)
|
|
54
|
-
test_step, result = *event.attributes
|
|
55
54
|
return if @failing_test_step
|
|
56
55
|
|
|
57
|
-
@failing_test_step = test_step unless result.ok?(strict: @config.strict)
|
|
56
|
+
@failing_test_step = event.test_step unless event.result.ok?(strict: @config.strict)
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
def on_test_case_finished(event)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
test_case_name = NameBuilder.new(test_case, @ast_lookup)
|
|
60
|
+
result = event.result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
61
|
+
test_case_name = NameBuilder.new(event.test_case, @ast_lookup)
|
|
64
62
|
scenario = test_case_name.scenario_name
|
|
65
63
|
scenario_designation = "#{scenario}#{test_case_name.name_suffix}"
|
|
66
|
-
output = create_output_string(test_case, scenario, result, test_case_name.row_name)
|
|
64
|
+
output = create_output_string(event.test_case, scenario, result, test_case_name.row_name)
|
|
67
65
|
build_testcase(result, scenario_designation, output)
|
|
68
66
|
|
|
69
67
|
Interceptor::Pipe.unwrap! :stdout
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'cucumber/formatter/io'
|
|
4
|
-
require 'cucumber/
|
|
4
|
+
require 'cucumber/query'
|
|
5
5
|
|
|
6
6
|
module Cucumber
|
|
7
7
|
module Formatter
|
|
8
8
|
# The formatter used for <tt>--format message</tt>
|
|
9
|
-
class Message
|
|
9
|
+
class Message
|
|
10
10
|
include Io
|
|
11
11
|
|
|
12
12
|
def initialize(config)
|
|
13
13
|
@io = ensure_io(config.out_stream, config.error_stream)
|
|
14
|
-
|
|
14
|
+
@repository = Cucumber::Repository.new
|
|
15
|
+
@query = Cucumber::Query.new(@repository)
|
|
16
|
+
config.on_event :envelope, &method(:output_envelope)
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
def output_envelope(
|
|
19
|
+
def output_envelope(event)
|
|
20
|
+
envelope = event.envelope
|
|
18
21
|
@repository.update(envelope)
|
|
19
22
|
@io.write(envelope.to_json)
|
|
20
23
|
@io.write("\n")
|