cucumber-core 16.1.1 → 17.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -1
  3. data/LICENSE +14 -13
  4. data/lib/cucumber/core/compiler.rb +11 -10
  5. data/lib/cucumber/core/event.rb +12 -10
  6. data/lib/cucumber/core/event_bus.rb +1 -1
  7. data/lib/cucumber/core/events/base.rb +26 -0
  8. data/lib/cucumber/core/events/envelope.rb +13 -2
  9. data/lib/cucumber/core/events/gherkin_source_parsed.rb +12 -3
  10. data/lib/cucumber/core/events/test_case_created.rb +12 -6
  11. data/lib/cucumber/core/events/test_case_finished.rb +11 -1
  12. data/lib/cucumber/core/events/test_case_started.rb +12 -3
  13. data/lib/cucumber/core/events/test_step_created.rb +12 -6
  14. data/lib/cucumber/core/events/test_step_finished.rb +14 -4
  15. data/lib/cucumber/core/events/test_step_started.rb +12 -3
  16. data/lib/cucumber/core/gherkin/document.rb +16 -6
  17. data/lib/cucumber/core/gherkin/parser.rb +5 -9
  18. data/lib/cucumber/core/report/summary.rb +2 -2
  19. data/lib/cucumber/core/test/action/defined.rb +3 -3
  20. data/lib/cucumber/core/test/action.rb +6 -6
  21. data/lib/cucumber/core/test/around_hook.rb +4 -4
  22. data/lib/cucumber/core/test/case.rb +27 -26
  23. data/lib/cucumber/core/test/data_table.rb +37 -39
  24. data/lib/cucumber/core/test/doc_string.rb +23 -23
  25. data/lib/cucumber/core/test/empty_multiline_argument.rb +8 -8
  26. data/lib/cucumber/core/test/filters/locations_filter.rb +1 -1
  27. data/lib/cucumber/core/test/filters/name_filter.rb +1 -1
  28. data/lib/cucumber/core/test/filters/tag_filter.rb +1 -1
  29. data/lib/cucumber/core/test/filters.rb +3 -3
  30. data/lib/cucumber/core/test/hook_step.rb +1 -1
  31. data/lib/cucumber/core/test/location.rb +0 -2
  32. data/lib/cucumber/core/test/result/ambiguous.rb +41 -0
  33. data/lib/cucumber/core/test/result/boolean_methods.rb +28 -0
  34. data/lib/cucumber/core/test/result/duration.rb +33 -0
  35. data/lib/cucumber/core/test/result/failed.rb +72 -0
  36. data/lib/cucumber/core/test/result/flaky.rb +21 -0
  37. data/lib/cucumber/core/test/result/passed.rb +57 -0
  38. data/lib/cucumber/core/test/result/pending.rb +41 -0
  39. data/lib/cucumber/core/test/result/raisable.rb +46 -0
  40. data/lib/cucumber/core/test/result/skipped.rb +41 -0
  41. data/lib/cucumber/core/test/result/summary.rb +89 -0
  42. data/lib/cucumber/core/test/result/undefined.rb +41 -0
  43. data/lib/cucumber/core/test/result/unknown.rb +40 -0
  44. data/lib/cucumber/core/test/result/unknown_duration.rb +26 -0
  45. data/lib/cucumber/core/test/result.rb +15 -433
  46. data/lib/cucumber/core/test/runner.rb +29 -19
  47. data/lib/cucumber/core/test/step.rb +24 -21
  48. data/lib/cucumber/core/test/tag.rb +2 -0
  49. data/lib/cucumber/core/test/timer.rb +1 -1
  50. data/lib/cucumber/core.rb +6 -5
  51. metadata +26 -16
  52. data/lib/cucumber/core/platform.rb +0 -17
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cucumber/core/test/timer'
3
+ require 'cucumber/messages/helpers/test_step_result_comparator'
4
+
5
+ require_relative 'timer'
4
6
 
5
7
  module Cucumber
6
8
  module Core
@@ -45,6 +47,8 @@ module Cucumber
45
47
  end
46
48
 
47
49
  class RunningTestCase
50
+ include Cucumber::Messages::Helpers::TestStepResultComparator
51
+
48
52
  def initialize
