cucumber 7.1.0 → 9.2.1

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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -27
  3. data/VERSION +1 -0
  4. data/lib/cucumber/cli/configuration.rb +4 -1
  5. data/lib/cucumber/cli/main.rb +5 -4
  6. data/lib/cucumber/cli/options.rb +73 -67
  7. data/lib/cucumber/cli/profile_loader.rb +6 -10
  8. data/lib/cucumber/cli/rerun_file.rb +1 -1
  9. data/lib/cucumber/configuration.rb +12 -6
  10. data/lib/cucumber/constantize.rb +1 -1
  11. data/lib/cucumber/deprecate.rb +6 -46
  12. data/lib/cucumber/errors.rb +3 -2
  13. data/lib/cucumber/events/envelope.rb +2 -0
  14. data/lib/cucumber/events/gherkin_source_parsed.rb +2 -0
  15. data/lib/cucumber/events/gherkin_source_read.rb +2 -0
  16. data/lib/cucumber/events/hook_test_step_created.rb +1 -2
  17. data/lib/cucumber/events/step_activated.rb +0 -6
  18. data/lib/cucumber/events/step_definition_registered.rb +0 -5
  19. data/lib/cucumber/events/test_case_created.rb +1 -2
  20. data/lib/cucumber/events/test_case_finished.rb +2 -0
  21. data/lib/cucumber/events/test_case_started.rb +2 -0
  22. data/lib/cucumber/events/test_run_finished.rb +2 -1
  23. data/lib/cucumber/events/test_step_created.rb +1 -2
  24. data/lib/cucumber/events/test_step_finished.rb +2 -0
  25. data/lib/cucumber/events/test_step_started.rb +2 -0
  26. data/lib/cucumber/events/undefined_parameter_type.rb +3 -2
  27. data/lib/cucumber/events.rb +1 -1
  28. data/lib/cucumber/file_specs.rb +2 -1
  29. data/lib/cucumber/filters/activate_steps.rb +1 -0
  30. data/lib/cucumber/filters/retry.rb +20 -1
  31. data/lib/cucumber/filters/tag_limits/verifier.rb +1 -3
  32. data/lib/cucumber/filters/tag_limits.rb +1 -3
  33. data/lib/cucumber/formatter/ansicolor.rb +70 -78
  34. data/lib/cucumber/formatter/ast_lookup.rb +16 -8
  35. data/lib/cucumber/formatter/backtrace_filter.rb +2 -1
  36. data/lib/cucumber/formatter/console.rb +26 -16
  37. data/lib/cucumber/formatter/console_counts.rb +3 -1
  38. data/lib/cucumber/formatter/console_issues.rb +10 -3
  39. data/lib/cucumber/formatter/curl_option_parser.rb +49 -0
  40. data/lib/cucumber/formatter/duration_extractor.rb +1 -0
  41. data/lib/cucumber/formatter/errors.rb +3 -0
  42. data/lib/cucumber/formatter/fail_fast.rb +1 -1
  43. data/lib/cucumber/formatter/fanout.rb +1 -1
  44. data/lib/cucumber/formatter/html.rb +2 -0
  45. data/lib/cucumber/formatter/http_io.rb +10 -137
  46. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -1
  47. data/lib/cucumber/formatter/io.rb +5 -3
  48. data/lib/cucumber/formatter/io_http_buffer.rb +88 -0
  49. data/lib/cucumber/formatter/json.rb +10 -12
  50. data/lib/cucumber/formatter/junit.rb +10 -7
  51. data/lib/cucumber/formatter/message_builder.rb +24 -8
  52. data/lib/cucumber/formatter/pretty.rb +24 -10
  53. data/lib/cucumber/formatter/progress.rb +1 -0
  54. data/lib/cucumber/formatter/publish_banner_printer.rb +0 -2
  55. data/lib/cucumber/formatter/query/hook_by_test_step.rb +3 -0
  56. data/lib/cucumber/formatter/query/pickle_by_test.rb +2 -0
  57. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +2 -0
  58. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +2 -0
  59. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +4 -0
  60. data/lib/cucumber/formatter/rerun.rb +5 -3
  61. data/lib/cucumber/formatter/summary.rb +1 -0
  62. data/lib/cucumber/formatter/unicode.rb +7 -7
  63. data/lib/cucumber/formatter/url_reporter.rb +3 -1
  64. data/lib/cucumber/formatter/usage.rb +3 -3
  65. data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
  66. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +25 -27
  67. data/lib/cucumber/glue/dsl.rb +20 -25
  68. data/lib/cucumber/glue/hook.rb +6 -3
  69. data/lib/cucumber/glue/invoke_in_world.rb +5 -5
  70. data/lib/cucumber/glue/proto_world.rb +30 -34
  71. data/lib/cucumber/glue/registry_and_more.rb +15 -25
  72. data/lib/cucumber/glue/snippet.rb +4 -2
  73. data/lib/cucumber/glue/step_definition.rb +6 -3
  74. data/lib/cucumber/glue/world_factory.rb +2 -0
  75. data/lib/cucumber/hooks.rb +1 -0
  76. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +4 -1
  77. data/lib/cucumber/multiline_argument/data_table.rb +68 -80
  78. data/lib/cucumber/platform.rb +11 -16
  79. data/lib/cucumber/rake/task.rb +22 -15
  80. data/lib/cucumber/rspec/disable_option_parser.rb +6 -3
  81. data/lib/cucumber/running_test_case.rb +2 -1
  82. data/lib/cucumber/runtime/for_programming_languages.rb +1 -2
  83. data/lib/cucumber/runtime/meta_message_builder.rb +108 -0
  84. data/lib/cucumber/runtime/support_code.rb +3 -0
  85. data/lib/cucumber/runtime/user_interface.rb +7 -6
  86. data/lib/cucumber/runtime.rb +22 -38
  87. data/lib/cucumber/step_match.rb +6 -4
  88. data/lib/cucumber/step_match_search.rb +3 -2
  89. data/lib/cucumber/term/ansicolor.rb +74 -50
  90. data/lib/cucumber/term/banner.rb +3 -0
  91. data/lib/cucumber.rb +2 -1
  92. data/lib/simplecov_setup.rb +1 -1
  93. metadata +95 -244
  94. data/CHANGELOG.md +0 -3131
  95. data/CONTRIBUTING.md +0 -250
  96. data/lib/autotest/cucumber.rb +0 -8
  97. data/lib/autotest/cucumber_mixin.rb +0 -130
  98. data/lib/autotest/cucumber_rails.rb +0 -8
  99. data/lib/autotest/cucumber_rails_rspec.rb +0 -8
  100. data/lib/autotest/cucumber_rails_rspec2.rb +0 -8
  101. data/lib/autotest/cucumber_rspec.rb +0 -8
  102. data/lib/autotest/cucumber_rspec2.rb +0 -8
  103. data/lib/autotest/discover.rb +0 -13
  104. data/lib/cucumber/version +0 -1
