cucumber 3.1.2 → 4.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 (112) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +173 -14
  3. data/CONTRIBUTING.md +2 -18
  4. data/README.md +4 -5
  5. data/bin/cucumber +1 -1
  6. data/lib/autotest/cucumber_mixin.rb +34 -39
  7. data/lib/cucumber.rb +1 -1
  8. data/lib/cucumber/cli/configuration.rb +5 -5
  9. data/lib/cucumber/cli/main.rb +12 -12
  10. data/lib/cucumber/cli/options.rb +69 -74
  11. data/lib/cucumber/cli/profile_loader.rb +49 -26
  12. data/lib/cucumber/configuration.rb +31 -23
  13. data/lib/cucumber/constantize.rb +2 -5
  14. data/lib/cucumber/deprecate.rb +31 -7
  15. data/lib/cucumber/errors.rb +5 -7
  16. data/lib/cucumber/events.rb +13 -6
  17. data/lib/cucumber/events/envelope.rb +9 -0
  18. data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
  19. data/lib/cucumber/events/hook_test_step_created.rb +13 -0
  20. data/lib/cucumber/events/step_activated.rb +2 -1
  21. data/lib/cucumber/events/test_case_created.rb +13 -0
  22. data/lib/cucumber/events/test_case_ready.rb +12 -0
  23. data/lib/cucumber/events/test_step_created.rb +13 -0
  24. data/lib/cucumber/events/undefined_parameter_type.rb +10 -0
  25. data/lib/cucumber/file_specs.rb +6 -6
  26. data/lib/cucumber/filters.rb +1 -0
  27. data/lib/cucumber/filters/activate_steps.rb +5 -3
  28. data/lib/cucumber/filters/broadcast_test_case_ready_event.rb +12 -0
  29. data/lib/cucumber/filters/prepare_world.rb +5 -9
  30. data/lib/cucumber/filters/quit.rb +1 -3
  31. data/lib/cucumber/filters/tag_limits/verifier.rb +2 -4
  32. data/lib/cucumber/formatter/ansicolor.rb +40 -45
  33. data/lib/cucumber/formatter/ast_lookup.rb +165 -0
  34. data/lib/cucumber/formatter/backtrace_filter.rb +9 -8
  35. data/lib/cucumber/formatter/console.rb +58 -66
  36. data/lib/cucumber/formatter/console_counts.rb +4 -9
  37. data/lib/cucumber/formatter/console_issues.rb +6 -3
  38. data/lib/cucumber/formatter/duration.rb +1 -1
  39. data/lib/cucumber/formatter/duration_extractor.rb +3 -1
  40. data/lib/cucumber/formatter/errors.rb +6 -0
  41. data/lib/cucumber/formatter/fanout.rb +2 -0
  42. data/lib/cucumber/formatter/html.rb +11 -598
  43. data/lib/cucumber/formatter/http_io.rb +146 -0
  44. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -1
  45. data/lib/cucumber/formatter/interceptor.rb +8 -28
  46. data/lib/cucumber/formatter/io.rb +17 -11
  47. data/lib/cucumber/formatter/json.rb +101 -109
  48. data/lib/cucumber/formatter/junit.rb +56 -56
  49. data/lib/cucumber/formatter/message.rb +22 -0
  50. data/lib/cucumber/formatter/message_builder.rb +255 -0
  51. data/lib/cucumber/formatter/pretty.rb +359 -153
  52. data/lib/cucumber/formatter/progress.rb +30 -32
  53. data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
  54. data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
  55. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
  56. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
  57. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
  58. data/lib/cucumber/formatter/rerun.rb +22 -4
  59. data/lib/cucumber/formatter/stepdefs.rb +1 -2
  60. data/lib/cucumber/formatter/steps.rb +2 -3
  61. data/lib/cucumber/formatter/summary.rb +16 -8
  62. data/lib/cucumber/formatter/unicode.rb +15 -17
  63. data/lib/cucumber/formatter/usage.rb +11 -10
  64. data/lib/cucumber/gherkin/data_table_parser.rb +17 -6
  65. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +13 -17
  66. data/lib/cucumber/gherkin/formatter/escaping.rb +2 -2
  67. data/lib/cucumber/gherkin/steps_parser.rb +17 -8
  68. data/lib/cucumber/glue/dsl.rb +1 -1
  69. data/lib/cucumber/glue/hook.rb +34 -11
  70. data/lib/cucumber/glue/invoke_in_world.rb +13 -18
  71. data/lib/cucumber/glue/proto_world.rb +42 -33
  72. data/lib/cucumber/glue/registry_and_more.rb +42 -12
  73. data/lib/cucumber/glue/snippet.rb +23 -22
  74. data/lib/cucumber/glue/step_definition.rb +42 -19
  75. data/lib/cucumber/glue/world_factory.rb +1 -1
  76. data/lib/cucumber/hooks.rb +11 -11
  77. data/lib/cucumber/multiline_argument.rb +4 -6
  78. data/lib/cucumber/multiline_argument/data_table.rb +97 -64
  79. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +1 -1
  80. data/lib/cucumber/multiline_argument/doc_string.rb +1 -1
  81. data/lib/cucumber/platform.rb +3 -3
  82. data/lib/cucumber/rake/task.rb +16 -16
  83. data/lib/cucumber/rspec/disable_option_parser.rb +9 -8
  84. data/lib/cucumber/running_test_case.rb +2 -53
  85. data/lib/cucumber/runtime.rb +54 -58
  86. data/lib/cucumber/runtime/after_hooks.rb +8 -4
  87. data/lib/cucumber/runtime/before_hooks.rb +8 -4
  88. data/lib/cucumber/runtime/for_programming_languages.rb +4 -2
  89. data/lib/cucumber/runtime/step_hooks.rb +3 -2
  90. data/lib/cucumber/runtime/support_code.rb +13 -15
  91. data/lib/cucumber/runtime/user_interface.rb +6 -16
  92. data/lib/cucumber/step_definition_light.rb +4 -3
  93. data/lib/cucumber/step_definitions.rb +2 -2
  94. data/lib/cucumber/step_match.rb +12 -11
  95. data/lib/cucumber/step_match_search.rb +2 -1
  96. data/lib/cucumber/term/ansicolor.rb +9 -9
  97. data/lib/cucumber/version +1 -1
  98. metadata +224 -82
  99. data/lib/cucumber/events/gherkin_source_parsed.rb~ +0 -14
  100. data/lib/cucumber/formatter/ast_lookup.rb~ +0 -9
  101. data/lib/cucumber/formatter/cucumber.css +0 -286
  102. data/lib/cucumber/formatter/cucumber.sass +0 -247
  103. data/lib/cucumber/formatter/hook_query_visitor.rb +0 -42
  104. data/lib/cucumber/formatter/html_builder.rb +0 -121
  105. data/lib/cucumber/formatter/inline-js.js +0 -30
  106. data/lib/cucumber/formatter/jquery-min.js +0 -154
  107. data/lib/cucumber/formatter/json_pretty.rb +0 -11
  108. data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1028
  109. data/lib/cucumber/formatter/legacy_api/ast.rb +0 -394
  110. data/lib/cucumber/formatter/legacy_api/results.rb +0 -50
  111. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
  112. data/lib/cucumber/step_argument.rb +0 -25