49
53
  @timer = Timer.new.start
50
54
  @status = Status::Unknown.new(Result::Unknown.new)
@@ -59,22 +63,27 @@ module Cucumber
59
63
  end
60
64
 
61
65
  def failed(step_result)
62
- @status = Status::Failing.new(step_result)
66
+ not_passing(step_result)
67
+ self
68
+ end
69
+
70
+ def ambiguous(step_result)
71
+ failed(step_result)
63
72
  self
64
73
  end
65
74
 
66
75
  def passed(step_result)
67
- @status = Status::Passing.new(step_result)
76
+ @status = Status::Passing.new(step_result) if test_step_result_rankings[step_result.to_message.status] > test_step_result_rankings[status.step_result_message.status]
68
77
  self
69
78
  end
70
79
 
71
80
  def pending(_message, step_result)
72
- @status = Status::Pending.new(step_result)
81
+ failed(step_result)
73
82
  self
74
83
  end
75
84
 
76
85
  def skipped(step_result)
77
- @status = Status::Skipping.new(step_result)
86
+ failed(step_result)
78
87
  self
79
88
  end
80
89
 
@@ -91,6 +100,13 @@ module Cucumber
91
100
  self
92
101
  end
93
102
 
103
+ private
104
+
105
+ def not_passing(step_result)
106
+ @status = Status::NotPassing.new(step_result) if test_step_result_rankings[step_result.to_message.status] > test_step_result_rankings[status.step_result_message.status]
107
+ self
108
+ end
109
+
94
110
  attr_reader :status
95
111
  private :status
96
112
 
@@ -113,6 +129,10 @@ module Cucumber
113
129
  def result
114
130
  raise NoMethodError, 'Override me'
115
131
  end
132
+
133
+ def step_result_message
134
+ step_result.to_message
135
+ end
116
136
  end
117
137
 
118
138
  class Unknown < Base
@@ -127,24 +147,14 @@ module Cucumber
127
147
  end
128
148
  end
129
149
 
130
- class Failing < Base
150
+ class NotPassing < Base
131
151
  def execute(test_step, monitor)
132
152
  result = test_step.skip(monitor.result)
133
- if result.undefined?
134
- result = result.with_message(%(Undefined step: "#{test_step.text}"))
135
- result = result.with_appended_backtrace(test_step)
136
- end
137
- result
138
- end
139
-
140
- def result(duration)
141
- step_result.with_duration(duration)
153
+ result = result.with_message(%(Undefined step: "#{test_step.text}")) if result.undefined?
154
+ result = result.with_appended_backtrace(test_step) unless test_step.hook?
155
+ result.describe_to(monitor, result)
142
156
  end
143
- end
144
-
145
- Pending = Class.new(Failing)
146
157
 
147
- class Skipping < Failing
148
158
  def result(duration)
149
159
  step_result.with_duration(duration)
150
160
  end
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cucumber/core/test/result'
4
- require 'cucumber/core/test/action'
5
- require 'cucumber/core/test/empty_multiline_argument'
3
+ require_relative 'action'
4
+ require_relative 'empty_multiline_argument'
6
5
 
7
6
  module Cucumber
8
7
  module Core
@@ -20,44 +19,48 @@ module Cucumber
20
19
  @action = action
21
20
  end
22
21
 
23
- def describe_to(visitor, *)
24
- visitor.test_step(self, *)
22
+ def action_location
23
+ @action.location
25
24
  end
26
25
 
27
- def hook?
28
- false
26
+ def backtrace_line
27
+ "#{location}:in `#{text}'"
29
28
  end
30
29
 
31
- def skip(*)
32
- @action.skip(*)
30
+ def describe_to(visitor, *)
31
+ visitor.test_step(self, *)
33
32
  end
34
33
 
35
34
  def execute(*)
36
35
  @action.execute(*)
37
36
  end
38
37
 
39
- def with_action(action_location = nil, &)
40
- self.class.new(id, text, location, multiline_arg, Test::Action::Defined.new(action_location, &))
38
+ def hook?
39
+ false
41
40
  end
42
41
 
43
- def backtrace_line
44
- "#{location}:in `#{text}'"
42
+ def inspect
43
+ "#<#{self.class}: #{location}>"
45
44
  end
