cucumber 1.2.1 → 1.2.2

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 (172) hide show
  1. data/.rvmrc +1 -1
  2. data/.travis.yml +3 -2
  3. data/DEVELOPERS.md +48 -0
  4. data/History.md +22 -3
  5. data/README.md +13 -31
  6. data/Rakefile +1 -0
  7. data/cucumber.gemspec +18 -17
  8. data/cucumber.yml +3 -2
  9. data/examples/i18n/cs/Rakefile +6 -0
  10. data/examples/i18n/cs/features/addition.feature +17 -0
  11. data/examples/i18n/cs/features/division.feature +11 -0
  12. data/examples/i18n/cs/features/step_definitons/calculator_steps.rb +24 -0
  13. data/examples/i18n/cs/lib/calculator.rb +14 -0
  14. data/examples/i18n/hi/Rakefile +6 -0
  15. data/examples/i18n/hi/features/addition.feature +16 -0
  16. data/examples/i18n/hi/features/division.feature +10 -0
  17. data/examples/i18n/hi/features/step_definitons/calculator_steps.rb +24 -0
  18. data/examples/i18n/hi/lib/calculator.rb +15 -0
  19. data/examples/python/README.textile +2 -1
  20. data/examples/ruby2python/README.textile +2 -1
  21. data/features/.cucumber/stepdefs.json +1688 -445
  22. data/features/assertions.feature +69 -0
  23. data/features/formatter_callbacks.feature +189 -0
  24. data/features/html_formatter.feature +19 -0
  25. data/features/json_formatter.feature +8 -4
  26. data/features/nested_steps_with_second_arg.feature +73 -0
  27. data/features/step_definitions.feature +65 -0
  28. data/features/step_definitions/cucumber_steps.rb +18 -3
  29. data/fixtures/self_test/features/support/env.rb +1 -1
  30. data/gem_tasks/cucumber.rake +5 -3
  31. data/gem_tasks/downloads.rb +3 -3
  32. data/gem_tasks/stats +4 -2
  33. data/gem_tasks/yard.rake +31 -13
  34. data/legacy_features/default_snippets.feature +3 -3
  35. data/legacy_features/language_help.feature +4 -0
  36. data/legacy_features/report_called_undefined_steps.feature +1 -1
  37. data/legacy_features/snippet.feature +3 -3
  38. data/legacy_features/snippets_when_using_star_keyword.feature +1 -1
  39. data/legacy_features/step_definitions/cucumber_steps.rb +4 -3
  40. data/legacy_features/support/env.rb +1 -1
  41. data/legacy_features/support/fake_wire_server.rb +9 -9
  42. data/lib/autotest/cucumber_mixin.rb +14 -14
  43. data/lib/autotest/discover.rb +2 -0
  44. data/lib/cucumber.rb +2 -2
  45. data/lib/cucumber/ast.rb +1 -1
  46. data/lib/cucumber/ast/background.rb +11 -7
  47. data/lib/cucumber/ast/comment.rb +2 -2
  48. data/lib/cucumber/ast/doc_string.rb +1 -1
  49. data/lib/cucumber/ast/examples.rb +1 -1
  50. data/lib/cucumber/ast/feature.rb +2 -2
  51. data/lib/cucumber/ast/feature_element.rb +1 -1
  52. data/lib/cucumber/ast/multiline_argument.rb +2 -2
  53. data/lib/cucumber/ast/names.rb +2 -2
  54. data/lib/cucumber/ast/outline_table.rb +4 -5
  55. data/lib/cucumber/ast/scenario.rb +14 -14
  56. data/lib/cucumber/ast/scenario_outline.rb +4 -4
  57. data/lib/cucumber/ast/step.rb +3 -3
  58. data/lib/cucumber/ast/step_collection.rb +5 -5
  59. data/lib/cucumber/ast/step_invocation.rb +8 -8
  60. data/lib/cucumber/ast/table.rb +40 -27
  61. data/lib/cucumber/ast/tree_walker.rb +9 -8
  62. data/lib/cucumber/ast/visitor.rb +1 -1
  63. data/lib/cucumber/cli/configuration.rb +10 -10
  64. data/lib/cucumber/cli/drb_client.rb +1 -1
  65. data/lib/cucumber/cli/main.rb +3 -3
  66. data/lib/cucumber/cli/options.rb +3 -2
  67. data/lib/cucumber/cli/profile_loader.rb +1 -1
  68. data/lib/cucumber/configuration.rb +12 -12
  69. data/lib/cucumber/constantize.rb +11 -2
  70. data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +1 -1
  71. data/lib/cucumber/core_ext/instance_exec.rb +4 -4
  72. data/lib/cucumber/core_ext/proc.rb +3 -3
  73. data/lib/cucumber/errors.rb +1 -1
  74. data/lib/cucumber/feature_file.rb +1 -1
  75. data/lib/cucumber/formatter/ansicolor.rb +36 -23
  76. data/lib/cucumber/formatter/console.rb +45 -25
  77. data/lib/cucumber/formatter/debug.rb +7 -7
  78. data/lib/cucumber/formatter/duration.rb +1 -1
  79. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +7 -0
  80. data/lib/cucumber/formatter/gpretty.rb +1 -1
  81. data/lib/cucumber/formatter/html.rb +52 -53
  82. data/lib/cucumber/formatter/interceptor.rb +2 -2
  83. data/lib/cucumber/formatter/json.rb +1 -1
  84. data/lib/cucumber/formatter/json_pretty.rb +2 -1
  85. data/lib/cucumber/formatter/junit.rb +1 -1
  86. data/lib/cucumber/formatter/ordered_xml_markup.rb +1 -1
  87. data/lib/cucumber/formatter/pretty.rb +12 -12
  88. data/lib/cucumber/formatter/progress.rb +5 -5
  89. data/lib/cucumber/formatter/rerun.rb +5 -5
  90. data/lib/cucumber/formatter/stepdefs.rb +1 -1
  91. data/lib/cucumber/formatter/steps.rb +6 -6
  92. data/lib/cucumber/formatter/summary.rb +6 -6
  93. data/lib/cucumber/formatter/unicode.rb +18 -18
  94. data/lib/cucumber/formatter/usage.rb +7 -7
  95. data/lib/cucumber/js_support/js_dsl.js +1 -1
  96. data/lib/cucumber/language_support.rb +1 -1
  97. data/lib/cucumber/parser/gherkin_builder.rb +33 -33
  98. data/lib/cucumber/platform.rb +3 -2
  99. data/lib/cucumber/py_support/py_dsl.py +2 -2
  100. data/lib/cucumber/py_support/py_language.py +2 -2
  101. data/lib/cucumber/py_support/py_language.rb +2 -2
  102. data/lib/cucumber/rake/task.rb +4 -3
  103. data/lib/cucumber/rb_support/rb_dsl.rb +10 -10
  104. data/lib/cucumber/rb_support/rb_language.rb +27 -19
  105. data/lib/cucumber/rb_support/rb_step_definition.rb +39 -11
  106. data/lib/cucumber/rb_support/rb_transform.rb +3 -3
  107. data/lib/cucumber/rb_support/rb_world.rb +15 -15
  108. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +1 -1
  109. data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
  110. data/lib/cucumber/rspec/doubles.rb +1 -1
  111. data/lib/cucumber/runtime.rb +11 -10
  112. data/lib/cucumber/runtime/features_loader.rb +6 -6
  113. data/lib/cucumber/runtime/for_programming_languages.rb +8 -15
  114. data/lib/cucumber/runtime/results.rb +6 -6
  115. data/lib/cucumber/runtime/support_code.rb +37 -28
  116. data/lib/cucumber/runtime/user_interface.rb +4 -4
  117. data/lib/cucumber/step_definition_light.rb +4 -4
  118. data/lib/cucumber/step_definitions.rb +2 -3
  119. data/lib/cucumber/step_match.rb +6 -6
  120. data/lib/cucumber/step_mother.rb +1 -1
  121. data/lib/cucumber/term/ansicolor.rb +22 -22
  122. data/lib/cucumber/wire_support/configuration.rb +11 -14
  123. data/lib/cucumber/wire_support/connection.rb +10 -9
  124. data/lib/cucumber/wire_support/request_handler.rb +3 -3
  125. data/lib/cucumber/wire_support/wire_exception.rb +3 -3
  126. data/lib/cucumber/wire_support/wire_language.rb +11 -11
  127. data/lib/cucumber/wire_support/wire_packet.rb +7 -5
  128. data/lib/cucumber/wire_support/wire_protocol.rb +6 -6
  129. data/lib/cucumber/wire_support/wire_protocol/requests.rb +20 -20
  130. data/lib/cucumber/wire_support/wire_step_definition.rb +4 -4
  131. data/spec/cucumber/ast/background_spec.rb +4 -4
  132. data/spec/cucumber/ast/doc_string_spec.rb +8 -8
  133. data/spec/cucumber/ast/feature_factory.rb +4 -4
  134. data/spec/cucumber/ast/feature_spec.rb +18 -18
  135. data/spec/cucumber/ast/outline_table_spec.rb +3 -3
  136. data/spec/cucumber/ast/step_spec.rb +4 -4
  137. data/spec/cucumber/ast/table_spec.rb +50 -29
  138. data/spec/cucumber/ast/tree_walker_spec.rb +12 -4
  139. data/spec/cucumber/broadcaster_spec.rb +1 -1
  140. data/spec/cucumber/cli/configuration_spec.rb +10 -4
  141. data/spec/cucumber/cli/drb_client_spec.rb +1 -1
  142. data/spec/cucumber/cli/main_spec.rb +28 -7
  143. data/spec/cucumber/cli/options_spec.rb +3 -3
  144. data/spec/cucumber/configuration_spec.rb +4 -4
  145. data/spec/cucumber/constantize_spec.rb +2 -0
  146. data/spec/cucumber/core_ext/proc_spec.rb +7 -7
  147. data/spec/cucumber/formatter/ansicolor_spec.rb +2 -2
  148. data/spec/cucumber/formatter/duration_spec.rb +2 -2
  149. data/spec/cucumber/formatter/html_spec.rb +31 -31
  150. data/spec/cucumber/formatter/interceptor_spec.rb +10 -0
  151. data/spec/cucumber/formatter/progress_spec.rb +1 -1
  152. data/spec/cucumber/formatter/spec_helper.rb +7 -7
  153. data/spec/cucumber/rake/forked_spec.rb +15 -2
  154. data/spec/cucumber/rake/rcov_spec.rb +2 -2
  155. data/spec/cucumber/rb_support/rb_language_spec.rb +34 -17
  156. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +45 -35
  157. data/spec/cucumber/rb_support/rb_transform_spec.rb +3 -3
  158. data/spec/cucumber/runtime/for_programming_languages_spec.rb +31 -0
  159. data/spec/cucumber/runtime/results_spec.rb +5 -5
  160. data/spec/cucumber/runtime/support_code_spec.rb +13 -2
  161. data/spec/cucumber/runtime_spec.rb +7 -7
  162. data/spec/cucumber/step_match_spec.rb +2 -2
  163. data/spec/cucumber/wire_support/configuration_spec.rb +16 -6
  164. data/spec/cucumber/wire_support/connection_spec.rb +25 -11
  165. data/spec/cucumber/wire_support/wire_exception_spec.rb +3 -3
  166. data/spec/cucumber/wire_support/wire_language_spec.rb +3 -3
  167. data/spec/cucumber/wire_support/wire_packet_spec.rb +4 -4
  168. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
  169. data/spec/spec_helper.rb +2 -2
  170. metadata +98 -128
  171. data/legacy_features/html_formatter.feature +0 -8
  172. data/legacy_features/html_formatter/a.html +0 -561
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'multi_json'
2
3
  require 'gherkin/rubify'
