cucumber 4.1.0 → 9.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +134 -21
  3. data/VERSION +1 -0
  4. data/lib/cucumber/cli/configuration.rb +27 -2
  5. data/lib/cucumber/cli/main.rb +5 -4
  6. data/lib/cucumber/cli/options.rb +102 -65
  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 +26 -13
  10. data/lib/cucumber/constantize.rb +1 -1
  11. data/lib/cucumber/deprecate.rb +6 -46
  12. data/lib/cucumber/errors.rb +4 -3
  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 +2 -2
  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 -85
  34. data/lib/cucumber/formatter/ast_lookup.rb +16 -10
  35. data/lib/cucumber/formatter/backtrace_filter.rb +3 -1
  36. data/lib/cucumber/formatter/console.rb +34 -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 +3 -1
  45. data/lib/cucumber/formatter/http_io.rb +10 -136
  46. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -1
  47. data/lib/cucumber/formatter/interceptor.rb +4 -3
  48. data/lib/cucumber/formatter/io.rb +50 -12
  49. data/lib/cucumber/formatter/io_http_buffer.rb +88 -0
  50. data/lib/cucumber/formatter/json.rb +36 -37
  51. data/lib/cucumber/formatter/junit.rb +29 -9
  52. data/lib/cucumber/formatter/message.rb +3 -2
  53. data/lib/cucumber/formatter/message_builder.rb +32 -16
  54. data/lib/cucumber/formatter/pretty.rb +44 -29
  55. data/lib/cucumber/formatter/progress.rb +2 -1
  56. data/lib/cucumber/formatter/publish_banner_printer.rb +75 -0
  57. data/lib/cucumber/formatter/query/hook_by_test_step.rb +3 -0
  58. data/lib/cucumber/formatter/query/pickle_by_test.rb +2 -0
  59. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +2 -0
  60. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +2 -0
  61. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +4 -0
  62. data/lib/cucumber/formatter/rerun.rb +7 -5
  63. data/lib/cucumber/formatter/steps.rb +6 -3
  64. data/lib/cucumber/formatter/summary.rb +2 -1
  65. data/lib/cucumber/formatter/unicode.rb +7 -7
  66. data/lib/cucumber/formatter/url_reporter.rb +19 -0
  67. data/lib/cucumber/formatter/usage.rb +9 -7
  68. data/lib/cucumber/gherkin/data_table_parser.rb +2 -1
  69. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +25 -27
  70. data/lib/cucumber/gherkin/steps_parser.rb +1 -1
  71. data/lib/cucumber/glue/dsl.rb +30 -16
  72. data/lib/cucumber/glue/hook.rb +6 -3
  73. data/lib/cucumber/glue/invoke_in_world.rb +5 -5
  74. data/lib/cucumber/glue/proto_world.rb +37 -57
  75. data/lib/cucumber/glue/registry_and_more.rb +31 -12
  76. data/lib/cucumber/glue/registry_wrapper.rb +31 -0
  77. data/lib/cucumber/glue/snippet.rb +4 -2
  78. data/lib/cucumber/glue/step_definition.rb +9 -7
  79. data/lib/cucumber/glue/world_factory.rb +2 -0
  80. data/lib/cucumber/hooks.rb +1 -0
  81. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +5 -2
  82. data/lib/cucumber/multiline_argument/data_table.rb +65 -79
  83. data/lib/cucumber/platform.rb +11 -16
  84. data/lib/cucumber/rake/task.rb +22 -17
  85. data/lib/cucumber/rspec/disable_option_parser.rb +6 -3
  86. data/lib/cucumber/rspec/doubles.rb +3 -5
  87. data/lib/cucumber/running_test_case.rb +2 -1
  88. data/lib/cucumber/runtime/for_programming_languages.rb +1 -2
  89. data/lib/cucumber/runtime/meta_message_builder.rb +108 -0
  90. data/lib/cucumber/runtime/support_code.rb +3 -0
  91. data/lib/cucumber/runtime/user_interface.rb +7 -6
  92. data/lib/cucumber/runtime.rb +50 -24
  93. data/lib/cucumber/step_match.rb +7 -11
  94. data/lib/cucumber/step_match_search.rb +3 -2
  95. data/lib/cucumber/term/ansicolor.rb +74 -50
  96. data/lib/cucumber/term/banner.rb +59 -0
  97. data/lib/cucumber.rb +2 -1
  98. data/lib/simplecov_setup.rb +1 -1
  99. metadata +103 -229
  100. data/CHANGELOG.md +0 -2682
  101. data/CONTRIBUTING.md +0 -71
  102. data/lib/autotest/cucumber.rb +0 -8
  103. data/lib/autotest/cucumber_mixin.rb +0 -132
  104. data/lib/autotest/cucumber_rails.rb +0 -8
  105. data/lib/autotest/cucumber_rails_rspec.rb +0 -8
  106. data/lib/autotest/cucumber_rails_rspec2.rb +0 -8
  107. data/lib/autotest/cucumber_rspec.rb +0 -8
  108. data/lib/autotest/cucumber_rspec2.rb +0 -8
  109. data/lib/autotest/discover.rb +0 -13
  110. data/lib/cucumber/core_ext/string.rb +0 -11
  111. data/lib/cucumber/version +0 -1