46
45
 
47
- def to_s
48
- text
46
+ def matching_locations
47
+ [location.merge(multiline_arg)]
49
48
  end
50
49
 
51
- def action_location
52
- @action.location
50
+ def skip(*)
51
+ @action.skip(*)
53
52
  end
54
53
 
55
- def matching_locations
56
- [location.merge(multiline_arg)]
54
+ def to_s
55
+ text
57
56
  end
58
57
 
59
- def inspect
60
- "#<#{self.class}: #{location}>"
58
+ def with_action(action_location = nil, &)
59
+ self.class.new(id, text, location, multiline_arg, Test::Action::Defined.new(action_location, &))
60
+ end
61
+
62
+ def with_unskippable_action(action_location = nil, &)
63
+ self.class.new(id, text, location, multiline_arg, Test::Action::Unskippable.new(action_location, &))
61
64
  end
62
65
  end
63
66
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'location'
4
+
3
5
  module Cucumber
4
6
  module Core
5
7
  module Test
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cucumber/core/test/result'
3
+ require_relative 'result'
4
4
 
5
5
  module Cucumber
6
6
  module Core
data/lib/cucumber/core.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cucumber/core/event_bus'
4
- require 'cucumber/core/gherkin/parser'
5
- require 'cucumber/core/gherkin/document'
6
- require 'cucumber/core/compiler'
7
- require 'cucumber/core/test/runner'
3
+ require_relative 'core/gherkin/parser'
4
+ require_relative 'core/gherkin/document'
5
+ require_relative 'core/test/runner'
6
+ require_relative 'core/compiler'
7
+ require_relative 'core/event_bus'
8
+
8
9
  require 'cucumber/messages'
9
10
  require 'gherkin/query'
10
11
 
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: 16.1.1
4
+ version: 17.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -9,10 +9,9 @@ authors:
9
9
  - Steve Tooke
10
10
  - Oleg Sukhodolsky
11
11
  - Tom Brand
12
- autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2025-12-24 00:00:00.000000000 Z
14
+ date: 1980-01-02 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: cucumber-gherkin
@@ -63,7 +62,7 @@ dependencies:
63
62
  version: '6'
64
63
  - - "<"
65
64
  - !ruby/object:Gem::Version
66
- version: '9'
65
+ version: '10'
67
66
  type: :runtime
68
67
  prerelease: false
69
68
  version_requirements: !ruby/object:Gem::Requirement
@@ -73,7 +72,7 @@ dependencies:
73
72
  version: '6'
74
73
  - - "<"
75
74
  - !ruby/object:Gem::Version
76
- version: '9'
75
+ version: '10'
77
76
  - !ruby/object:Gem::Dependency
78
77
  name: rake
79
78
  requirement: !ruby/object:Gem::Requirement
@@ -108,14 +107,14 @@ dependencies:
108
107
  requirements:
109
108
  - - "~>"
110
109
  - !ruby/object:Gem::Version
111
- version: 1.81.0
110
+ version: 1.87.0
112
111
  type: :development
113
112
  prerelease: false
114
113
  version_requirements: !ruby/object:Gem::Requirement
115
114
  requirements:
116
115
  - - "~>"
117
116
  - !ruby/object:Gem::Version
118
- version: 1.81.0
117
+ version: 1.87.0
119
118
  - !ruby/object:Gem::Dependency
120
119
  name: rubocop-packaging
121
120
  requirement: !ruby/object:Gem::Requirement
@@ -136,28 +135,28 @@ dependencies:
136
135
  requirements:
137
136
  - - "~>"
138
137
  - !ruby/object:Gem::Version
139
- version: 0.7.0
138
+ version: 0.7.1
140
139
  type: :development
141
140
  prerelease: false
142
141
  version_requirements: !ruby/object:Gem::Requirement
143
142
  requirements:
144
143
  - - "~>"
145
144
  - !ruby/object:Gem::Version
146
- version: 0.7.0
145
+ version: 0.7.1
147
146
  - !ruby/object:Gem::Dependency
148
147
  name: rubocop-rspec
149
148
  requirement: !ruby/object:Gem::Requirement
150
149
  requirements:
151
150
  - - "~>"
152
151
  - !ruby/object:Gem::Version