3
4
  require 'gherkin/i18n'
4
5
  require 'cucumber/configuration'
@@ -13,7 +14,7 @@ module Cucumber
13
14
  # This is the meaty part of Cucumber that ties everything together.
14
15
  class Runtime
15
16
  attr_reader :results
16
-
17
+
17
18
  include Formatter::Duration
18
19
  include Runtime::UserInterface
19
20
 
@@ -24,28 +25,28 @@ module Cucumber
24
25
  @support_code = SupportCode.new(self, @configuration)
25
26
  @results = Results.new(@configuration)
26
27
  end
27
-
28
+
28
29
  # Allows you to take an existing runtime and change it's configuration
29
30
  def configure(new_configuration)
30
31
  @configuration = Configuration.parse(new_configuration)
31
32
  @support_code.configure(@configuration)
32
33
  @results.configure(@configuration)
33
34
  end
34
-
35
+
35
36
  def load_programming_language(language)
36
37
  @support_code.load_programming_language(language)
37
38
  end
38
-
39
+
39
40
  def run!
40
41
  load_step_definitions
41
42
  fire_after_configuration_hook
42
43
 
43
44
  tree_walker = @configuration.build_tree_walker(self)
44
45
  self.visitor = tree_walker # Ugly circular dependency, but needed to support World#puts
