cucumber 8.0.0 → 9.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.
data/README.md CHANGED
@@ -51,14 +51,13 @@ Later in this document, bundler is considered being used so all commands are usi
51
51
 
52
52
  ### Supported platforms
53
53
 
54
+ - Ruby 3.2
54
55
  - Ruby 3.1
55
56
  - Ruby 3.0
56
57
  - Ruby 2.7
57
- - Ruby 2.6
58
58
  - TruffleRuby 22.0.0+
59
59
  - JRuby (with [some limitations](https://github.com/cucumber/cucumber-ruby/blob/main/docs/jruby-limitations.md))
60
- - 9.3 >= 9.3.1 (there is a known issue with JRuby 9.3.0. More info can
61
- be found in the [PR#1571](https://github.com/cucumber/cucumber-ruby/pull/1571).)
60
+ - 9.4
62
61
 
63
62
  ### Ruby on Rails
64
63
 
@@ -56,11 +56,12 @@ module Cucumber
56
56
  NO_PROFILE_LONG_FLAG = '--no-profile'.freeze
57
57
  FAIL_FAST_FLAG = '--fail-fast'.freeze
58
58
  RETRY_FLAG = '--retry'.freeze
59
+ RETRY_TOTAL_FLAG = '--retry-total'.freeze
59
60
  OPTIONS_WITH_ARGS = [
60
61
  '-r', '--require', '--i18n-keywords', '-f', '--format', '-o',
61
62
  '--out', '-t', '--tags', '-n', '--name', '-e', '--exclude',
62
- PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG, RETRY_FLAG, '-l',
63
- '--lines', '--port', '-I', '--snippet-type'
63
+ PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG, RETRY_FLAG, RETRY_TOTAL_FLAG,
64
+ '-l', '--lines', '--port', '-I', '--snippet-type'
64
65
  ].freeze
65
66
  ORDER_TYPES = %w[defined random].freeze
66
67
  TAG_LIMIT_MATCHER = /(?<tag_name>@\w+):(?<limit>\d+)/x
@@ -108,6 +109,7 @@ module Cucumber
108
109
  opts.on('-j DIR', '--jars DIR', 'Load all the jars under DIR') { |jars| load_jars(jars) } if Cucumber::JRUBY
109
110
 
110
111
  opts.on("#{RETRY_FLAG} ATTEMPTS", *retry_msg) { |v| set_option :retry, v.to_i }
112
+ opts.on("#{RETRY_TOTAL_FLAG} TESTS", *retry_total_msg) { |v| set_option :retry_total, v.to_i }
111
113
  opts.on('--i18n-languages', *i18n_languages_msg) { list_languages_and_exit }
112
114
  opts.on('--i18n-keywords LANG', *i18n_keywords_msg) { |lang| language lang }
113
115
  opts.on(FAIL_FAST_FLAG, 'Exit immediately following the first failing scenario') { set_option :fail_fast }
@@ -271,6 +273,13 @@ Specify SEED to reproduce the shuffling from a previous run.
271
273
  ['Specify the number of times to retry failing tests (default: 0)']
272
274
  end
273
275
 
276
+ def retry_total_msg
277
+ [
278
+ 'The total number of failing test after which retrying of tests is suspended.',
279
+ 'Example: --retry-total 10 -> Will stop retrying tests after 10 failing tests.'
280
+ ]
281
+ end
282
+
274
283
  def name_msg
275
284
  [
276
285
  'Only execute the feature elements which match part of the given name.',
@@ -543,6 +552,7 @@ Specify SEED to reproduce the shuffling from a previous run.
543
552
  end
544
553
 
545
554
  @options[:retry] = other_options[:retry] if @options[:retry].zero?
555
+ @options[:retry_total] = other_options[:retry_total] if @options[:retry_total].infinite?
546
556
 
547
557
  self
548
558
  end
@@ -616,7 +626,8 @@ Specify SEED to reproduce the shuffling from a previous run.
616
626
  snippets: true,
617
627
  source: true,
618
628
  duration: true,
619
- retry: 0
629
+ retry: 0,
630
+ retry_total: Float::INFINITY
620
631
  }
621
632
  end
622
633
  end
@@ -78,6 +78,10 @@ module Cucumber
78
78
  @options[:retry]
79
79
  end
80
80
 
81
+ def retry_total_tests
82
+ @options[:retry_total]
83
+ end
84
+
81
85
  def guess?
82
86
  @options[:guess]
83
87
  end
@@ -273,7 +277,8 @@ module Cucumber
273
277
  snippets: true,
274
278
  source: true,
275
279
  duration: true,
276
- event_bus: Cucumber::Events.make_event_bus
280
+ event_bus: Cucumber::Events.make_event_bus,
281
+ retry_total: Float::INFINITY
277
282
  }
278
283
  end
279
284
 
@@ -7,6 +7,11 @@ require 'cucumber/events'
7
7
  module Cucumber
8
8
  module Filters
9
9
  class Retry < Core::Filter.new(:configuration)
10
+ def initialize(*_args)
11
+ super
12
+ @total_permanently_failed = 0
13
+ end
14
+
10
15
  def test_case(test_case)
11
16
  configuration.on_event(:test_case_finished) do |event|
12
17
  next unless retry_required?(test_case, event)
@@ -21,7 +26,21 @@ module Cucumber
21
26
  private
22
27
 
23
28
  def retry_required?(test_case, event)
24
- event.test_case == test_case && event.result.failed? && test_case_counts[test_case] < configuration.retry_attempts
29
+ return false unless event.test_case == test_case
30
+
31
+ return false unless event.result.failed?
32
+
33
+ return false if @total_permanently_failed >= configuration.retry_total_tests
34
+
35
+ retry_required = test_case_counts[test_case] < configuration.retry_attempts
36
+ if retry_required
37
+ # retry test
38
+ true
39
+ else
40
+ # test failed after max. attempts
41
+ @total_permanently_failed += 1
42
+ false
43
+ end
25
44
  end
26
45
 
27
46
  def test_case_counts
@@ -86,7 +86,7 @@ module Cucumber
86
86
  # example:
87
87
  #
88
88
  # apply_custom_colors('passed=white')
89
- def apply_custom_colors(colors)
89
+ def self.apply_custom_colors(colors)
90
90
  colors.split(':').each do |pair|
91
91
  a = pair.split('=')
92
92
  ALIASES[a[0]] = a[1]
@@ -3,7 +3,7 @@
3
3
  require 'cucumber/gherkin/formatter/ansi_escapes'
4
4
  require 'cucumber/core/test/data_table'
5
5
  require 'cucumber/deprecate'
6
- require 'mime/types'
6
+ require 'mini_mime'
7
7
 
8
8
  module Cucumber
9
9
  module Glue
@@ -92,7 +92,7 @@ module Cucumber
92
92
  return super unless File.file?(file)
93
93
 
94
94
  content = File.read(file, mode: 'rb')
95
- media_type = MIME::Types.type_for(file).first if media_type.nil?
95
+ media_type = MiniMime.lookup_by_filename(file)&.content_type if media_type.nil?
96
96
 
97
97
  super(content, media_type.to_s)
98
98
  rescue StandardError
@@ -7,7 +7,7 @@ require 'cucumber/core/platform'
7
7
 
8
8
  module Cucumber
9
9
  unless defined?(Cucumber::VERSION)
10
- VERSION = File.read(File.expand_path('version', __dir__)).strip
10
+ VERSION = File.read(File.expand_path('../../VERSION', __dir__)).strip
11
11
  BINARY = File.expand_path("#{File.dirname(__FILE__)}/../../bin/cucumber")
12
12
  LIBDIR = File.expand_path("#{File.dirname(__FILE__)}/../../lib")
13
13
  RAILS = defined?(Rails)
@@ -163,7 +163,7 @@ module Cucumber
163
163
  end
164
164
 
165
165
  def runner(_task_args = nil) # :nodoc:
166
- cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
166
+ cucumber_opts = [ENV['CUCUMBER_OPTS']&.split(/\s+/) || cucumber_opts_with_profile]
167
167
  return ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files) if fork
168
168
 
169
169
  InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-05-19 00:00:00.000000000 Z
13
+ date: 2023-08-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: builder
@@ -76,82 +76,82 @@ dependencies:
76
76
  name: cucumber-cucumber-expressions
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '15.1'
82
79
  - - ">="
83
80
  - !ruby/object:Gem::Version
84
81
  version: 15.1.1
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '17.0'
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
90
- - !ruby/object:Gem::Version
91
- version: '15.1'
92
89
  - - ">="
93
90
  - !ruby/object:Gem::Version
94
91
  version: 15.1.1
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '17.0'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: cucumber-gherkin
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '23.0'
102
99
  - - ">="
103
100
  - !ruby/object:Gem::Version
104
101
  version: 23.0.1
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: 26.2.1
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: '23.0'
112
109
  - - ">="
113
110
  - !ruby/object:Gem::Version
114
111
  version: 23.0.1
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: 26.2.1
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: cucumber-html-formatter
117
117
  requirement: !ruby/object:Gem::Requirement
118
118
  requirements:
119
- - - "~>"
119
+ - - ">="
120
120
  - !ruby/object:Gem::Version
121
121
  version: '19.1'
122
- - - ">="
122
+ - - "<"
123
123
  - !ruby/object:Gem::Version
124
- version: 19.1.0
124
+ version: '21.0'
125
125
  type: :runtime
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '19.1'
132
- - - ">="
132
+ - - "<"
133
133
  - !ruby/object:Gem::Version
134
- version: 19.1.0
134
+ version: '21.0'
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: cucumber-messages
137
137
  requirement: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - "~>"
140
- - !ruby/object:Gem::Version
141
- version: '18.0'
142
139
  - - ">="
143
140
  - !ruby/object:Gem::Version
144
- version: 18.0.0
141
+ version: '18'
142
+ - - "<"
143
+ - !ruby/object:Gem::Version
144
+ version: '23'
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '18.0'
152
149
  - - ">="
153
150
  - !ruby/object:Gem::Version
154
- version: 18.0.0
151
+ version: '18'
152
+ - - "<"
153
+ - !ruby/object:Gem::Version
154
+ version: '23'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: diff-lcs
157
157
  requirement: !ruby/object:Gem::Requirement
@@ -173,25 +173,19 @@ dependencies:
173
173
  - !ruby/object:Gem::Version
174
174
  version: 1.5.0
175
175
  - !ruby/object:Gem::Dependency
176
- name: mime-types
176
+ name: mini_mime
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
179
  - - "~>"
180
180
  - !ruby/object:Gem::Version
181
- version: '3.4'
182
- - - ">="
183
- - !ruby/object:Gem::Version
184
- version: 3.4.1
181
+ version: '1.0'
185
182
  type: :runtime
186
183
  prerelease: false
187
184
  version_requirements: !ruby/object:Gem::Requirement
188
185
  requirements:
189
186
  - - "~>"
190
187
  - !ruby/object:Gem::Version
191
- version: '3.4'
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: 3.4.1
188
+ version: '1.0'
195
189
  - !ruby/object:Gem::Dependency
196
190
  name: multi_test
197
191
  requirement: !ruby/object:Gem::Requirement
@@ -418,20 +412,20 @@ dependencies:
418
412
  requirements:
419
413
  - - "~>"
420
414
  - !ruby/object:Gem::Version
421
- version: '4.22'
415
+ version: '6.0'
422
416
  - - ">="
423
417
  - !ruby/object:Gem::Version
424
- version: 4.22.0
418
+ version: 6.1.0
425
419
  type: :development
426
420
  prerelease: false
427
421
  version_requirements: !ruby/object:Gem::Requirement
428
422
  requirements:
429
423
  - - "~>"
430
424
  - !ruby/object:Gem::Version
431
- version: '4.22'
425
+ version: '6.0'
432
426
  - - ">="
433
427
  - !ruby/object:Gem::Version
434
- version: 4.22.0
428
+ version: 6.1.0
435
429
  - !ruby/object:Gem::Dependency
436
430
  name: capybara
437
431
  requirement: !ruby/object:Gem::Requirement
@@ -462,42 +456,42 @@ dependencies:
462
456
  name: rack-test
463
457
  requirement: !ruby/object:Gem::Requirement
464
458
  requirements:
465
- - - "~>"
466
- - !ruby/object:Gem::Version
467
- version: '1.1'
468
459
  - - ">="
469
460
  - !ruby/object:Gem::Version
470
461
  version: 1.1.0
462
+ - - "~>"
463
+ - !ruby/object:Gem::Version
464
+ version: '2.0'
471
465
  type: :development
472
466
  prerelease: false
473
467
  version_requirements: !ruby/object:Gem::Requirement
474
468
  requirements:
475
- - - "~>"
476
- - !ruby/object:Gem::Version
477
- version: '1.1'
478
469
  - - ">="
479
470
  - !ruby/object:Gem::Version
480
471
  version: 1.1.0
472
+ - - "~>"
473
+ - !ruby/object:Gem::Version
474
+ version: '2.0'
481
475
  - !ruby/object:Gem::Dependency
482
476
  name: sinatra
483
477
  requirement: !ruby/object:Gem::Requirement
484
478
  requirements:
485
- - - "~>"
486
- - !ruby/object:Gem::Version
487
- version: '2.2'
488
479
  - - ">="
489
480
  - !ruby/object:Gem::Version
490
481
  version: 2.2.0
482
+ - - "~>"
483
+ - !ruby/object:Gem::Version
484
+ version: '3.0'
491
485
  type: :development
492
486
  prerelease: false
493
487
  version_requirements: !ruby/object:Gem::Requirement
494
488
  requirements:
495
- - - "~>"
496
- - !ruby/object:Gem::Version
497
- version: '2.2'
498
489
  - - ">="
499
490
  - !ruby/object:Gem::Version
500
491
  version: 2.2.0
492
+ - - "~>"
493
+ - !ruby/object:Gem::Version
494
+ version: '3.0'
501
495
  description: Behaviour Driven Development with elegance and joy
502
496
  email: cukes@googlegroups.com
503
497
  executables:
@@ -505,7 +499,7 @@ executables:
505
499
  extensions: []
506
500
  extra_rdoc_files: []
507
501
  files:
508
- - CHANGELOG.md
502
+ - CHANGELOG.old.md
509
503
  - CONTRIBUTING.md
510
504
  - LICENSE
511
505
  - README.md
@@ -639,7 +633,6 @@ files:
639
633
  - lib/cucumber/term/ansicolor.rb
640
634
  - lib/cucumber/term/banner.rb
641
635
  - lib/cucumber/unit.rb
642
- - lib/cucumber/version
643
636
  - lib/simplecov_setup.rb
644
637
  homepage: https://cucumber.io/
645
638
  licenses:
@@ -659,15 +652,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
659
652
  requirements:
660
653
  - - ">="
661
654
  - !ruby/object:Gem::Version
662
- version: '2.6'
655
+ version: '2.7'
663
656
  required_rubygems_version: !ruby/object:Gem::Requirement
664
657
  requirements:
665
658
  - - ">="
666
659
  - !ruby/object:Gem::Version
667
660
  version: 1.6.1
668
661
  requirements: []
669
- rubygems_version: 3.1.2
662
+ rubygems_version: 3.3.5
670
663
  signing_key:
671
664
  specification_version: 4
672
- summary: cucumber-8.0.0
665
+ summary: cucumber-9.0.0
673
666
  test_files: []
data/lib/cucumber/version DELETED
@@ -1 +0,0 @@
1
- 8.0.0