153
- version: 3.8.0
152
+ version: 3.9.0
154
153
  type: :development
155
154
  prerelease: false
156
155
  version_requirements: !ruby/object:Gem::Requirement
157
156
  requirements:
158
157
  - - "~>"
159
158
  - !ruby/object:Gem::Version
160
- version: 3.8.0
159
+ version: 3.9.0
161
160
  description: Core library for the Cucumber BDD app
162
161
  email: cukes@googlegroups.com
163
162
  executables: []
@@ -172,6 +171,7 @@ files:
172
171
  - lib/cucumber/core/event.rb
173
172
  - lib/cucumber/core/event_bus.rb
174
173
  - lib/cucumber/core/events.rb
174
+ - lib/cucumber/core/events/base.rb
175
175
  - lib/cucumber/core/events/envelope.rb
176
176
  - lib/cucumber/core/events/gherkin_source_parsed.rb
177
177
  - lib/cucumber/core/events/test_case_created.rb
@@ -196,7 +196,6 @@ files:
196
196
  - lib/cucumber/core/gherkin/writer/scenario_outline.rb
197
197
  - lib/cucumber/core/gherkin/writer/step.rb
198
198
  - lib/cucumber/core/gherkin/writer/table.rb
199
- - lib/cucumber/core/platform.rb
200
199
  - lib/cucumber/core/report/summary.rb
201
200
  - lib/cucumber/core/test/action.rb
202
201
  - lib/cucumber/core/test/action/defined.rb
@@ -214,6 +213,19 @@ files:
214
213
  - lib/cucumber/core/test/hook_step.rb
215
214
  - lib/cucumber/core/test/location.rb
216
215
  - lib/cucumber/core/test/result.rb
216
+ - lib/cucumber/core/test/result/ambiguous.rb
217
+ - lib/cucumber/core/test/result/boolean_methods.rb
218
+ - lib/cucumber/core/test/result/duration.rb
219
+ - lib/cucumber/core/test/result/failed.rb
220
+ - lib/cucumber/core/test/result/flaky.rb
221
+ - lib/cucumber/core/test/result/passed.rb
222
+ - lib/cucumber/core/test/result/pending.rb
223
+ - lib/cucumber/core/test/result/raisable.rb
224
+ - lib/cucumber/core/test/result/skipped.rb
225
+ - lib/cucumber/core/test/result/summary.rb
226
+ - lib/cucumber/core/test/result/undefined.rb
227
+ - lib/cucumber/core/test/result/unknown.rb
228
+ - lib/cucumber/core/test/result/unknown_duration.rb
217
229
  - lib/cucumber/core/test/runner.rb
218
230
  - lib/cucumber/core/test/step.rb
219
231
  - lib/cucumber/core/test/tag.rb
@@ -228,7 +240,6 @@ metadata:
228
240
  mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
229
241
  source_code_uri: https://github.com/cucumber/cucumber-ruby-core
230
242
  funding_uri: https://opencollective.com/cucumber
231
- post_install_message:
232
243
  rdoc_options:
233
244
  - "--charset=UTF-8"
234
245
  require_paths:
@@ -244,8 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
255
  - !ruby/object:Gem::Version
245
256
  version: 3.2.8
246
257
  requirements: []
247
- rubygems_version: 3.4.20
248
- signing_key:
258
+ rubygems_version: 4.0.10
249
259
  specification_version: 4
250
- summary: cucumber-core-16.1.1
260
+ summary: cucumber-core-17.0.0
251
261
  test_files: []
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Detect the platform we're running on so we can tweak behaviour
4
- # in various places.
5
- require 'rbconfig'
6
-
7
- module Cucumber
8
- unless defined?(Cucumber::VERSION)
9
- JRUBY = defined?(JRUBY_VERSION)
10
- IRONRUBY = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ironruby'
11
- WINDOWS = RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
12
- OS_X = RbConfig::CONFIG['host_os'] =~ /darwin/
13
- WINDOWS_MRI = WINDOWS && !JRUBY && !IRONRUBY
14
- RUBY_2_0 = RUBY_VERSION =~ /^2\.0/
15
- RUBY_1_9 = RUBY_VERSION =~ /^1\.9/
16
- end
17
- end