45
-
46
+
46
47
  tree_walker.visit_features(features)
47
48
  end
48
-
49
+
49
50
  def features_paths
50
51
  @configuration.paths
51
52
  end
@@ -151,7 +152,7 @@ module Cucumber
151
152
  FileUtils.mkdir_p(@configuration.dotcucumber)
152
153
  end
153
154
  File.open(File.join(@configuration.dotcucumber, 'stepdefs.json'), 'w') do |io|
154
- io.write(JSON.pretty_generate(stepdefs))
155
+ io.write(MultiJson.dump(stepdefs, :pretty => true))
155
156
  end
156
157
  end
157
158
  end
@@ -164,8 +165,8 @@ module Cucumber
164
165
 
165
166
  def features
166
167
  @loader ||= Runtime::FeaturesLoader.new(
167
- @configuration.feature_files,
168
- @configuration.filters,
168
+ @configuration.feature_files,
169
+ @configuration.filters,
169
170
  @configuration.tag_expression)
170
171
  @loader.features
171
172
  end
@@ -180,4 +181,4 @@ module Cucumber
180
181
  end
181
182
  end
182
183
 
183
- end
184
+ end
@@ -2,21 +2,21 @@ require 'cucumber/errors'
2
2
 
3
3
  module Cucumber
4
4
  class Runtime