data/CONTRIBUTING.md DELETED
@@ -1,71 +0,0 @@
1
- ## About to create a new Github Issue?
2
-
3
- We appreciate that. But before you do, please learn our basic rules:
4
-
5
- * This is not a support forum. If you have a question, please go to [The Cukes Google Group](http://groups.google.com/group/cukes).
6
- * Do you have an idea for a new feature? Then don't expect it to be implemented unless you or someone else sends a [pull request](https://help.github.com/articles/using-pull-requests). You might be better to start a discussion on [the google group](http://groups.google.com/group/cukes).
7
- * Reporting a bug? Please tell us:
8
- * which version of Cucumber you're using
9
- * which version of Ruby you're using.
10
- * How to reproduce it. Bugs with a failing test in a [pull request](https://help.github.com/articles/using-pull-requests) get fixed much quicker. Some bugs may never be fixed.
11
- * Want to paste some code or output? Put \`\`\` on a line above and below your code/output. See [GFM](https://help.github.com/articles/github-flavored-markdown)'s *Fenced Code Blocks* for details.
12
- * We love [pull requests](https://help.github.com/articles/using-pull-requests). But if you don't have a test to go with it we probably won't merge it.
13
-
14
- # Contributing to Cucumber
15
-
16
- The rest of this document is a guide for those maintaining Cucumber, and others who would like to submit patches.
17
-
18
- ## Talking with other devs
19
-
20
- You can chat with the core team on https://gitter.im/cucumber/contributors. We try to have office hours on Fridays.
21
-
22
- ## Installing your own gems
23
-
24
- A `Gemfile.local`-file can be used to have your own gems installed to support
25
- your normal development workflow.
26
-
27
- Example:
28
-
29
- ~~~ruby
30
- gem 'pry'
31
- gem 'pry-byebug'
32
- gem 'byebug'
33
- ~~~
34
-
35
- ## Note on Patches/Pull Requests
36
-
37
- * Fork the project. Make a branch for your change.
38
- * Make your feature addition or bug fix.
39
- * Make sure your patch is well covered by tests. We don't accept changes to Cucumber that aren't tested.
40
- * Please do not change the Rakefile, version, or history.
41
- (if you want to have your own version, that is fine but
42
- bump version in a commit by itself so we can ignore when we merge your change)
43
- * Send us a pull request.
44
-
45
- ## Running tests
46
-
47
- gem install bundler
48
- bundle install
49
- bundle exec rake
50
-
51
- To get code coverage results, run `bundle exec rake cov`
52
-
53
- ## First timer? No problem!
54
-
55
- If you are new to the project or to OSS, check the label
56
- [Easy](https://github.com/cucumber/cucumber-ruby/labels/Easy). Also, you can
57
- help us to correct style violations reported here:
58
- [.rubocop_todo.yml](https://github.com/cucumber/cucumber-ruby/blob/master/.rubocop_todo.yml).
59
-
60
- ## Release Process
61
-
62
- * Bump the version number in `lib/cucumber/version`.
63
- * Make sure `CHANGELOG.md` is updated with the upcoming version number, and has entries for all fixes.
64
-
65
- Now release it
66
-
67
- bundle update
68
- bundle exec rake
69
- git commit -m "Release X.Y.Z"
70
- # Make sure you run gem signin as the cukebot@cucumber.io user before running the following step. Credentials can be found in 1Password
71
- rake release
@@ -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,132 +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
- begin
28
- get_to_green
29
- if tainted
30
- rerun_all_tests
31
- rerun_all_features if all_good
32
- else
33
- hook :all_good
34
- end
35
- wait_for_changes
36
- # Once tests and features are green, reset features every
37
- # time a file is changed to see if anything breaks.
38
- reset_features
39
- rescue Interrupt
40
- break if wants_to_quit
41
- reset
42
- reset_features
43
- end
44
- end
45
- hook :quit
46
- end
47
-
48
- def all_features_good
49
- features_to_run == ''
50
- end
51
-
52
- def get_to_green # rubocop:disable Naming/AccessorMethodName
53
- loop do
54
- super
55
- run_features
56
- wait_for_changes unless all_features_good
57
- break if all_features_good
58
- end
59
- end
60
-
61
- def rerun_all_features
62
- reset_features
63
- run_features
64
- end
65
-
66
- def reset_features
67
- self.features_to_run = :all
68
- end
69
-
70
- def run_features
71
- hook :run_features
72
- Tempfile.open('autotest-cucumber') do |dirty_features_file|
73
- cmd = make_cucumber_cmd(features_to_run, dirty_features_file.path)
74
- break if cmd.empty?
75
- old_sync = $stdout.sync
76
- $stdout.sync = true
77
- self.results = []
78
- line = []
79
- begin
80
- open("| #{cmd}", 'r') do |f| # rubocop:disable Security/Open
81
- until f.eof?
82
- c = f.getc || break
83
- print(c)
84
- line << c
85
- next unless c == "\n"
86
- results << line.join
87
- line.clear
88
- end
89
- end
90
- ensure
91
- $stdout.sync = old_sync
92
- end
93
- self.features_to_run = dirty_features_file.read.strip
94
- self.tainted = true unless features_to_run == ''
95
- end
96
- hook :ran_features
97
- end
98
-
99
- def make_cucumber_cmd(features_to_run, _dirty_features_filename)
100
- return '' if features_to_run.empty?
101
-
102
- profile_loader = Cucumber::Cli::ProfileLoader.new
103
-
104
- profile = profile(profile_loader)
105
-
106
- args = created_args(features_to_run, profile)
107
-
108
- "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
109
- end
110
-
111
- def profile(profile_loader)
112
- profile ||= 'autotest-all' if profile_loader.profile?('autotest-all') && features_to_run == :all
113
- profile ||= 'autotest' if profile_loader.profile?('autotest')
114
- profile || nil
115
- end
116
-
117
- def created_args(features_to_run, profile)
118
- args = if profile
119
- ['--profile', profile]
120
- else
121
- %w[--format] << (features_to_run == :all ? 'progress' : 'pretty')
122
- end
123
- # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
124
- args += %w[--format rerun --out] << dirty_features_filename
125
- args << (features_to_run == :all ? '' : features_to_run)
126
-
127
- # All steps becom undefined during rerun unless the following is run.
128
- args << 'features/step_definitions' << 'features/support' unless features_to_run == :all
129
-
130
- args.join(' ')
131
- end
132
- 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
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class String #:nodoc:
4
- def indent(n)
5
- if n >= 0
6
- gsub(/^/, ' ' * n)
7
- else
8
- gsub(/^ {0,#{-n}}/, '')
9
- end
10
- end
11
- end
data/lib/cucumber/version DELETED
@@ -1 +0,0 @@
1
- 4.1.0