@@ -3,23 +3,27 @@
3
3
  module Cucumber
4
4
  class Runtime
5
5
  class AfterHooks
6
- def initialize(hooks, scenario)
6
+ def initialize(id_generator, hooks, scenario, event_bus)
7
7
  @hooks = hooks
8
8
  @scenario = scenario
9
+ @id_generator = id_generator
10
+ @event_bus = event_bus
9
11
  end
10
12
 
11
13
  def apply_to(test_case)
12
14
  test_case.with_steps(
13
- test_case.test_steps + after_hooks(test_case.source).reverse
15
+ test_case.test_steps + after_hooks.reverse
14
16
  )
15
17
  end
16
18
 
17
19
  private
18
20
 
19
- def after_hooks(source)
21
+ def after_hooks
20
22
  @hooks.map do |hook|
21
23
  action = ->(result) { hook.invoke('After', @scenario.with_result(result)) }
22
- Hooks.after_hook(source, hook.location, &action)
24
+ hook_step = Hooks.after_hook(@id_generator.new_id, hook.location, &action)
25
+ @event_bus.hook_test_step_created(hook_step, hook)
26
+ hook_step
23
27
  end
24
28
  end
25
29
  end
@@ -5,23 +5,27 @@ require 'cucumber/hooks'
5
5
  module Cucumber
6
6
  class Runtime
7
7
  class BeforeHooks
8
- def initialize(hooks, scenario)
8
+ def initialize(id_generator, hooks, scenario, event_bus)
9
9
  @hooks = hooks
10
10
  @scenario = scenario
11
+ @id_generator = id_generator
12
+ @event_bus = event_bus
11
13
  end
12
14
 
13
15
  def apply_to(test_case)
14
16
  test_case.with_steps(
15
- before_hooks(test_case.source) + test_case.test_steps
17
+ before_hooks + test_case.test_steps
16
18
  )
17
19
  end
18
20
 
19
21
  private
20
22
 
21
- def before_hooks(source)
23
+ def before_hooks
22
24
  @hooks.map do |hook|
23
25
  action_block = ->(result) { hook.invoke('Before', @scenario.with_result(result)) }
24
- Hooks.before_hook(source, hook.location, &action_block)
26
+ hook_step = Hooks.before_hook(@id_generator.new_id, hook.location, &action_block)
27
+ @event_bus.hook_test_step_created(hook_step, hook)
28
+ hook_step
25
29
  end
26
30
  end
27
31
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
- require 'cucumber/core/ast/doc_string'
4
+ require 'cucumber/core/test/doc_string'
5
5
 
6
6
  module Cucumber
7
7
  class Runtime
@@ -15,11 +15,13 @@ module Cucumber
15
15
  attr_reader :support_code
16
16
 
17
17
  def initialize(support_code, user_interface)
18
- @support_code, @user_interface = support_code, user_interface
18
+ @support_code = support_code
19
+ @user_interface = user_interface
19
20
  end
20
21
 
21
22
  def_delegators :@user_interface,
22
23
  :embed,
24
+ :attach,
23
25
  :ask,
24
26
  :puts,
25
27
  :features_paths,
@@ -3,8 +3,9 @@
3
3
  module Cucumber
4
4
  class Runtime
5
5
  class StepHooks
6
- def initialize(hooks)
6
+ def initialize(id_generator, hooks)
7
7
  @hooks = hooks
8
+ @id_generator = id_generator
8
9
  end
9
10
 
10
11
  def apply(test_steps)
@@ -18,7 +19,7 @@ module Cucumber
18
19
  def after_step_hooks(test_step)
19
20
  @hooks.map do |hook|
20
21
  action = ->(*args) { hook.invoke('AfterStep', [args, test_step]) }
21
- Hooks.after_step_hook(test_step.source, hook.location, &action)
22
+ Hooks.after_step_hook(@id_generator.new_id, test_step, hook.location, &action)
22
23
  end
23
24
  end
24
25
  end
@@ -22,19 +22,15 @@ module Cucumber
22
22
  end
23
23
 
24
24
  def step(step)