5
-
5
+
6
6
  class FeaturesLoader
7
7
  include Formatter::Duration
8
8
 
9
9
  def initialize(feature_files, filters, tag_expression)
10
10
  @feature_files, @filters, @tag_expression = feature_files, filters, tag_expression
11
11
  end
12
-
12
+
13
13
  def features
14
- load unless @features
14
+ load unless (defined? @features) and @features
15
15
  @features
16
16
  end
17
-
17
+
18
18
  private
19
-
19
+
20
20
  def load
21
21
  features = Ast::Features.new
22
22
 
@@ -52,7 +52,7 @@ module Cucumber
52
52
  end
53
53
  raise TagExcess.new(error_messages) if error_messages.any?
54
54
  end
55
-
55
+
56
56
  def log
57
57
  Cucumber.logger
58
58
  end
@@ -3,12 +3,12 @@ require 'forwardable'
3
3
  module Cucumber
4
4
  class Runtime
5
5
  # This is what a programming language will consider to be a runtime.
6
- #
6
+ #
7
7
  # It's a thin class that directs the handul of methods needed by the
8
8
  # programming languages to the right place.
9
9
  class ForProgrammingLanguages
10
10
  extend Forwardable
11
-
11
+
12
12
  def initialize(support_code, user_interface)
13
13
  @support_code, @user_interface = support_code, user_interface
14
14
  end
@@ -19,12 +19,12 @@ module Cucumber
19
19
  :puts,
20
20
  :features_paths,
21
21
  :step_match
22
-
22
+
23
23
  def_delegators :@support_code,
24
24
  :invoke_steps,
25
25
  :invoke,
26
26
  :load_programming_language
27
-
27
+
28
28
  # Returns a Cucumber::Ast::Table for +text_or_table+, which can either
29
29
  # be a String:
30
30
  #
@@ -50,18 +50,11 @@ module Cucumber
50
50
  end
51
51
  end
52
52
 
53
- # Returns a regular String for +string_with_triple_quotes+. Example:
54
- #
55
- # """
56
- # hello
57
- # world
58
- # """
59
- #
60
- # Is retured as: " hello\nworld"
53
+ # Returns Ast::DocString for +string_without_triple_quotes+.
61
54
  #
62
- def doc_string(string_with_triple_quotes, file=nil, line_offset=0)
63
- Ast::DocString.parse(string_with_triple_quotes)
55
+ def doc_string(string_without_triple_quotes, content_type='', line_offset=0)
56
+ Ast::DocString.new(string_without_triple_quotes,content_type)
64
57
  end
65
58
  end
66
59
  end
67
- end
60
+ end
@@ -1,6 +1,6 @@
1
1
  module Cucumber
2
2
  class Runtime
3
-
3
+
4
4
  class Results
5
5
  def initialize(configuration)
6
6
  @configuration = configuration
@@ -22,7 +22,7 @@ module Cucumber
22
22
  steps.push(step)
23
23
  end
24
24
  end
25
-
25
+
26
26
  def scenario_visited(scenario) #:nodoc:
27
27
  scenario_id = scenario.object_id
28
28
 
@@ -31,7 +31,7 @@ module Cucumber
31
31
  scenarios.push(scenario)
32
32
  end
33
33
  end
34
-
34
+
35
35
  def steps(status = nil) #:nodoc:
