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
@@ -3,10 +3,10 @@ module Cucumber
3
3
  # Walks the AST, executing steps and notifying listeners
4
4
  class TreeWalker
5
5
  attr_accessor :configuration #:nodoc:
6
- attr_reader :step_mother #:nodoc:
6
+ attr_reader :runtime #:nodoc:
7
7
 
8
- def initialize(step_mother, listeners = [], configuration = Cucumber::Configuration.default)
9
- @step_mother, @listeners, @configuration = step_mother, listeners, configuration
8
+ def initialize(runtime, listeners = [], configuration = Cucumber::Configuration.default)
9
+ @runtime, @listeners, @configuration = runtime, listeners, configuration
10
10
  end
11
11
 
12
12
  def visit_features(features)
@@ -152,9 +152,9 @@ module Cucumber
152
152
  def embed(file, mime_type, label)
153
153
  broadcast(file, mime_type, label)
154
154
  end
155
-
155
+
156
156
  private
157
-
157
+
158
158
  def broadcast(*args, &block)
159
159
  message = extract_method_name_from(caller)
160
160
  message.gsub!('visit_', '')
@@ -165,8 +165,9 @@ module Cucumber
165
165
  else
166
166
  send_to_all(message, *args)
167
167
  end
168
+ self
168
169
  end
169
-
170
+
170
171
  def send_to_all(message, *args)
171
172
  @listeners.each do |listener|
172
173
  if listener.respond_to?(message)
@@ -177,7 +178,7 @@ module Cucumber
177
178
  def extract_method_name_from(call_stack)