25
- location = Core::Ast::Location.of_caller
25
+ location = Core::Test::Location.of_caller
26
26
  @support_code.invoke_dynamic_step(step[:text], multiline_arg(step, location))
27
27
  end
28
28
 
29
29
  def multiline_arg(step, location)
30
- argument = step[:argument]
31
-
32
- if argument
33
- if argument[:type] == :DocString
34
- MultilineArgument.from(argument[:content], location, argument[:content_type])
35
- else
36
- MultilineArgument::DataTable.from(argument[:rows].map { |row| row[:cells].map { |cell| cell[:value] } })
37
- end
30
+ if !step[:doc_string].nil?
31
+ MultilineArgument.from(step[:doc_string][:content], location, step[:doc_string][:content_type])
32
+ elsif !step[:data_table].nil?
33
+ MultilineArgument::DataTable.from(step[:data_table][:rows].map { |row| row[:cells].map { |cell| cell[:value] } })
38
34
  else
39
35
  MultilineArgument.from(nil)
40
36
  end
@@ -62,8 +58,8 @@ module Cucumber
62
58
  # Given I have 8 cukes in my belly
63
59
  # Then I should not be thirsty
64
60
  # })
65
- def invoke_dynamic_steps(steps_text, i18n, _location)
66
- parser = Cucumber::Gherkin::StepsParser.new(StepInvoker.new(self), i18n.iso_code)
61
+ def invoke_dynamic_steps(steps_text, iso_code, _location)
62
+ parser = Cucumber::Gherkin::StepsParser.new(StepInvoker.new(self), iso_code)
67
63
  parser.parse(steps_text)
68
64
  end
69
65
 
@@ -108,26 +104,28 @@ module Cucumber
108
104
  def find_after_step_hooks(test_case)
109
105
  scenario = RunningTestCase.new(test_case)
110
106
  hooks = registry.hooks_for(:after_step, scenario)
111
- StepHooks.new hooks
107
+ StepHooks.new(@configuration.id_generator, hooks)
112
108
  end
113
109
 
114
110
  def apply_before_hooks(test_case)
111
+ return test_case if test_case.test_steps.empty?
115
112
  scenario = RunningTestCase.new(test_case)
116
113
  hooks = registry.hooks_for(:before, scenario)
117
- BeforeHooks.new(hooks, scenario).apply_to(test_case)
114
+ BeforeHooks.new(@configuration.id_generator, hooks, scenario, @configuration.event_bus).apply_to(test_case)
118
115
  end
119
116
 
120
117
  def apply_after_hooks(test_case)
118
+ return test_case if test_case.test_steps.empty?
121
119
  scenario = RunningTestCase.new(test_case)
122
120
  hooks = registry.hooks_for(:after, scenario)
123
- AfterHooks.new(hooks, scenario).apply_to(test_case)
121
+ AfterHooks.new(@configuration.id_generator, hooks, scenario, @configuration.event_bus).apply_to(test_case)
124
122
  end
125
123
 
126
124
  def find_around_hooks(test_case)
127
125
  scenario = RunningTestCase.new(test_case)
128
126
 
129
127
  registry.hooks_for(:around, scenario).map do |hook|
130
- Hooks.around_hook(test_case.source) do |run_scenario|
128
+ Hooks.around_hook do |run_scenario|
131
129
  hook.invoke('Around', scenario, &run_scenario)
132
130
  end
133
131
  end
@@ -7,14 +7,6 @@ module Cucumber
7
7
  module UserInterface
8
8
  attr_writer :visitor
9
9
 
10
- # Output +messages+ alongside the formatted output.
11
- # This is an alternative to using Kernel#puts - it will display
12
- # nicer, and in all outputs (in case you use several formatters)
13
- #
14
- def puts(*messages)
15
- @visitor.puts(*messages)
16
- end
17
-
18
10
  # Suspends execution and prompts +question+ to the console (STDOUT).
19
11
  # An operator (manual tester) can then enter a line of text and hit
20
12
  # <ENTER>. The entered text is returned, and both +question+ and
@@ -48,20 +40,18 @@ module Cucumber
48
40
  # be a path to a file, or if it's an image it may also be a Base64 encoded image.
49
41
  # The embedded data may or may not be ignored, depending on what kind of formatter(s) are active.
50
42
  #
51
- def embed(src, mime_type, label)
52
- @visitor.embed(src, mime_type, label)
43
+ def attach(src, media_type)
44
+ @visitor.attach(src, media_type)
53
45
  end
54
46
 
55
47
  private
56
48
 
57
49
  def mri_gets(timeout_seconds)
58
- begin
59
- Timeout.timeout(timeout_seconds) do
60
- STDIN.gets
61
- end
62
- rescue Timeout::Error
63
- nil
50
+ Timeout.timeout(timeout_seconds) do
51
+ STDIN.gets
64
52
  end
53
+ rescue Timeout::Error
54
+ nil
65
55
  end
66
56
 
67
57
  def jruby_gets(timeout_seconds)
@@ -9,11 +9,12 @@ module Cucumber
9
9
  attr_reader :regexp_source, :location
10
10
 
11
11
  def initialize(regexp_source, location)
12
- @regexp_source, @location = regexp_source, location
12
+ @regexp_source = regexp_source
13
+ @location = location
13
14
  end
14
15
 
15
- def eql?(o)
16
- regexp_source == o.regexp_source && location == o.location
16
+ def eql?(other)
17
+ regexp_source == other.regexp_source && location == other.location
17
18
  end
18
19
 
19
20
  def hash
@@ -8,8 +8,8 @@ module Cucumber
8
8
  @support_code.load_files_from_paths(configuration.autoload_code_paths)
9
9
  end
10
10
 