36
36
  @steps ||= []
37
37
  if(status)
@@ -40,7 +40,7 @@ module Cucumber
40
40
  @steps
41
41
  end
42
42
  end
43
-
43
+
44
44
  def scenarios(status = nil) #:nodoc:
45
45
  @scenarios ||= []
46
46
  if(status)
@@ -49,7 +49,7 @@ module Cucumber
49
49
  @scenarios
50
50
  end
51
51
  end
52
-
52
+
53
53
  def failure?
54
54
  if @configuration.wip?
55
55
  scenarios(:passed).any?
@@ -59,6 +59,6 @@ module Cucumber
59
59
  end
60
60
  end
61
61
  end
62
-
62
+
63
63
  end
64
64
  end
@@ -5,9 +5,9 @@ require 'cucumber/runtime/for_programming_languages'
5
5
  module Cucumber
6
6
 
7
7
  class Runtime
8
-
8
+
9
9
  class SupportCode
10
-
10
+
11
11
  require 'forwardable'
12
12
  class StepInvoker
13
13
  include Gherkin::Rubify
@@ -20,15 +20,15 @@ module Cucumber
20
20
  end
21
21
 
22
22
  def step(step)
23
- @support_code.invoke(step.name, Ast::MultilineArgument.from(step.doc_string || step.rows))
23
+ @support_code.invoke(step.name, Ast::MultilineArgument.from(step.doc_string || step.rows))
24
24
  end
25
25
 
26
26
  def eof
27
27
  end
28
28
  end
29
-
29
+
30
30
  include Constantize
31
-
31
+
32
32
  def initialize(user_interface, configuration={})
33
33
  @configuration = Configuration.parse(configuration)
34
34
  @runtime_facade = Runtime::ForProgrammingLanguages.new(self, user_interface)
@@ -36,11 +36,11 @@ module Cucumber
36
36
  @programming_languages = []
37
37
  @language_map = {}
38
38
  end
39
-
39
+
40
40
  def configure(new_configuration)
41
41
  @configuration = Configuration.parse(new_configuration)
42
42
  end
43
-
43
+
44
44
  # Invokes a series of steps +steps_text+. Example:
45
45
  #
46
46
  # invoke(%Q{
@@ -55,7 +55,7 @@ module Cucumber
55
55
 
56
56
  def invoke(step_name, multiline_argument=nil)
57
57
  multiline_argument = Cucumber::Ast::MultilineArgument.from(multiline_argument)
58
- # It is very important to leave multiline_argument=nil as a vararg. Cuke4Duke needs it that way.
58
+ # It is very important to leave multiline_argument=nil as a vararg. Cuke4Duke needs it that way.
59
59
  begin
60
60
  step_match(step_name).invoke(multiline_argument)
61
61
  rescue Exception => e
@@ -63,7 +63,7 @@ module Cucumber
63
63
  raise e
64
64
  end
65
65
  end
66
-
66
+
67
67
  # Loads and registers programming language implementation.
68
68
  # Instances are cached, so calling with the same argument
69
69
  # twice will return the same instance.
@@ -76,7 +76,7 @@ module Cucumber
76
76
  @language_map[ext] = programming_language
77
77
  programming_language
78
78
  end
79
-
79
+
80
80
  def load_files!(files)
81
81
  log.debug("Code:\n")
82
82
  files.each do |file|
@@ -84,14 +84,14 @@ module Cucumber
84
84
  end
85
85
  log.debug("\n")
86
86
  end
87
-
87
+
88
88
  def load_files_from_paths(paths)
89
89
  files = paths.map { |path| Dir["#{path}/**/*"] }.flatten
90
90
  load_files! files
91
91
  end
92
-
92
+
93
93
  def unmatched_step_definitions
94
- @programming_languages.map do |programming_language|
94
+ @programming_languages.map do |programming_language|
95
95
  programming_language.unmatched_step_definitions
96
96
  end.flatten
97
97
  end
@@ -102,17 +102,17 @@ module Cucumber
102
102
  programming_language.snippet_text(step_keyword, step_name, multiline_arg_class)
103
103
  end.join("\n")
104
104
  end
105
-
105
+
106
106
  def unknown_programming_language?
107
107
  @programming_languages.empty?
108
108
  end
109
-
109
+
110
110
  def fire_hook(name, *args)
111
111
  @programming_languages.each do |programming_language|
112
112
  programming_language.send(name, *args)
113
113
  end
114
114
  end
115
-
115
+
116
116
  def around(scenario, block)