178
179
  call_stack[0].match(/in `(.*)'/).captures[0]
179
180
  end
180
-
181
+
181
182
  end
182
183
  end
183
- end
184
+ end
@@ -3,7 +3,7 @@ module Cucumber
3
3
  class Visitor
4
4
  DEPRECATION_WARNING = "Cucumber::Ast::Visitor is deprecated and will be removed. You no longer need to inherit from this class."
5
5
 
6
- def initialize(step_mother)
6
+ def initialize(runtime)
7
7
  raise(DEPRECATION_WARNING)
8
8
  end
9
9
  end
@@ -68,8 +68,8 @@ module Cucumber
68
68
  @options[:dotcucumber]
69
69
  end
70
70
 
71
- def build_tree_walker(step_mother)
72
- Ast::TreeWalker.new(step_mother, formatters(step_mother), self)
71
+ def build_tree_walker(runtime)
72
+ Ast::TreeWalker.new(runtime, formatters(runtime), self)
73
73
  end
74
74
 
75
75
  def formatter_class(format)
@@ -133,35 +133,35 @@ module Cucumber
133
133
  logger.level = Logger::DEBUG if self.verbose?
134
134
  logger
135
135
  end
136
-
136
+
137
137
  def tag_expression
138
138
  Gherkin::TagExpression.new(@options[:tag_expressions])
139
139
  end
140
-
140
+
141
141
  def filters
142
142
  @options.filters
143
143
  end
144
-
144
+
145
145
  def formats
146
146
  @options[:formats]
147
147
  end
148
-
148
+
149
149
  def options
150
150
  warn("Deprecated: Configuration#options will be removed from the next release of Cucumber. Please use the configuration object directly instead.")
151
151
  @options
152
152
  end
153
-
153
+
154
154
  def paths
155
155
  @options[:paths].empty? ? ['features'] : @options[:paths]
156
156
  end
157
157
  private
158
158
 
159
- def formatters(step_mother)
159
+ def formatters(runtime)
160
160
  # TODO: We should remove the autoformat functionality. That
161
161
  # can be done with the gherkin CLI.
162
162
  if @options[:autoformat]
163
163
  require 'cucumber/formatter/pretty'
164
- return [Formatter::Pretty.new(step_mother, nil, @options)]
164
+ return [Formatter::Pretty.new(runtime, nil, @options)]
165
165
  end
166
166
 
167
167
  @options[:formats].map do |format_and_out|
@@ -169,7 +169,7 @@ module Cucumber
169
169
  path_or_io = format_and_out[1]
170
170
  begin
171
171
  formatter_class = formatter_class(format)
172
- formatter_class.new(step_mother, path_or_io, @options)
172
+ formatter_class.new(runtime, path_or_io, @options)
173
173
  rescue Exception => e
174
174
  e.message << "\nError creating formatter: #{format}"
175
175
  raise e
@@ -20,7 +20,7 @@ module Cucumber
20
20
  cloned_args = [] # I have no idea why this is needed, but if the regular args are sent then DRb magically transforms it into a DRb object - not an array
21
21
  args.each { |arg| cloned_args << arg }
22
22
  feature_server.run(cloned_args, error_stream, out_stream)
23
- rescue DRb::DRbConnError => e
23
+ rescue DRb::DRbConnError
24
24
  raise DRbClientError, "No DRb server is running."
25
25
  end
26
26
 
@@ -32,7 +32,7 @@ module Cucumber
32
32
  def execute!(existing_runtime = nil)
33
33
  trap_interrupt
34
34
  return @drb_output if run_drb_client
35
-
35
+
36
36
  runtime = if existing_runtime
37
37
  existing_runtime.configure(configuration)
38
38
  existing_runtime
@@ -42,7 +42,7 @@ module Cucumber
42
42
 
43
43
  runtime.run!
44
44
  runtime.write_stepdefs_json
45
- runtime.results.failure?
45
+ runtime.results.failure? || Cucumber.wants_to_quit
46
46
  rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
47
47
  @error_stream.puts e.message
48
48
  true
@@ -58,7 +58,7 @@ module Cucumber
58
58
  end
59
59
 
60
60
  private
61
-
61
+
62
62
  def run_drb_client
63
63
  return false unless configuration.drb?
64
64
  @drb_output = DRbClient.run(@args, @error_stream, @out_stream, configuration.drb_port)
@@ -61,7 +61,7 @@ module Cucumber
61
61
  @profiles = []
62
62
  @overridden_paths = []
63
63
  @options = default_options
64
-
64
+
65
65
  @quiet = @disable_profile_loading = nil
66
66
  end
67
67
 
@@ -182,7 +182,7 @@ module Cucumber
182
182
  "Beware that if you want to use several negative tags to exclude several tags",
183
183
  "you have to use logical AND: --tags ~@fixme --tags ~@buggy.",
184
184
  "\n",
185
- "Positive tags can be given a threshold to limit the number of occurrences.",
185
+ "Positive tags can be given a threshold to limit the number of occurrences.",
186
186
  "Example: --tags @qa:3 will fail if there are more than 3 occurrences of the @qa tag.",
187
187
  "This can be practical if you are practicing Kanban or CONWIP.") do |v|
188
188
  @options[:tag_expressions] << v
@@ -375,6 +375,7 @@ module Cucumber
375
375
  @options[:source] &= other_options[:source]
376
376
  @options[:snippets] &= other_options[:snippets]
377
377
  @options[:strict] |= other_options[:strict]
378
+ @options[:dry_run] |= other_options[:dry_run]
378
379
 
379
380
  @profiles += other_options.profiles
380
381
  @expanded_args += other_options.expanded_args
@@ -15,7 +15,7 @@ module Cucumber
15
15
  Could not find profile: '#{profile}'
16
16
 
17
17
  Defined profiles in cucumber.yml:
18
- * #{cucumber_yml.keys.join("\n * ")}
18
+ * #{cucumber_yml.keys.sort.join("\n * ")}
19
19
  END_OF_ERROR
20
20
  end
21
21
 
@@ -4,46 +4,46 @@ module Cucumber
4
4
  def self.default
5
5
  new
6
6
  end
7
-
7
+
8
8
  def self.parse(argument)
9
9
  return new(argument) if argument.is_a?(Hash)
10
10
  argument
11
11
  end
12
-
12
+
13
13
  def initialize(user_options = {})
14
14
  @options = default_options.merge(user_options)
15
15
  end
16
-
16
+
17
17
  def dry_run?
18
18
  @options[:dry_run]
19
19
  end
20
-
20
+
21
21
  def guess?
22
22
  @options[:guess]
23
23
  end
24
-
24
+
25
25
  def strict?
26
26
  @options[:strict]
27
27
  end
28
-
29
- def expand?
28
+
29
+ def expand?
30
30
  @options[:expand]
31
31
  end
32
-
32
+
33
33
  def paths
34
34
  @options[:paths]
35
35
  end
36
-
36
+
37
37
  def autoload_code_paths
38
38
  @options[:autoload_code_paths]
39
39
  end
40
-
40
+
41
41
  private
42
-
42
+
43
43
  def default_options
44
44
  {
45
45
  :autoload_code_paths => ['features/support', 'features/step_definitions']
46
46
  }
47
47
  end
48
48
  end
49
- end
49
+ end
@@ -9,7 +9,7 @@ module Cucumber
9
9
 
10
10
  constant = ::Object
11
11
  names.each do |name|
12
- constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
12
+ constant = constantize_name(constant, name)
13
13
  end
14
14
  constant
15
15
  rescue NameError => e
@@ -30,5 +30,14 @@ module Cucumber
30
30
  tr("-", "_").
31
31
  downcase
32
32
  end
33
+
34
+ private
35
+ def constantize_name(constant, name)
36
+ if Cucumber::RUBY_1_8_7
37
+ constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
38
+ else
39
+ constant.const_defined?(name, false) ? constant.const_get(name, false) : constant.const_missing(name)
40
+ end
41
+ end
33
42
  end
34
- end
43
+ end
@@ -22,7 +22,7 @@ end
22
22
 
23
23
  # Do the same for Test::Unit
24
24
  begin
25
- require 'test/unit'
25
+ require 'test/unit'
26
26
  # Don't attempt to monkeypatch if the require succeeded but didn't
27
27
  # define the actual module.
28
28
  #
@@ -54,16 +54,16 @@ class Object #:nodoc:
54
54
 
55
55
  def cucumber_arity(block)
56
56
  a = block.arity
57
- Cucumber::RUBY_1_9 ? a : (a == -1 ? 0 : a)
57
+ Cucumber::RUBY_1_8_7 ? (a == -1 ? 0 : a) : a
58
58
  end
59
-
59
+
60
60
  def cucumber_compatible_arity?(args, block)
61
61
  ari = cucumber_arity(block)
62
62
  len = args.length
63
63
  return true if ari == len or ari < 0 && len >= ari.abs-1
64
64
  false
65
65
  end
66
-
66
+
67
67
  def cucumber_run_with_backtrace_filtering(pseudo_method)
68
68
  begin
69
69
  yield
@@ -74,7 +74,7 @@ class Object #:nodoc:
74
74
  end
75
75
  end
76
76
 
77
- INSTANCE_EXEC_OFFSET = (Cucumber::RUBY_1_9 || Cucumber::RUBY_1_8_7 || Cucumber::JRUBY) ? -3 : -4
77
+ INSTANCE_EXEC_OFFSET = (Cucumber::RUBY_2_0 || Cucumber::RUBY_1_9 || Cucumber::RUBY_1_8_7 || Cucumber::JRUBY) ? -3 : -4
78
78
 
79
79
  def replace_instance_exec_invocation_line!(backtrace, instance_exec_invocation_line, pseudo_method)
80
80
  return if Cucumber.use_full_backtrace
@@ -2,7 +2,7 @@
2
2
  class Proc #:nodoc:
3
3
  PROC_PATTERN = /[\d\w]+@(.+):(\d+).*>/
4
4
  PWD = Dir.pwd
5
-
5
+
6
6
  def to_comment_line
7
7
  "# #{file_colon_line}"
8
8
  end
@@ -26,9 +26,9 @@ class Proc #:nodoc:
26
26
  else
27
27
  # This Ruby implementation doesn't implement Proc#to_s correctly
28
28
  STDERR.puts "*** THIS RUBY IMPLEMENTATION DOESN'T REPORT FILE AND LINE FOR PROCS ***"
29
-
29
+
30
30
  def file_colon_line
31
31
  "UNKNOWN:-1"
32
32
  end
33
33
  end
34
- end
34
+ end
@@ -7,7 +7,7 @@ module Cucumber
7
7
  super %{Undefined step: "#{step_name}"}
8
8
  @step_name = step_name
9
9
  end
10
-
10
+
11
11
  def nested!
12
12
  @nested = true
13
13
  end
@@ -76,7 +76,7 @@ module Cucumber
76
76
  end
77
77
 
78
78
  private
79
-
79
+
80
80
  def encoding_for(source)
81
81
  encoding = DEFAULT_ENCODING
82
82
  source.each_line do |line|
@@ -2,16 +2,16 @@ require 'cucumber/platform'
2
2
  require 'cucumber/term/ansicolor'
3
3
 
4
4
  if Cucumber::IRONRUBY
5
- begin
6
- require 'iron-term-ansicolor'
7
- rescue LoadError
8
- STDERR.puts %{*** WARNING: You must "igem install iron-term-ansicolor" to get coloured ouput in on IronRuby}
9
- end
5
+ begin
6
+ require 'iron-term-ansicolor'
7
+ rescue LoadError
8
+ STDERR.puts %{*** WARNING: You must "igem install iron-term-ansicolor" to get coloured ouput in on IronRuby}
9
+ end
10
10
  end
11
11
 
12
12
  if Cucumber::WINDOWS_MRI
13
13
  unless ENV['ANSICON']
14
- STDERR.puts %{*** WARNING: You must use ANSICON 1.31 or higher (http://adoxa.110mb.com/ansicon) to get coloured output on Windows}
14
+ STDERR.puts %{*** WARNING: You must use ANSICON 1.31 or higher (https://github.com/adoxa/ansicon/) to get coloured output on Windows}
15
15
  Cucumber::Term::ANSIColor.coloring = false
16
16
  end
17
17
  end
@@ -44,17 +44,19 @@ module Cucumber
44
44
  #
45
45
  # For instance, if your shell has a black background and a green font (like the
46
46
  # "Homebrew" settings for OS X' Terminal.app), you may want to override passed
47
- # steps to be white instead of green. Examples:
47
+ # steps to be white instead of green.
48
+ #
49
+ # Although not listed, you can also use <tt>grey</tt>.
50
+ #
51
+ # Examples: (On Windows, use SET instead of export.)
48
52
  #
49
53
  # export CUCUMBER_COLORS="passed=white"
50
54
  # export CUCUMBER_COLORS="passed=white,bold:passed_param=white,bold,underline"
51
55
  #
52
- # (If you're on Windows, use SET instead of export).
53
56
  # To see what colours and effects are available, just run this in your shell:
54
57
  #
55
58
  # ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Cucumber::Term::ANSIColor.attributes"
56
59
  #
57
- # Although not listed, you can also use <tt>grey</tt>
58
60
  module ANSIColor
59
61
  include Cucumber::Term::ANSIColor
60
62
 
@@ -80,28 +82,39 @@ module Cucumber
80
82
  end
81
83
  end
82
84
 
83
- ALIASES.each do |method, color|
84
- unless method =~ /.*_param/
85
+ # Eval to define the color-named methods required by Term::ANSIColor.
86
+ #
87
+ # Examples:
88
+ #
89
+ # def failed(string=nil, &proc)
90
+ # red(string, &proc)
91
+ # end
92
+ #
93
+ # def failed_param(string=nil, &proc)
94
+ # red(bold(string, &proc)) + red
95
+ # end
96
+ ALIASES.each_key do |method_name|
97
+ unless method_name =~ /.*_param/
85
98
  code = <<-EOF
86
- def #{method}(string=nil, &proc)
87
- #{ALIASES[method].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method].split(",").length}
99
+ def #{method_name}(string=nil, &proc)
100
+ #{ALIASES[method_name].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method_name].split(",").length}
88
101
  end
89
102
  # This resets the colour to the non-param colour
90
- def #{method}_param(string=nil, &proc)
91
- #{ALIASES[method+'_param'].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method+'_param'].split(",").length} + #{ALIASES[method].split(",").join(' + ')}
103
+ def #{method_name}_param(string=nil, &proc)
104
+ #{ALIASES[method_name+'_param'].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method_name+'_param'].split(",").length} + #{ALIASES[method_name].split(",").join(' + ')}
92
105
  end
93
106
  EOF
94
107
  eval(code)
95
108
  end
96
109
  end
97
-
110
+
98
111
  def self.define_grey #:nodoc:
99
112
  begin
100
113
  gem 'genki-ruby-terminfo'
101
114
  require 'terminfo'
102
115
  case TermInfo.default_object.tigetnum("colors")
103
116
  when 0
104
- raise "Your terminal doesn't support colours"
117
+ raise "Your terminal doesn't support colours."
105
118
  when 1
106
119
  ::Cucumber::Term::ANSIColor.coloring = false
107
120
  alias grey white
@@ -114,7 +127,7 @@ module Cucumber
114
127
  if e.class.name == 'TermInfo::TermInfoError'
115
128
  STDERR.puts "*** WARNING ***"
116
129
  STDERR.puts "You have the genki-ruby-terminfo gem installed, but you haven't set your TERM variable."
117
- STDERR.puts "Try setting it to TERM=xterm-256color to get grey colour in output"
130
+ STDERR.puts "Try setting it to TERM=xterm-256color to get grey colour in output."
118
131
  STDERR.puts "\n"
119
132
  alias grey white
120
133
  else
@@ -122,17 +135,17 @@ module Cucumber
122
135
  end
123
136
  end
124
137
  end
125
-
138
+
126
139
  def self.define_real_grey #:nodoc:
127
- def grey(m) #:nodoc:
140
+ def grey(string) #:nodoc:
128
141
  if ::Cucumber::Term::ANSIColor.coloring?
129
- "\e[90m#{m}\e[0m"
142
+ "\e[90m#{string}\e[0m"
130
143
  else
131
- m
144
+ string
132
145
  end
133
146
  end
134
147
  end
135
-
148
+
136
149
  define_grey
137
150
 
138
151
  def cukes(n)