11
- def to_json
12
- @support_code.step_definitions.map(&:to_hash).to_json
11
+ def to_json(obj = nil)
12
+ @support_code.step_definitions.map(&:to_hash).to_json(obj)
13
13
  end
14
14
  end
15
15
  end
@@ -9,7 +9,9 @@ module Cucumber
9
9
 
10
10
  def initialize(step_definition, step_name, step_arguments)
11
11
  raise "step_arguments can't be nil (but it can be an empty array)" if step_arguments.nil?
12
- @step_definition, @name_to_match, @step_arguments = step_definition, step_name, step_arguments
12
+ @step_definition = step_definition
13
+ @name_to_match = step_name
14
+ @step_arguments = step_arguments
13
15
  end
14
16
 
15
17
  def args
@@ -21,7 +23,7 @@ module Cucumber
21
23
 
22
24
  def activate(test_step)
23
25
  test_step.with_action(@step_definition.location) do
24
- invoke(MultilineArgument.from_core(test_step.source.last.multiline_arg))
26
+ invoke(MultilineArgument.from_core(test_step.multiline_arg))
25
27
  end
26
28
  end
27
29
 
@@ -46,7 +48,7 @@ module Cucumber
46
48
  #
47
49
  # lambda { |param| "[#{param}]" }
48
50
  #
49
- def format_args(format = lambda { |a| a }, &proc)
51
+ def format_args(format = ->(a) { a }, &proc)
50
52
  replace_arguments(@name_to_match, @step_arguments, format, &proc)
51
53
  end
52
54
 
@@ -75,7 +77,7 @@ module Cucumber
75
77
 
76
78
  replacement = if block_given?
77
79
  yield(group.value)
78
- elsif Proc === format
80
+ elsif Proc == format.class
79
81
  format.call(group.value)
80
82
  else
81
83
  format % group.value
@@ -95,13 +97,13 @@ module Cucumber
95
97
  private
96
98
 
97
99
  def deep_clone_args
98
- Marshal.load( Marshal.dump( args ) )
100
+ Marshal.load(Marshal.dump(args))
99
101
  end
100
102
  end
101
103
 
102
104
  class SkippingStepMatch
103
105
  def activate(test_step)
104
- return test_step.with_action { raise Core::Test::Result::Skipped.new }
106
+ test_step.with_action { raise Core::Test::Result::Skipped }
105
107
  end
106
108
  end
107
109
 
@@ -123,8 +125,7 @@ module Cucumber
123
125
  end
124
126
 
125
127
  def file_colon_line
126
- raise "No file:line for #{@step}" unless @step.file_colon_line
127
- @step.file_colon_line
128
+ location.to_s
128
129
  end
129
130
 
130
131
  def backtrace_line
@@ -132,7 +133,7 @@ module Cucumber
132
133
  end
133
134
 
134
135
  def text_length
135
- @step.text_length
136
+ @step.text.length
136
137
  end
137
138
 
138
139
  def step_arguments
@@ -141,7 +142,7 @@ module Cucumber
141
142
 
142
143
  def activate(test_step)
143
144
  # noop
144
- return test_step
145
+ test_step
145
146
  end
146
147
  end
147
148
 
@@ -151,7 +152,7 @@ module Cucumber
151
152
  end
152
153
 
153
154
  def activate(test_step)
154
- return test_step.with_action { raise @error }
155
+ test_step.with_action { raise @error }
155
156
  end
156
157
  end
157
158
  end
@@ -13,7 +13,8 @@ module Cucumber
13
13
 
14
14
  class AssertUnambiguousMatch
15
15
  def initialize(search, configuration)
16
- @search, @configuration = search, configuration
16
+ @search = search
17
+ @configuration = configuration
17
18
  end
18
19
 
19
20
  def call(step_name)
@@ -35,7 +35,7 @@ module Cucumber
35
35
  [:on_magenta, 45],
36
36
  [:on_cyan, 46],
37
37
  [:on_white, 47]
38
- ]
38
+ ].freeze
39
39
 
40
40
  ATTRIBUTE_NAMES = ATTRIBUTES.transpose.first
41
41
  # :startdoc:
@@ -54,8 +54,9 @@ module Cucumber
54
54
  end
55
55
  self.coloring = true
56
56
 
57
+ # rubocop:disable Security/Eval
57
58
  ATTRIBUTES.each do |c, v|
58
- eval %Q{
59
+ eval <<-END_EVAL, binding, __FILE__, __LINE__ + 1
59
60
  def #{c}(string = nil)
60
61
  result = String.new
61
62
  result << "\e[#{v}m" if Cucumber::Term::ANSIColor.coloring?
@@ -71,23 +72,23 @@ module Cucumber
71
72
  result << "\e[0m" if Cucumber::Term::ANSIColor.coloring?
72
73
  result
73
74
  end
74
- }
75
+ END_EVAL
75
76
  end
77
+ # rubocop:enable Security/Eval
76
78
 
77
79
  # Regular expression that is used to scan for ANSI-sequences while
78
80
  # uncoloring strings.