data/CONTRIBUTING.md DELETED
@@ -1,250 +0,0 @@
1
- # Contributing to Cucumber
2
-
3
- Thank you for considering contributing to Cucumber!
4
-
5
- This document will first introduce different ways to get involved before
6
- focusing on how to contribute to the code.
7
-
8
- ## Code of Conduct
9
-
10
- Everyone interacting in this codebase and issue tracker is expected to follow
11
- the Cucumber [code of conduct](https://cucumber.io/conduct).
12
-
13
- ## How can I contribute?
14
-
15
- If you're reading this, you are certainly looking to contribute to the code. Cucumber
16
- is not this single repository. It is made up of several packages around several
17
- repositories. So before going further with the code, you may consider the
18
- following first, in order to get your bearings.
19
-
20
- If you just want to know how to contribute to the code, go to
21
- [Contribute to the code](#contribute-to-the-code).
22
-
23
- If you want to report an issue, or suggest an enhancement, go to
24
- [Report bugs and submit feature requests](#report-bugs-and-submit-feature-requests).
25
-
26
- ### Meet the community, the maintainers, and other Cucumber developers
27
-
28
- Smartbear hosts a [community message board].
29
- This is a good place to meet users, the community, and to ask questions.
30
-
31
- You can also join the Cucumber Community Slack:
32
- [register for an account][register-slack] then head over to [#intro][slack-intro].
33
- This is the place to be to meet other contributors and find a mentor to help you
34
- get started.
35
-
36
- ### Test Cucumber
37
-
38
- Testing Cucumber, especially new features, is a great way to contribute. We
39
- cannot put a price on (early) feedback.
40
-
41
- Keep an eye on our CHANGELOGS to discover new features. Test and experiment, and
42
- submit your feedback through [issues](#report-bugs-and-submit-feature-requests),
43
- the [community message board], or [Slack][community-slack].
44
-
45
- ### Contribute to the documentation
46
-
47
- [The documentation][cucumber-docs] is an important part of Cucumber. It is
48
- essential that it remains simple and accurate. You can contribute to it via
49
- [github.com/cucumber/docs](https://github.com/cucumber/docs).
50
-
51
- ### Promote Cucumber
52
-
53
- You don't know how to contribute but would like to help? Telling other people
54
- about Cucumber on the Internet - social media, reviews, blogs - but also in real
55
- life is already a big help! Join us on [Slack][community-slack] to share your
56
- publication and to discover new ones.
57
-
58
- ## Report bugs and submit feature requests
59
-
60
- The short version is:
61
-
62
- - Find the appropriate repository
63
- - Try to check there is not already an issue or pull request that deals with
64
- your bug or request
65
- - Explain your issue and include as much details as possible to help other
66
- people reproduce your problem or understand your request
67
- - Consider submitting a pull request if you feel confident enough
68
-
69
- You can find more details for each of these steps in the following sections.
70
-
71
- ### Find the appropriate repository
72
-
73
- The current repository, `cucumber-ruby`, is actually the tip of the iceberg. It
74
- provides a user interface through a CLI, some built-in formatters, and the
75
- execution environment you may know as the `World` object.
76
-
77
- An important repository is [cucumber/common]. It is a mono-repo
78
- with a lot of libraries. You will find there what is related to:
79
-
80
- - parsing Gherkin documents - aka `.feature` files
81
- - parsing tag expressions - the options you use to filter an execution with tags
82
- - parsing Cucumber expressions - the expressions that link a Gherkin step to a
83
- step definition
84
- - everyting related to the HTML formatter
85
-
86
- `cucumber-ruby` is also composed of:
87
-
88
- - [cucumber-ruby-core]: this is the engine that will execute the test cases
89
- computed from a parsed Gherkin document
90
- - [cucumber-ruby-wire]: everything related to the Cucumber's wire protocol
91
-
92
- Last but not least, there is also a repository for [cucumber-rails], the gem
93
- that brings Cucumber to Rails 5.x and 6.x.
94
-
95
- In any case, if your are not sure, best places to open an issue are the current
96
- repository - `cucumber-ruby` - and the mono-repo at [cucumber/common].
97
-
98
- ### Look for existing issues and pull requests
99
-
100
- Search in [the current repository][cucumber-ruby-issues], in the
101
- [mono-repo][cucumber/common-issues], but also in the
102
- [whole cucumber organization][cucumber-issues] if the problem or feature has already
103
- been reported. If you find an issue or pull request which is still open, add
104
- comments to it instead of opening a new one.
105
-
106
- If you're not sure, don't hesitate to just open a new issue. We can always merge
107
- and de-duplicate later.
108
-
109
- ### Submitting a pull request
110
-
111
- When submitting a pull request:
112
-
113
- - create a [draft pull request][how-to-create-a-draft-pr]
114
- - try to follow the instructions in the [template](.github/PULL_REQUEST_TEMPLATE.md)
115
- - if possible, [sign your commits]
116
- - update CHANGELOG.md with your changes
117
- - once the PR is ready, request for reviews
118
-
119
- More info on [how to contribute to the code](#contribute-to-the-code) can be
120
- found below.
121
-
122
- ### Opening a new issue
123
-
124
- To open a good issue, be clear and precise.
125
-
126
- If you report a problem, the reader must be able to reproduce it easily.
127
- Please do your best to create a [minimal, reproducible example][minimal-reproducible-example].
128
-
129
- Consider submitting a pull request. Even if you think you cannot fix it by
130
- yourself, a pull request with a failing test is always welcome.
131
-
132
- If you request is for an enhancement - a new feature - try to be specific and
133
- support your request with referenced facts and include examples to illustrate
134
- your proposal.
135
-
136
- ## Contribute to the code
137
-
138
- ### Development environment
139
-
140
- Development environment for `cucumber-ruby` is a simple Ruby environment with
141
- Bundler. Use a [supported Ruby version](./README.md#supported-platforms), make
142
- sure [Bundler] is set-up, and voilà!
143
-
144
- You can then [fork][how-to-fork] and clone the repository. If your environment
145
- is set-up properly, the following commands should install the dependencies and
146
- execute all the tests successfully.
147
-
148
- ```shell
149
- bundle install
150
- bundle exec rake
151
- ```
152
-
153
- You can now create a branch for your changes and [submit a pull request](#submitting-a-pull-request)!
154
-
155
- If you want to check the code coverage during your development, execute
156
- `bundle exec rake cov`.
157
-
158
- ### Cucumber-ruby-core
159
-
160
- As seen here: [Find the appropriate repository](#find-the-appropriate-repository),
161
- you may need to work with other repositories in order to accomplish your
162
- development. Beside the mono-repo in [cucumber/common], [cucumber-ruby-core] is
163
- also a big piece of `cucumber-ruby`.
164
-
165
- ### Using a local Gemfile
166
-
167
- A local Gemfile allows you to use your prefer set of gems for your own
168
- development workflow, like gems dedicated to debugging. Such gems are not part
169
- of `cucumber-ruby` standard `Gemfile`.
170
-
171
- `Gemfile.local`, `Gemfile.local.lock` and `.bundle` have been added to
172
- `.gitignore` so local changes cannot be accidentaly commited and pushed to the
173
- repository.
174
-
175
- A `Gemfile.local` may look like this:
176
-
177
- ```ruby
178
- # Gemfile.local
179
-
180
- # Include the regular Gemfile
181
- eval File.read('Gemfile')
182
-
183
- # Include your favorites development gems
184
- group :development do
185
- gem 'byebug'
186
- gem 'pry'
187
- gem 'pry-byebug'
188
-
189
- gem 'debase', require: false
190
- gem 'ruby-debug-ide', require: false
191
- end
192
- ```
193
-
194
- Then you can execute bundler with the `--gemfile` flag:
195
- `bundle install --gemfile Gemfile.local`, or with an environment variable:
196
- `BUNDLE_GEMFILE=Gemfile.local bundle [COMMAND]`.
197
-
198
- To use your local Gemfile per default, you can also execute
199
- `bundle config set --local gemfile Gemfile.local`.
200
-
201
- ### First timer? Welcome!
202
-
203
- Looking for something simple to begin with? Look at issues with the label
204
- '[good first issue](https://github.com/cucumber/cucumber-ruby/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)'.
205
-
206
- Remember: Cucumber is more than `cucumber-ruby`. You can look for good first
207
- issues in [other cucumber reporistories](#find-the-appropriate-repository).
208
-
209
- ### Having trouble getting started with the code? We're here to help!
210
-
211
- If you have trouble setting-up your development environment, or getting started
212
- with the code, you can join us on [Slack][community-slack]. You will find there
213
- a lot of contributors.
214
-
215
- Full-time maintainers are also available. We would be please to have 1:1 pairing
216
- sessions to help you getting started. Look for
217
- [Matt Wynne](https://cucumberbdd.slack.com/team/U590XDLF3) or
218
- [Aurélien Reeves](https://cucumberbdd.slack.com/team/U011BB95MC7) on
219
- [Slack][community-slack].
220
-
221
- ### Additional documentation and notice
222
-
223
- You can find additional documentation in the [docs](./docs) directory such as
224
- (non-exhaustive list):
225
-
226
- - [How to release cucumber-ruby](./docs/RELEASE_PROCESS.md) (for maintainers)
227
- - [How to set-up a launch.json configuration for Visual Studio Code](./docs/vscode-example-launch-configuration.md)
228
-
229
-
230
- <!-- Links -->
231
-
232
- [community message board]: https://community.smartbear.com/t5/Cucumber-Open/bd-p/CucumberOS
233
- [register-slack]: https://cucumberbdd-slack-invite.herokuapp.com/
234
- [slack-intro]: https://cucumberbdd.slack.com/messages/C5WD8SA21/
235
- [community-slack]: https://cucumberbdd.slack.com/
236
- [cucumber-docs]: https://cucumber.io/docs/cucumber
237
- [cucumber/common]: https://github.com/cucumber/common
238
- [cucumber-ruby-core]: https://github.com/cucumber/cucumber-ruby-core
239
- [cucumber-ruby-wire]: https://github.com/cucumber/cucumber-ruby-wire
240
- [cucumber-rails]: https://github.com/cucumber/cucumber-rails
241
- [cucumber-ruby-issues]: https://github.com/cucumber/cucumber-ruby/search?q=is%3Aissue
242
- [cucumber/common-issues]: https://github.com/cucumber/common/search?q=is%3Aissue
243
- [cucumber-issues]: https://github.com/search?q=is%3Aissue+user%3Acucumber
244
- [how-to-create-a-draft-pr]: https://docs.github.com/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests
245
- [how-to-fork]: https://docs.github.com/github/collaborating-with-pull-requests/working-with-forks/about-forks
246
- [sign your commits]: https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification/signing-commits
247
- [minimal-reproducible-example]: https://stackoverflow.com/help/minimal-reproducible-example
248
- [RVM]: https://rvm.io/
249
- [rbenv]: https://github.com/rbenv/rbenv
250
- [Bundler]: https://bundler.io/
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest'
4
- require 'autotest/cucumber_mixin'
5
-
6
- class Autotest::Cucumber < Autotest
7
- include CucumberMixin
8
- end
@@ -1,130 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest'
4
- require 'tempfile'
5
- require 'cucumber'
6
- require 'cucumber/cli/profile_loader'
7
-
8
- module Autotest::CucumberMixin
9
- def self.included(receiver)
10
- receiver::ALL_HOOKS << %i[run_features ran_features]
11
- end
12
-
13
- attr_accessor :features_to_run
14
-
15
- def initialize
16
- super
17
- reset_features
18
- end
19
-
20
- def run
21
- hook :initialize
22
- reset
23
- reset_features
24
- add_sigint_handler
25
-
26
- loop do # ^c handler
27
- get_to_green
28
- if tainted
29
- rerun_all_tests
30
- rerun_all_features if all_good
31
- else
32
- hook :all_good
33
- end
34
- wait_for_changes
35
- # Once tests and features are green, reset features every
36
- # time a file is changed to see if anything breaks.
37
- reset_features
38
- rescue Interrupt
39
- break if wants_to_quit
40
- reset
41
- reset_features
42
- end
43
- hook :quit
44
- end
45
-
46
- def all_features_good
47
- features_to_run == ''
48
- end
49
-
50
- def get_to_green # rubocop:disable Naming/AccessorMethodName
51
- loop do
52
- super
53
- run_features
54
- wait_for_changes unless all_features_good
55
- break if all_features_good
56
- end
57
- end
58
-
59
- def rerun_all_features
60
- reset_features
61
- run_features
62
- end
63
-
64
- def reset_features
65
- self.features_to_run = :all
66
- end
67
-
68
- def run_features
69
- hook :run_features
70
- Tempfile.open('autotest-cucumber') do |dirty_features_file|
71
- cmd = make_cucumber_cmd(features_to_run, dirty_features_file.path)
72
- break if cmd.empty?
73
- old_sync = $stdout.sync
74
- $stdout.sync = true
75
- self.results = []
76
- line = []
77
- begin
78
- open("| #{cmd}", 'r') do |f| # rubocop:disable Security/Open
79
- until f.eof?
80
- c = f.getc || break
81
- print(c)
82
- line << c
83
- next unless c == "\n"
84
- results << line.join
85
- line.clear
86
- end
87
- end
88
- ensure
89
- $stdout.sync = old_sync
90
- end
91
- self.features_to_run = dirty_features_file.read.strip
92
- self.tainted = true unless features_to_run == ''
93
- end
94
- hook :ran_features
95
- end
96
-
97
- def make_cucumber_cmd(features_to_run, _dirty_features_filename)
98
- return '' if features_to_run.empty?
99
-
100
- profile_loader = Cucumber::Cli::ProfileLoader.new
101
-
102
- profile = profile(profile_loader)
103
-
104
- args = created_args(features_to_run, profile)
105
-
106
- "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
107
- end
108
-
109
- def profile(profile_loader)
110
- profile ||= 'autotest-all' if profile_loader.profile?('autotest-all') && features_to_run == :all
111
- profile ||= 'autotest' if profile_loader.profile?('autotest')
112
- profile || nil
113
- end
114
-
115
- def created_args(features_to_run, profile)
116
- args = if profile
117
- ['--profile', profile]
118
- else
119
- %w[--format] << (features_to_run == :all ? 'progress' : 'pretty')
120
- end
121
- # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
122
- args += %w[--format rerun --out] << dirty_features_filename
123
- args << (features_to_run == :all ? '' : features_to_run)
124
-
125
- # All steps becom undefined during rerun unless the following is run.
126
- args << 'features/step_definitions' << 'features/support' unless features_to_run == :all
127
-
128
- args.join(' ')
129
- end
130
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest/rails'
4
- require 'autotest/cucumber_mixin'
5
-
6
- class Autotest::CucumberRails < Autotest::Rails
7
- include CucumberMixin
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest/cucumber_mixin'
4
- require 'autotest/rails_rspec'
5
-
6
- class Autotest::CucumberRailsRspec < Autotest::RailsRspec
7
- include CucumberMixin
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest/cucumber_mixin'
4
- require 'autotest/rails_rspec2'
5
-
6
- class Autotest::CucumberRailsRspec2 < Autotest::RailsRspec2
7
- include CucumberMixin
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest/cucumber_mixin'
4
- require 'autotest/rspec'
5
-
6
- class Autotest::CucumberRspec < Autotest::Rspec
7
- include CucumberMixin
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'autotest/cucumber_mixin'
4
- require 'autotest/rspec2'
5
-
6
- class Autotest::CucumberRspec2 < Autotest::Rspec2
7
- include CucumberMixin
8
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Autotest.add_discovery do
4
- if File.directory?('features')
5
- if ENV['AUTOFEATURE'] =~ /true/i
6
- 'cucumber'
7
- elsif ENV['AUTOFEATURE'] =~ /false/i
8
- # noop
9
- else
10
- puts '(Not running features. To run features in autotest, set AUTOFEATURE=true.)'
11
- end
12
- end
13
- end
data/lib/cucumber/version DELETED
@@ -1 +0,0 @@
1
- 7.1.0