cucumber-core 18.0.0 → 20.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40198f152a14c95e0b6bc0edd0191ea57223037d6452849926f20691114cfb4f
4
- data.tar.gz: 81b94a76c6113fbd26be6aba465294d61185d48202ef153196b95465f094f7c3
3
+ metadata.gz: 3bd84b9a07bbf230ece3ada9777d26e770e14ca4177f9d402d42b787161bb428
4
+ data.tar.gz: a8a9d63be60d9ce6730a9051e3baf4d2e1f31603a9f7d5f1a6d422b3acf26e53
5
5
  SHA512:
6
- metadata.gz: e20c7fad6648efad8b47f55c79259c7c35106b0778c714e31f387dbcfae17699a5283841894f5ec94ab8dd7f3792c4fd6958186ebf5a3845404c26318e9d3fa1
7
- data.tar.gz: 5c2477e304ae210c4c0efde9b2445c576d209cc116fd78e25b95afe7965c6cbba4161ae1e8e2235c3aa3d1bd92668a001f163f5dabd848206758a7a2700484c9
6
+ metadata.gz: 982d630ac7ea748ba08618bf3e0b4c42f6b9b9d01715772a28087610abc3bb1e7acd5ddf2d47e82ba2bf4bb01912f9e314ebbebfa6301e8b3fa3333dd2413a9a
7
+ data.tar.gz: cbf97dd45ce2b701f652a0ece83419ae1d798f6a167989b4f312197b24fec540ab2518a77d0ce42885c34ffdf7c4b27cd77ef53d26f781e9810774e202a44e7a
data/CHANGELOG.md CHANGED
@@ -10,8 +10,30 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [20.0.0] - 2026-10-09
14
+ ### Changed
15
+ - **BREAKING CHANGE:** `Cucumber::Core::Test::Runner` now takes a retry policy instead of a maximum number of attempts, and
16
+ asks it whether a finished test case will be retried. Its optional constructor arguments became keyword arguments. See upgrading notes for
17
+ [20.0.0.md](upgrading_notes/20.0.0.md#upgrading-to-cucumber-core-2000), for full changes
18
+
19
+ ### Fixed
20
+ - The `TestCaseFinished` envelope is now emitted before the `test_case_finished` event, so a test case retried from
21
+ that event no longer has its envelope emitted out of order and with the started id of the retry
22
+
23
+ ## [19.0.0] - 2026-08-19
24
+ ### Added
25
+ - Emit test_case_started/finished and test_step_started/test_step_finished envelopes from the Runner. ([#331](https://github.com/cucumber/cucumber-ruby-core/pull/331))
26
+
27
+ ### Changed
28
+ - Increased upper bounds of `cucumber-messages` to v34 and `cucumber-gherkin` to v42
29
+ - **BREAKING CHANGE:** Event base class has been internally refactored. See upgrading notes for [19.0.0.md](upgrading_notes/19.0.0.md#upgrading-to-cucumber-core-1900), for full changes
30
+ - Permit usage of `cucumber-tag-expressions` up to v11
31
+
13
32
  ## [18.0.0] - 2026-07-13
14
33
  ### Changed
34
+ - **BREAKING CHANGE:** Structure of Gherkin writer helpers have been changed. Now one helper per file, and all helpers are still available by requiring `gherkin/writer/helpers`.
35
+ See upgrading notes for [18.0.0.md](upgrading_notes/18.0.0.md#upgrading-to-cucumber-core-1800), for full changes
36
+ - **BREAKING CHANGE:** Flaky results are now treated as a passing state. See upgrading notes for [18.0.0.md](upgrading_notes/18.0.0.md#upgrading-to-cucumber-core-1800), for full changes
15
37
  - Tidied up a bunch of mostly internal test code to be more rubocop compliant
16
38
 
17
39
  ## [17.0.0] - 2026-06-01
@@ -91,6 +113,8 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
91
113
 
92
114
  ## [14.0.0] - 2024-08-08
93
115
  ### Changed
116
+ - **BREAKING CHANGE:** Structure of `Action` classes have changed. See upgrading notes for [14.0.0.md](upgrading_notes/14.0.0.md#upgrading-to-cucumber-core-1400)
117
+ ([#282](https://github.com/cucumber/cucumber-ruby-core/pull/282))
94
118
  - Permit usage of gherkin up to v29 and messages up to v26
95
119
 
96
120
  ### Removed
@@ -150,7 +174,9 @@ See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-cucum
150
174
  ### Changed
151
175
  - Updated `cucumber-gherkin` and `cucumber-messages`
152
176
 
153
- [Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/v18.0.0...HEAD
177
+ [Unreleased]: https://github.com/cucumber/cucumber-ruby-core/compare/v20.0.0...HEAD
178
+ [20.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v19.0.0...v20.0.0
179
+ [19.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v18.0.0...v19.0.0
154
180
  [18.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v17.0.0...v18.0.0
155
181
  [17.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v16.2.0...v17.0.0
156
182
  [16.2.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v16.1.1...v16.2.0
@@ -171,10 +197,3 @@ See upgrading notes for [13.0.0.md](upgrading_notes/13.0.0.md#upgrading-to-cucum
171
197
  [12.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.1.0...v12.0.0
172
198
  [11.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.0.0...v11.1.0
173
199
  [11.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.1.1...v11.0.0
174
- .3]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.2...v13.0.3
175
- [13.0.2]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.1...v13.0.2
176
- [13.0.1]: https://github.com/cucumber/cucumber-ruby-core/compare/v13.0.0...v13.0.1
177
- [13.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v12.0.0...v13.0.0
178
- [12.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.1.0...v12.0.0
179
- [11.1.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v11.0.0...v11.1.0
180
- [11.0.0]: https://github.com/cucumber/cucumber-ruby-core/compare/v10.1.1...v11.0.0
data/README.md CHANGED
@@ -5,8 +5,7 @@
5
5
  [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://vshymanskyy.github.io/StandWithUkraine)
6
6
  [![OpenCollective](https://opencollective.com/cucumber/backers/badge.svg)](https://opencollective.com/cucumber)
7
7
  [![OpenCollective](https://opencollective.com/cucumber/sponsors/badge.svg)](https://opencollective.com/cucumber)
8
- [![Test cucumber-core](https://github.com/cucumber/cucumber-ruby-core/actions/workflows/test.yml/badge.svg)](https://github.com/cucumber/cucumber-ruby-core/actions/workflows/test.yml)
9
- [![Code Climate](https://codeclimate.com/github/cucumber/cucumber-ruby-core.svg)](https://codeclimate.com/github/cucumber/cucumber-ruby-core)
8
+ [![Test cucumber-core](https://github.com/cucumber/cucumber-ruby-core/actions/workflows/test-ruby.yaml/badge.svg)](https://github.com/cucumber/cucumber-ruby-core/actions/workflows/test-ruby.yaml)
10
9
 
11
10
  Cucumber is a tool for running automated tests written in plain language. Because they're
12
11
  written in plain language, they can be read by anyone on your team. Because they can be
@@ -45,11 +44,7 @@ or install the gem directly:
45
44
 
46
45
  ### Supported platforms
47
46
 
48
- - Ruby 3.3
49
- - Ruby 3.2
50
- - Ruby 3.1
51
- - Ruby 3.0
52
- - JRuby 9.4 (with [some limitations](https://github.com/cucumber/cucumber-ruby/blob/main/docs/jruby-limitations.md))
47
+ Supported Platforms are detailed in the [cucumber-ruby repository](https://github.com/cucumber/cucumber-ruby#supported-platforms).
53
48
 
54
49
  ## Usage
55
50
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Cucumber
4
4
  module Core
5
- module Events
5
+ module Event
6
6
  # An archetype of what each Cucumber Event defined in cucumber-ruby must adhere to
7
7
  class Base
8
8
  # The "key" name of the class to be used as the key in the event registry (Underscored name symbolized)
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  class Envelope < Base
9
9
  attr_reader :envelope
10
10
 
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a gherkin source has been parsed
9
9
  class GherkinSourceParsed < Base
10
10
  # @return [GherkinDocument] the GherkinDocument Ast Node that was parsed
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a Test::Case was created from a Pickle
9
9
  class TestCaseCreated < Base
10
10
  attr_reader :test_case, :pickle
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../event'
3
+ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a {Test::Case} has finished executing
9
9
  class TestCaseFinished < Base
10
10
  # @return [Test::Case] that was executed
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a {Test::Case} is about to be executed
9
9
  class TestCaseStarted < Base
10
10
  # @return [Cucumber::Core::Test::Case] the test case to be executed
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a Test::Step was created from a PickleStep
9
9
  class TestStepCreated < Base
10
10
  attr_reader :test_step, :pickle_step
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a {Test::Step} has finished executing
9
9
  class TestStepFinished < Base
10
10
  # @return [Cucumber::Core::Test::Step] the test step that was executed
@@ -4,7 +4,7 @@ require_relative 'base'
4
4
 
5
5
  module Cucumber
6
6
  module Core
7
- module Events
7
+ module Event
8
8
  # Signals that a {Test::Step} is about to be executed
9
9
  class TestStepStarted < Base
10
10
  # @return [Cucumber::Core::Test::Step] the test step to be executed
@@ -1,61 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Cucumber
4
- module Core
5
- class Event
6
- # Macro to generate new subclasses of {Event} with attribute readers.
7
- def self.new(*events)
8
- # Use normal constructor for subclasses of Event
9
- return super if ancestors.index(Event).positive?
10
-
11
- Class.new(Event) do
12
- # NB: We need to use metaprogramming here instead of direct variable obtainment
13
- # because JRuby does not guarantee the order in which variables are defined is equivalent
14
- # to the order in which they are obtainable
15
- #
16
- # See https://github.com/jruby/jruby/issues/7988 for more info
17
- attr_reader(*events)
18
-
19
- define_method(:initialize) do |*attributes|
20
- events.zip(attributes) do |name, value|
21
- instance_variable_set(:"@#{name}", value)
22
- end
23
- end
24
- end
25
- end
26
-
27
- def to_h
28
- instance_variables.to_h do |variable_name|
29
- [variable_name[1..].to_sym, instance_variable_get(variable_name)]
30
- end
31
- end
32
-
33
- def attributes
34
- instance_variables.map { |var| instance_variable_get(var) }
35
- end
36
-
37
- def event_id
38
- self.class.event_id
39
- end
40
-
41
- class << self
42
- # @return [Symbol] the underscored name of the class to be used as the key in an event registry
43
- def event_id
44
- underscore(name.split('::').last).to_sym
45
- end
46
-
47
- private
48
-
49
- def underscore(string)
50
- string
51
- .to_s
52
- .gsub('::', '/')
53
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
54
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
55
- .tr('-', '_')
56
- .downcase
57
- end
58
- end
59
- end
60
- end
61
- end
3
+ require_relative 'event/envelope'
4
+ require_relative 'event/gherkin_source_parsed'
5
+ require_relative 'event/test_case_created'
6
+ require_relative 'event/test_case_started'
7
+ require_relative 'event/test_case_finished'
8
+ require_relative 'event/test_step_created'
9
+ require_relative 'event/test_step_started'
10
+ require_relative 'event/test_step_finished'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'events'
3
+ require_relative 'event'
4
4
 
5
5
  module Cucumber
6
6
  module Core
@@ -11,8 +11,30 @@ module Cucumber
11
11
  class EventBus
12
12
  attr_reader :event_types
13
13
 
14
+ # The registry contains all the event registered in the core, that will be used by the {EventBus} by default.
15
+ def self.registry
16
+ build_registry(
17
+ Event::Envelope,
18
+ Event::GherkinSourceParsed,
19
+ Event::TestCaseCreated,
20
+ Event::TestCaseStarted,
21
+ Event::TestCaseFinished,
22
+ Event::TestStepCreated,
23
+ Event::TestStepStarted,
24
+ Event::TestStepFinished
25
+ )
26
+ end
27
+
28
+ # Build an event registry to be passed to the {EventBus} constructor from a list of types.
29
+ # Each type must respond to `event_id` so that it can be added to the registry hash
30
+ #
31
+ # @return [Hash{Symbol => Class}]
32
+ def self.build_registry(*types)
33
+ types.to_h { |type| [type.event_id, type] }
34
+ end
35
+
14
36
  # @param registry [Hash{Symbol => Class}] a hash of event types to use on the bus
15
- def initialize(registry = Events.registry)
37
+ def initialize(registry = self.class.registry)
16
38
  @event_types = registry.freeze
17
39
  @handlers = {}
18
40
  @event_queue = []
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cucumber
4
+ module Core
5
+ module Test
6
+ class NoRetries
7
+ def will_be_retried?(_test_case, _result) = false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -2,26 +2,42 @@
2
2
 
3
3
  require 'cucumber/messages/helpers/test_step_result_comparator'
4
4
 
5
+ require_relative 'no_retries'
5
6
  require_relative 'timer'
7
+ require 'cucumber/messages'
6
8
 
7
9
  module Cucumber
8
10
  module Core
9
11
  module Test
10
12
  class Runner
11
- attr_reader :event_bus, :running_test_case, :running_test_step
12
- private :event_bus, :running_test_case, :running_test_step
13
+ include Cucumber::Messages::Helpers::TimeConversion
13
14
 
14
- def initialize(event_bus)
15
+ attr_reader :event_bus, :running_test_case, :running_test_step, :id_generator
16
+ private :event_bus, :running_test_case, :running_test_step, :id_generator
17
+
18
+ # @param retry_policy [#will_be_retried?] asked, once a test case has finished, whether it is going to be
19
+ # run again. It receives the test case and its result. By default, no test case is ever reported as retried.
20
+ def initialize(event_bus, id_generator: Cucumber::Messages::Helpers::IdGenerator::UUID.new, backtrace_filter: nil, retry_policy: NoRetries.new)
15
21
  @event_bus = event_bus
22
+ @id_generator = id_generator
23
+ @backtrace_filter = backtrace_filter
24
+ @retry_policy = retry_policy
25
+ @current_test_case = nil
16
26
  end
17
27
 
18
28
  def test_case(test_case, &descend)
29
+ @attempt = @current_test_case == test_case ? @attempt + 1 : 1
30
+ @current_test_case = test_case
31
+ @current_test_case_started_id = id_generator.new_id
19
32
  @running_test_case = RunningTestCase.new
20
33
  @running_test_step = nil
21
34
  event_bus.test_case_started(test_case)
35
+ event_bus.envelope(to_test_case_started_envelope(test_case))
36
+
22
37
  descend.call(self)
23
- result = running_test_case.result
24
- result = Result::Undefined.new('The test case has no steps', Result::UnknownDuration.new, ["#{test_case.location}:in `#{test_case.name}'"]) if result.unknown?
38
+
39
+ result = calculate_test_case_result(test_case)
40
+ event_bus.envelope(to_test_case_finished_envelope(test_case, result))
25
41
  event_bus.test_case_finished(test_case, result)
26
42
  self
27
43
  end
@@ -29,8 +45,12 @@ module Cucumber
29
45
  def test_step(test_step)
30
46
  @running_test_step = test_step
31
47
  event_bus.test_step_started test_step
48
+ event_bus.envelope(to_test_step_started_envelope(test_step))
49
+
32
50
  step_result = running_test_case.execute(test_step)
51
+
33
52
  event_bus.test_step_finished test_step, step_result
53
+ event_bus.envelope(to_test_step_finished_envelope(test_step, step_result))
34
54
  @running_test_step = nil
35
55
  self
36
56
  end
@@ -46,6 +66,85 @@ module Cucumber
46
66
  self
47
67
  end
48
68
 
69
+ def calculate_test_case_result(test_case)
70
+ if running_test_case.result.unknown?
71
+ Result::Undefined.new('The test case has no steps', Result::UnknownDuration.new, ["#{test_case.location}:in `#{test_case.name}'"])
72
+ else
73
+ running_test_case.result
74
+ end
75
+ end
76
+
77
+ def to_test_case_started_envelope(test_case)
78
+ Cucumber::Messages::Envelope.new(
79
+ test_case_started: Cucumber::Messages::TestCaseStarted.new(
80
+ id: @current_test_case_started_id,
81
+ test_case_id: test_case.id,
82
+ timestamp: time_to_timestamp(Time.now),
83
+ attempt: @attempt
84
+ )
85
+ )
86
+ end
87
+
88
+ def to_test_case_finished_envelope(test_case, result)
89
+ Cucumber::Messages::Envelope.new(
90
+ test_case_finished: Cucumber::Messages::TestCaseFinished.new(
91
+ test_case_started_id: @current_test_case_started_id,
92
+ timestamp: time_to_timestamp(Time.now),
93
+ will_be_retried: @retry_policy.will_be_retried?(test_case, result)
94
+ )
95
+ )
96
+ end
97
+
98
+ def to_test_step_started_envelope(test_step)
99
+ Cucumber::Messages::Envelope.new(
100
+ test_step_started: Cucumber::Messages::TestStepStarted.new(
101
+ test_step_id: test_step.id,
102
+ test_case_started_id: @current_test_case_started_id,
103
+ timestamp: time_to_timestamp(Time.now)
104
+ )
105
+ )
106
+ end
107
+
108
+ def to_test_step_finished_envelope(test_step, step_result)
109
+ result = @backtrace_filter.nil? ? step_result : step_result.with_filtered_backtrace(@backtrace_filter)
110
+ result_message = result.to_message
111
+ if result.failed? || result.pending?
112
+ message_element = result.failed? ? result.exception : result
113
+
114
+ result_message = Cucumber::Messages::TestStepResult.new(
115
+ status: result_message.status,
116
+ duration: result_message.duration,
117
+ message: to_error_message(message_element),
118
+ exception: to_exception_object(result, message_element)
119
+ )
120
+ end
121
+ Cucumber::Messages::Envelope.new(
122
+ test_step_finished: Cucumber::Messages::TestStepFinished.new(
123
+ test_step_id: test_step.id,
124
+ test_case_started_id: @current_test_case_started_id,
125
+ test_step_result: result_message,
126
+ timestamp: time_to_timestamp(Time.now)
127
+ )
128
+ )
129
+ end
130
+
131
+ def to_error_message(message_element)
132
+ <<~ERROR_MESSAGE
133
+ #{message_element.message} (#{message_element.class})
134
+ #{message_element.backtrace}
135
+ ERROR_MESSAGE
136
+ end
137
+
138
+ def to_exception_object(result, message_element)
139
+ return unless result.failed?
140
+
141
+ Cucumber::Messages::Exception.new(
142
+ type: message_element.class,
143
+ message: message_element.message,
144
+ stack_trace: message_element.backtrace.join("\n")
145
+ )
146
+ end
147
+
49
148
  class RunningTestCase
50
149
  include Cucumber::Messages::Helpers::TestStepResultComparator
51
150
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 18.0.0
4
+ version: 20.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -22,7 +22,7 @@ dependencies:
22
22
  version: '36'
23
23
  - - "<"
24
24
  - !ruby/object:Gem::Version
25
- version: '40'
25
+ version: '43'
26
26
  type: :runtime
27
27
  prerelease: false
28
28
  version_requirements: !ruby/object:Gem::Requirement
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '36'
33
33
  - - "<"
34
34
  - !ruby/object:Gem::Version
35
- version: '40'
35
+ version: '43'
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: cucumber-messages
38
38
  requirement: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  version: '31'
43
43
  - - "<"
44
44
  - !ruby/object:Gem::Version
45
- version: '33'
45
+ version: '35'
46
46
  type: :runtime
47
47
  prerelease: false
48
48
  version_requirements: !ruby/object:Gem::Requirement
@@ -52,7 +52,7 @@ dependencies:
52
52
  version: '31'
53
53
  - - "<"
54
54
  - !ruby/object:Gem::Version
55
- version: '33'
55
+ version: '35'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: cucumber-tag-expressions
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -62,7 +62,7 @@ dependencies:
62
62
  version: '6'
63
63
  - - "<"
64
64
  - !ruby/object:Gem::Version
65
- version: '10'
65
+ version: '12'
66
66
  type: :runtime
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
@@ -72,7 +72,7 @@ dependencies:
72
72
  version: '6'
73
73
  - - "<"
74
74
  - !ruby/object:Gem::Version
75
- version: '10'
75
+ version: '12'
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: rake
78
78
  requirement: !ruby/object:Gem::Requirement
@@ -107,14 +107,14 @@ dependencies:
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.87.0
110
+ version: 1.89.0
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.87.0
117
+ version: 1.89.0
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: rubocop-packaging
120
120
  requirement: !ruby/object:Gem::Requirement
@@ -149,14 +149,14 @@ dependencies:
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 3.9.0
152
+ version: 3.10.2
153
153
  type: :development
154
154
  prerelease: false
155
155
  version_requirements: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 3.9.0
159
+ version: 3.10.2
160
160
  description: Core library for the Cucumber BDD app
161
161
  email: cukes@googlegroups.com
162
162
  executables: []
@@ -169,17 +169,16 @@ files:
169
169
  - lib/cucumber/core.rb
170
170
  - lib/cucumber/core/compiler.rb
171
171
  - lib/cucumber/core/event.rb
172
+ - lib/cucumber/core/event/base.rb
173
+ - lib/cucumber/core/event/envelope.rb
174
+ - lib/cucumber/core/event/gherkin_source_parsed.rb
175
+ - lib/cucumber/core/event/test_case_created.rb
176
+ - lib/cucumber/core/event/test_case_finished.rb
177
+ - lib/cucumber/core/event/test_case_started.rb
178
+ - lib/cucumber/core/event/test_step_created.rb
179
+ - lib/cucumber/core/event/test_step_finished.rb
180
+ - lib/cucumber/core/event/test_step_started.rb
172
181
  - lib/cucumber/core/event_bus.rb
173
- - lib/cucumber/core/events.rb
174
- - lib/cucumber/core/events/base.rb
175
- - lib/cucumber/core/events/envelope.rb
176
- - lib/cucumber/core/events/gherkin_source_parsed.rb
177
- - lib/cucumber/core/events/test_case_created.rb
178
- - lib/cucumber/core/events/test_case_finished.rb
179
- - lib/cucumber/core/events/test_case_started.rb
180
- - lib/cucumber/core/events/test_step_created.rb
181
- - lib/cucumber/core/events/test_step_finished.rb
182
- - lib/cucumber/core/events/test_step_started.rb
183
182
  - lib/cucumber/core/filter.rb
184
183
  - lib/cucumber/core/gherkin/document.rb
185
184
  - lib/cucumber/core/gherkin/parser.rb
@@ -218,6 +217,7 @@ files:
218
217
  - lib/cucumber/core/test/filters/tag_filter.rb
219
218
  - lib/cucumber/core/test/hook_step.rb
220
219
  - lib/cucumber/core/test/location.rb
220
+ - lib/cucumber/core/test/no_retries.rb
221
221
  - lib/cucumber/core/test/result.rb
222
222
  - lib/cucumber/core/test/result/ambiguous.rb
223
223
  - lib/cucumber/core/test/result/boolean_methods.rb
@@ -261,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
261
  - !ruby/object:Gem::Version
262
262
  version: 3.2.8
263
263
  requirements: []
264
- rubygems_version: 4.0.10
264
+ rubygems_version: 4.0.16
265
265
  specification_version: 4
266
- summary: cucumber-core-18.0.0
266
+ summary: cucumber-core-20.0.0
267
267
  test_files: []
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'events/envelope'
4
- require_relative 'events/gherkin_source_parsed'
5
- require_relative 'events/test_case_created'
6
- require_relative 'events/test_case_started'
7
- require_relative 'events/test_case_finished'
8
- require_relative 'events/test_step_created'
9
- require_relative 'events/test_step_started'
10
- require_relative 'events/test_step_finished'
11
-
12
- module Cucumber
13
- module Core
14
- module Events
15
- # The registry contains all the events registered in the core, that will be used by the {EventBus} by default.
16
- def self.registry
17
- build_registry(
18
- Envelope,
19
- GherkinSourceParsed,
20
- TestCaseCreated,
21
- TestCaseStarted,
22
- TestCaseFinished,
23
- TestStepCreated,
24
- TestStepStarted,
25
- TestStepFinished
26
- )
27
- end
28
-
29
- # Build an event registry to be passed to the {EventBus} constructor from a list of types.
30
- # Each type must respond to `event_id` so that it can be added to the registry hash
31
- #
32
- # @return [Hash{Symbol => Class}]
33
- def self.build_registry(*types)
34
- types.to_h { |type| [type.event_id, type] }
35
- end
36
- end
37
- end
38
- end