79
81
  COLORED_REGEXP = /\e\[(?:[34][0-7]|[0-9])?m/
80
82
 
81
83
  def self.included(klass)
82
- if klass == String
83
- ATTRIBUTES.delete(:clear)
84
- ATTRIBUTE_NAMES.delete(:clear)
85
- end
84
+ return unless klass == String
85
+ ATTRIBUTES.delete(:clear)
86
+ ATTRIBUTE_NAMES.delete(:clear)
86
87
  end
87
88
 
88
89
  # Returns an uncolored version of the string, that is all
89
90
  # ANSI-sequences are stripped from the string.
90
- def uncolored(string = nil) # :yields:
91
+ def uncolored(string = nil)
91
92
  if block_given?
92
93
  yield.gsub(COLORED_REGEXP, '')
93
94
  elsif string
@@ -105,7 +106,6 @@ module Cucumber
105
106
  def attributes
106
107
  ATTRIBUTE_NAMES
107
108
  end
108
- extend self
109
109
  end
110
110
  end
111
111
  end
@@ -1 +1 @@
1
- 3.1.2
1
+ 4.0.0
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: 3.1.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -10,308 +10,442 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-07-13 00:00:00.000000000 Z
13
+ date: 2020-06-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: builder
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '3.2'
19
22
  - - ">="
20
23
  - !ruby/object:Gem::Version
21
- version: 2.1.2
24
+ version: 3.2.3
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
29
+ - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: '3.2'
26
32
  - - ">="
27
33
  - !ruby/object:Gem::Version
28
- version: 2.1.2
34
+ version: 3.2.3
29
35
  - !ruby/object:Gem::Dependency
30
36
  name: cucumber-core
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 7.0.0
33
42
  - - "~>"
34
43
  - !ruby/object:Gem::Version
35
- version: 3.2.0
44
+ version: '7.0'
36
45
  type: :runtime
37
46
  prerelease: false
38
47
  version_requirements: !ruby/object:Gem::Requirement
39
48
  requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 7.0.0
40
52
  - - "~>"
41
53
  - !ruby/object:Gem::Version
42
- version: 3.2.0
54
+ version: '7.0'
43
55
  - !ruby/object:Gem::Dependency
44
- name: cucumber-expressions
56
+ name: cucumber-cucumber-expressions
45
57
  requirement: !ruby/object:Gem::Requirement
46
58
  requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 10.1.0
47
62
  - - "~>"
48
63
  - !ruby/object:Gem::Version
49
- version: 6.0.1
64
+ version: '10.1'
50
65
  type: :runtime
51
66
  prerelease: false
52
67
  version_requirements: !ruby/object:Gem::Requirement
53
68
  requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 10.1.0
54
72
  - - "~>"
55
73
  - !ruby/object:Gem::Version
56
- version: 6.0.1
74
+ version: '10.1'
57
75
  - !ruby/object:Gem::Dependency
58
- name: cucumber-wire
76
+ name: cucumber-gherkin
59
77
  requirement: !ruby/object:Gem::Requirement
60
78
  requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 13.0.0
61
82
  - - "~>"
62
83
  - !ruby/object:Gem::Version
63
- version: 0.0.1
84
+ version: '13.0'
64
85
  type: :runtime
65
86
  prerelease: false
66
87
  version_requirements: !ruby/object:Gem::Requirement
67
88
  requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 13.0.0
68
92
  - - "~>"
69
93
  - !ruby/object:Gem::Version
70
- version: 0.0.1
94
+ version: '13.0'
71
95
  - !ruby/object:Gem::Dependency
72
- name: diff-lcs
96
+ name: cucumber-html-formatter
73
97
  requirement: !ruby/object:Gem::Requirement
74
98
  requirements:
75
99
  - - "~>"
76
100
  - !ruby/object:Gem::Version
77
- version: '1.3'
101
+ version: '6.0'
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 6.0.1
78
105
  type: :runtime
79
106
  prerelease: false
80
107
  version_requirements: !ruby/object:Gem::Requirement
81
108
  requirements:
82
109
  - - "~>"
83
110
  - !ruby/object:Gem::Version
84
- version: '1.3'
111
+ version: '6.0'
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: 6.0.1
85
115
  - !ruby/object:Gem::Dependency
86
- name: gherkin
116
+ name: cucumber-messages
87
117
  requirement: !ruby/object:Gem::Requirement
88
118
  requirements:
89
119
  - - "~>"
90
120
  - !ruby/object:Gem::Version
91
- version: 5.1.0
121
+ version: '12.1'
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 12.1.1
92
125
  type: :runtime
93
126
  prerelease: false
94
127
  version_requirements: !ruby/object:Gem::Requirement
95
128
  requirements:
96
129
  - - "~>"
97
130
  - !ruby/object:Gem::Version
98
- version: 5.1.0
131
+ version: '12.1'
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 12.1.1
99
135
  - !ruby/object:Gem::Dependency
100
- name: multi_json
136
+ name: cucumber-wire
101
137
  requirement: !ruby/object:Gem::Requirement
102
138
  requirements:
103
139
  - - ">="
104
140
  - !ruby/object:Gem::Version
105
- version: 1.7.5
106
- - - "<"
141
+ version: 3.0.0
142
+ - - "~>"
107
143
  - !ruby/object:Gem::Version
108
- version: '2.0'
144
+ version: '3.0'
109
145
  type: :runtime
110
146
  prerelease: false
111
147
  version_requirements: !ruby/object:Gem::Requirement
112
148
  requirements:
113
149
  - - ">="
114
150
  - !ruby/object:Gem::Version
115
- version: 1.7.5
116
- - - "<"
151
+ version: 3.0.0
152
+ - - "~>"
117
153
  - !ruby/object:Gem::Version
118
- version: '2.0'
154
+ version: '3.0'
119
155
  - !ruby/object:Gem::Dependency
120
- name: multi_test
156
+ name: diff-lcs
121
157
  requirement: !ruby/object:Gem::Requirement
122
158
  requirements:
123
159
  - - ">="
124
160
  - !ruby/object:Gem::Version
125
- version: 0.1.2
161
+ version: '1.3'
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '1.3'
126
165
  type: :runtime
127
166
  prerelease: false
128
167
  version_requirements: !ruby/object:Gem::Requirement
129
168
  requirements:
130
169
  - - ">="
131
170
  - !ruby/object:Gem::Version
132
- version: 0.1.2
171
+ version: '1.3'
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '1.3'
133
175
  - !ruby/object:Gem::Dependency
134
- name: aruba
176
+ name: multi_test
135
177
  requirement: !ruby/object:Gem::Requirement
136
178
  requirements:
137
179
  - - "~>"
138
180
  - !ruby/object:Gem::Version
139
- version: 0.6.1
140
- type: :development
181
+ version: '0.1'
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: 0.1.2
185
+ type: :runtime
141
186
  prerelease: false
142
187
  version_requirements: !ruby/object:Gem::Requirement
143
188
  requirements:
144
189
  - - "~>"
145
190
  - !ruby/object:Gem::Version
146
- version: 0.6.1
191
+ version: '0.1'
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 0.1.2
147
195
  - !ruby/object:Gem::Dependency
148
- name: json
196
+ name: sys-uname
149
197
  requirement: !ruby/object:Gem::Requirement
150
198
  requirements:
151
199
  - - "~>"
152
200
  - !ruby/object:Gem::Version
153
- version: 1.8.6
154
- type: :development
201
+ version: '1.0'
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: 1.0.2
205
+ type: :runtime
155
206
  prerelease: false
156
207
  version_requirements: !ruby/object:Gem::Requirement
157
208
  requirements:
158
209
  - - "~>"
159
210
  - !ruby/object:Gem::Version
160
- version: 1.8.6
211
+ version: '1.0'
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: 1.0.2
161
215
  - !ruby/object:Gem::Dependency
162
216
  name: nokogiri
163
217
  requirement: !ruby/object:Gem::Requirement
164
218
  requirements:
165
219
  - - "~>"
166
220
  - !ruby/object:Gem::Version
167
- version: 1.8.1
221
+ version: '1.10'
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: 1.10.4
168
225
  type: :development
169
226
  prerelease: false
170
227
  version_requirements: !ruby/object:Gem::Requirement
171
228
  requirements:
172
229
  - - "~>"
173
230
  - !ruby/object:Gem::Version
174
- version: 1.8.1
231
+ version: '1.10'
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: 1.10.4
175
235
  - !ruby/object:Gem::Dependency
176
236
  name: pry
177
237
  requirement: !ruby/object:Gem::Requirement
178
238
  requirements:
239
+ - - "~>"
240
+ - !ruby/object:Gem::Version
241
+ version: '0.12'
179
242
  - - ">="
180
243
  - !ruby/object:Gem::Version
181
- version: '0'
244
+ version: 0.12.2
182
245
  type: :development
183
246
  prerelease: false
184
247
  version_requirements: !ruby/object:Gem::Requirement
185
248
  requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '0.12'
186
252
  - - ">="
187
253
  - !ruby/object:Gem::Version
188
- version: '0'
254
+ version: 0.12.2
189
255
  - !ruby/object:Gem::Dependency
190
256
  name: rake
191
257
  requirement: !ruby/object:Gem::Requirement
192
258
  requirements:
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: '12.3'
193
262
  - - ">="
194
263
  - !ruby/object:Gem::Version
195
- version: 0.9.2
264
+ version: 12.3.3
196
265
  type: :development
197
266
  prerelease: false
198
267
  version_requirements: !ruby/object:Gem::Requirement
199
268
  requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: '12.3'
200
272
  - - ">="
201
273
  - !ruby/object:Gem::Version
202
- version: 0.9.2
274
+ version: 12.3.3
203
275
  - !ruby/object:Gem::Dependency
204
276
  name: rspec
205
277
  requirement: !ruby/object:Gem::Requirement
206
278
  requirements:
207
279
  - - ">="
208
280
  - !ruby/object:Gem::Version
209
- version: '3.6'
281
+ version: 3.8.0
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '3.8'
210
285
  type: :development
211
286
  prerelease: false
212
287
  version_requirements: !ruby/object:Gem::Requirement
213
288
  requirements:
214
289
  - - ">="
215
290
  - !ruby/object:Gem::Version
216
- version: '3.6'
291
+ version: 3.8.0
292
+ - - "~>"
293
+ - !ruby/object:Gem::Version
294
+ version: '3.8'
217
295
  - !ruby/object:Gem::Dependency
218
- name: rubocop
296
+ name: simplecov
219
297
  requirement: !ruby/object:Gem::Requirement
220
298
  requirements:
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: 0.17.0
221
302
  - - "~>"
222
303
  - !ruby/object:Gem::Version
223
- version: 0.52.1
304
+ version: '0.17'
224
305
  type: :development
225
306
  prerelease: false
226
307
  version_requirements: !ruby/object:Gem::Requirement
227
308
  requirements:
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: 0.17.0
228
312
  - - "~>"
229
313
  - !ruby/object:Gem::Version
230
- version: 0.52.1
314
+ version: '0.17'
231
315
  - !ruby/object:Gem::Dependency
232
- name: simplecov
316
+ name: syntax
233
317
  requirement: !ruby/object:Gem::Requirement
234
318
  requirements:
319
+ - - "~>"
320
+ - !ruby/object:Gem::Version
321
+ version: '1.2'
235
322
  - - ">="
236
323
  - !ruby/object:Gem::Version
237
- version: 0.6.2
324
+ version: 1.2.2
238
325
  type: :development
239
326
  prerelease: false
240
327
  version_requirements: !ruby/object:Gem::Requirement
241
328
  requirements:
329
+ - - "~>"
330
+ - !ruby/object:Gem::Version
331
+ version: '1.2'
242
332
  - - ">="
243
333
  - !ruby/object:Gem::Version
244
- version: 0.6.2
334
+ version: 1.2.2
245
335
  - !ruby/object:Gem::Dependency
246
- name: syntax
336
+ name: test-unit
247
337
  requirement: !ruby/object:Gem::Requirement
248
338
  requirements:
339
+ - - "~>"
340
+ - !ruby/object:Gem::Version
341
+ version: '1.2'
249
342
  - - ">="
250
343
  - !ruby/object:Gem::Version
251
- version: 1.0.0
344
+ version: 1.2.3
252
345
  type: :development
253
346
  prerelease: false
254
347
  version_requirements: !ruby/object:Gem::Requirement
255
348
  requirements:
349
+ - - "~>"
350
+ - !ruby/object:Gem::Version
351
+ version: '1.2'
256
352
  - - ">="
257
353
  - !ruby/object:Gem::Version
258
- version: 1.0.0
354
+ version: 1.2.3
259
355
  - !ruby/object:Gem::Dependency
260
- name: octokit
356
+ name: webrick
261
357
  requirement: !ruby/object:Gem::Requirement
262
358
  requirements:
263
359
  - - ">="
264
360
  - !ruby/object:Gem::Version
265
- version: '0'
361
+ version: 1.6.0
362
+ - - "~>"
363
+ - !ruby/object:Gem::Version
364
+ version: '1.6'
266
365
  type: :development
267
366
  prerelease: false
268
367
  version_requirements: !ruby/object:Gem::Requirement
269
368
  requirements:
270
369
  - - ">="
271
370
  - !ruby/object:Gem::Version
272
- version: '0'
371
+ version: 1.6.0
372
+ - - "~>"
373
+ - !ruby/object:Gem::Version
374
+ version: '1.6'
273
375
  - !ruby/object:Gem::Dependency
274
- name: capybara
376
+ name: octokit
275
377
  requirement: !ruby/object:Gem::Requirement
276
378
  requirements:
277
379
  - - ">="
278
380
  - !ruby/object:Gem::Version
279
- version: '2.1'
381
+ version: 4.14.0
382
+ - - "~>"
383
+ - !ruby/object:Gem::Version
384
+ version: '4.14'
280
385
  type: :development
281
386
  prerelease: false
282
387
  version_requirements: !ruby/object:Gem::Requirement
283
388
  requirements:
284
389
  - - ">="
285
390
  - !ruby/object:Gem::Version
286
- version: '2.1'
391
+ version: 4.14.0
392
+ - - "~>"
393
+ - !ruby/object:Gem::Version
394
+ version: '4.14'
287
395
  - !ruby/object:Gem::Dependency
288
396
  name: rack-test
289
397
  requirement: !ruby/object:Gem::Requirement
290
398
  requirements:
291
399
  - - ">="
292
400
  - !ruby/object:Gem::Version
293
- version: 0.6.1
401
+ version: 1.1.0
402
+ - - "~>"
403
+ - !ruby/object:Gem::Version
404
+ version: '1.1'
294
405
  type: :development
295
406
  prerelease: false
296
407
  version_requirements: !ruby/object:Gem::Requirement
297
408
  requirements:
298
409
  - - ">="
299
410
  - !ruby/object:Gem::Version
300
- version: 0.6.1
411
+ version: 1.1.0
412
+ - - "~>"
413
+ - !ruby/object:Gem::Version
414
+ version: '1.1'
301
415
  - !ruby/object:Gem::Dependency
302
416
  name: sinatra
303
417
  requirement: !ruby/object:Gem::Requirement
304
418
  requirements:
419
+ - - "~>"
420
+ - !ruby/object:Gem::Version
421
+ version: '2.0'
305
422
  - - ">="
306
423
  - !ruby/object:Gem::Version
307
- version: 1.3.2
424
+ version: 2.0.5
308
425
  type: :development
309
426
  prerelease: false
310
427
  version_requirements: !ruby/object:Gem::Requirement
311
428
  requirements:
429
+ - - "~>"
430
+ - !ruby/object:Gem::Version
431
+ version: '2.0'
312
432
  - - ">="
313
433
  - !ruby/object:Gem::Version
314
- version: 1.3.2
434
+ version: 2.0.5
435
+ - !ruby/object:Gem::Dependency
436
+ name: capybara
437
+ requirement: !ruby/object:Gem::Requirement
438
+ requirements:
439
+ - - '='
440
+ - !ruby/object:Gem::Version
441
+ version: 3.15.0
442
+ type: :development
443
+ prerelease: false
444
+ version_requirements: !ruby/object:Gem::Requirement
445
+ requirements:
446
+ - - '='
447
+ - !ruby/object:Gem::Version
448
+ version: 3.15.0
315
449
  description: Behaviour Driven Development with elegance and joy
316
450
  email: cukes@googlegroups.com
317
451
  executables:
@@ -345,16 +479,22 @@ files:
345
479
  - lib/cucumber/encoding.rb
346
480
  - lib/cucumber/errors.rb
347
481
  - lib/cucumber/events.rb
348
- - lib/cucumber/events/gherkin_source_parsed.rb~
482
+ - lib/cucumber/events/envelope.rb
483
+ - lib/cucumber/events/gherkin_source_parsed.rb
349
484
  - lib/cucumber/events/gherkin_source_read.rb
485
+ - lib/cucumber/events/hook_test_step_created.rb
350
486
  - lib/cucumber/events/step_activated.rb
351
487
  - lib/cucumber/events/step_definition_registered.rb
488
+ - lib/cucumber/events/test_case_created.rb
352
489
  - lib/cucumber/events/test_case_finished.rb
490
+ - lib/cucumber/events/test_case_ready.rb
353
491
  - lib/cucumber/events/test_case_started.rb
354
492
  - lib/cucumber/events/test_run_finished.rb
355
493
  - lib/cucumber/events/test_run_started.rb
494
+ - lib/cucumber/events/test_step_created.rb
356
495
  - lib/cucumber/events/test_step_finished.rb
357
496
  - lib/cucumber/events/test_step_started.rb
497
+ - lib/cucumber/events/undefined_parameter_type.rb
358
498
  - lib/cucumber/file_specs.rb
359
499
  - lib/cucumber/filters.rb
360
500
  - lib/cucumber/filters/activate_steps.rb
@@ -362,6 +502,7 @@ files:
362
502
  - lib/cucumber/filters/apply_after_step_hooks.rb
363
503
  - lib/cucumber/filters/apply_around_hooks.rb
364
504
  - lib/cucumber/filters/apply_before_hooks.rb
505
+ - lib/cucumber/filters/broadcast_test_case_ready_event.rb
365
506
  - lib/cucumber/filters/broadcast_test_run_started_event.rb
366
507
  - lib/cucumber/filters/gated_receiver.rb
367
508
  - lib/cucumber/filters/prepare_world.rb
@@ -372,34 +513,32 @@ files:
372
513
  - lib/cucumber/filters/tag_limits/test_case_index.rb
373
514
  - lib/cucumber/filters/tag_limits/verifier.rb
374
515
  - lib/cucumber/formatter/ansicolor.rb
375
- - lib/cucumber/formatter/ast_lookup.rb~
516
+ - lib/cucumber/formatter/ast_lookup.rb
376
517
  - lib/cucumber/formatter/backtrace_filter.rb
377
518
  - lib/cucumber/formatter/console.rb
378
519
  - lib/cucumber/formatter/console_counts.rb
379
520
  - lib/cucumber/formatter/console_issues.rb
380
- - lib/cucumber/formatter/cucumber.css
381
- - lib/cucumber/formatter/cucumber.sass
382
521
  - lib/cucumber/formatter/duration.rb
383
522
  - lib/cucumber/formatter/duration_extractor.rb
523
+ - lib/cucumber/formatter/errors.rb
384
524
  - lib/cucumber/formatter/fail_fast.rb
385
525
  - lib/cucumber/formatter/fanout.rb
386
- - lib/cucumber/formatter/hook_query_visitor.rb
387
526
  - lib/cucumber/formatter/html.rb
388
- - lib/cucumber/formatter/html_builder.rb
527
+ - lib/cucumber/formatter/http_io.rb
389
528
  - lib/cucumber/formatter/ignore_missing_messages.rb
390
- - lib/cucumber/formatter/inline-js.js
391
529
  - lib/cucumber/formatter/interceptor.rb
392
530
  - lib/cucumber/formatter/io.rb
393
- - lib/cucumber/formatter/jquery-min.js
394
531
  - lib/cucumber/formatter/json.rb
395
- - lib/cucumber/formatter/json_pretty.rb
396
532
  - lib/cucumber/formatter/junit.rb
397
- - lib/cucumber/formatter/legacy_api/adapter.rb
398
- - lib/cucumber/formatter/legacy_api/ast.rb
399
- - lib/cucumber/formatter/legacy_api/results.rb
400
- - lib/cucumber/formatter/legacy_api/runtime_facade.rb
533
+ - lib/cucumber/formatter/message.rb
534
+ - lib/cucumber/formatter/message_builder.rb
401
535
  - lib/cucumber/formatter/pretty.rb
402
536
  - lib/cucumber/formatter/progress.rb
537
+ - lib/cucumber/formatter/query/hook_by_test_step.rb
538
+ - lib/cucumber/formatter/query/pickle_by_test.rb
539
+ - lib/cucumber/formatter/query/pickle_step_by_test_step.rb
540
+ - lib/cucumber/formatter/query/step_definitions_by_test_step.rb
541
+ - lib/cucumber/formatter/query/test_case_started_by_test_case.rb
403
542
  - lib/cucumber/formatter/rerun.rb
404
543
  - lib/cucumber/formatter/stepdefs.rb
405
544
  - lib/cucumber/formatter/steps.rb
@@ -438,7 +577,6 @@ files:
438
577
  - lib/cucumber/runtime/step_hooks.rb
439
578
  - lib/cucumber/runtime/support_code.rb
440
579
  - lib/cucumber/runtime/user_interface.rb
441
- - lib/cucumber/step_argument.rb
442
580
  - lib/cucumber/step_definition_light.rb
443
581
  - lib/cucumber/step_definitions.rb
444
582
  - lib/cucumber/step_match.rb
@@ -450,7 +588,12 @@ files:
450
588
  homepage: https://cucumber.io/
451
589
  licenses:
452
590
  - MIT
453
- metadata: {}
591
+ metadata:
592
+ bug_tracker_uri: https://github.com/cucumber/cucumber-ruby/issues
593
+ changelog_uri: https://github.com/cucumber/cucumber-ruby/blob/master/CHANGELOG.md
594
+ documentation_uri: https://www.rubydoc.info/github/cucumber/cucumber-ruby/
595
+ mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
596
+ source_code_uri: https://github.com/cucumber/cucumber-ruby
454
597
  post_install_message:
455
598
  rdoc_options:
456
599
  - "--charset=UTF-8"
@@ -460,16 +603,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
460
603
  requirements:
461
604
  - - ">="
462
605
  - !ruby/object:Gem::Version
463
- version: '2.2'
606
+ version: '2.3'
464
607
  required_rubygems_version: !ruby/object:Gem::Requirement
465
608
  requirements:
466
609
  - - ">="
467
610
  - !ruby/object:Gem::Version
468
611
  version: '0'
469
612
  requirements: []
470
- rubyforge_project:
471
- rubygems_version: 2.5.2
613
+ rubygems_version: 3.0.6
472
614
  signing_key:
473
615
  specification_version: 4
474
- summary: cucumber-3.1.2
616
+ summary: cucumber-4.0.0
475
617
  test_files: []