117
117
  @programming_languages.reverse.inject(block) do |blk, programming_language|
118
118
  proc do
@@ -122,29 +122,38 @@ module Cucumber
122
122
  end
123
123
  end.call
124
124
  end
125
-
125
+
126
126
  def step_definitions
127
127
  @programming_languages.map do |programming_language|
128
128
  programming_language.step_definitions
129
129
  end.flatten
130
130
  end
131
-
131
+
132
132
  def step_match(step_name, name_to_report=nil) #:nodoc:
133
+ @match_cache ||= {}
134
+
135
+ match = @match_cache[[step_name, name_to_report]]
136
+ return match if match
137
+
138
+ @match_cache[[step_name, name_to_report]] = step_match_without_cache(step_name, name_to_report)
139
+ end
140
+
141
+ private
142
+
143
+ def step_match_without_cache(step_name, name_to_report=nil)
133
144
  matches = matches(step_name, name_to_report)
134
145
  raise Undefined.new(step_name) if matches.empty?
135
146
  matches = best_matches(step_name, matches) if matches.size > 1 && guess_step_matches?
136
147
  raise Ambiguous.new(step_name, matches, guess_step_matches?) if matches.size > 1
137
148
  matches[0]
138
149
  end
139
-
140
- private
141
-
150
+
142
151
  def guess_step_matches?
143
152
  @configuration.guess?
144
153
  end
145
-
154
+
146
155
  def matches(step_name, name_to_report)
147
- @programming_languages.map do |programming_language|
156
+ @programming_languages.map do |programming_language|
148
157
  programming_language.step_matches(step_name, name_to_report).to_a
149
158
  end.flatten
150
159
  end
@@ -164,7 +173,7 @@ module Cucumber
164
173
  top_groups
165
174
  end
166
175
  end
167
-
176
+
168
177
  def load_file(file)
169
178
  if programming_language = programming_language_for(file)
170
179
  log.debug(" * #{file}\n")
@@ -173,11 +182,11 @@ module Cucumber
173
182
  log.debug(" * #{file} [NOT SUPPORTED]\n")
174
183
  end
175
184
  end
176
-
185
+
177
186
  def log
178
187
  Cucumber.logger
179
188
  end
180
-
189
+
181
190
  def programming_language_for(step_def_file)
182
191
  if ext = File.extname(step_def_file)[1..-1]
183
192
  return nil if @unsupported_programming_languages.index(ext)
@@ -192,7 +201,7 @@ module Cucumber
192
201
  nil
193
202
  end
194
203
  end
195
-
204
+
196
205
  end
197
206
  end
198
- end
207
+ end
@@ -47,7 +47,7 @@ module Cucumber
47
47
  end
48
48
 
49
49
  # Embed +src+ of MIME type +mime_type+ into the output. The +src+ argument may
50
- # be a path to a file, or if it's an image it may also be a Base64 encoded image.
50
+ # be a path to a file, or if it's an image it may also be a Base64 encoded image.
51
51
  # The embedded data may or may not be ignored, depending on what kind of formatter(s) are active.
52
52
  #
53
53
  def embed(src, mime_type, label)
@@ -55,13 +55,13 @@ module Cucumber
55
55
  end
56
56
 
57
57
  private
58
-
58
+
59
59
  def mri_gets(timeout_seconds)
60
60
  begin
61
61
  Timeout.timeout(timeout_seconds) do
62
62
  STDIN.gets
63
63
  end
64
- rescue Timeout::Error => e
64
+ rescue Timeout::Error
65
65
  nil
66
66
  end
67
67
  end
@@ -76,6 +76,6 @@ module Cucumber
76
76
  answer
77
77
  end
78
78
  end
79
-
79
+
80
80
  end
81
81
  end
@@ -4,17 +4,17 @@ module Cucumber
4
4
  # Used for reporting purposes only (usage formatter).
5
5
  class StepDefinitionLight
6
6
  attr_reader :regexp_source, :file_colon_line
7
-
7
+
8
8
  def initialize(regexp_source, file_colon_line)
9
9
  @regexp_source, @file_colon_line = regexp_source, file_colon_line
10
10
  end
11
-
11
+
12
12
  def eql?(o)
13
13
  regexp_source == o.regexp_source && file_colon_line == o.file_colon_line
14
14
  end
15
-
15
+
16
16
  def hash
17
17
  regexp_source.hash + 31*file_colon_line.hash
18
18
  end
19
19
  end
20
- end
20
+ end