cucumber 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
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)