cucumber 0.9.3 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,2 +1,7 @@
1
1
  source "http://rubygems.org"
2
+
3
+ group :development do
4
+ gem 'bundler', '~> 1.0.3'
5
+ end
6
+
2
7
  gemspec
@@ -1,3 +1,12 @@
1
+ == 0.9.4 (2010-11-07)
2
+
3
+ === Bugfixes
4
+ * Superfluous space after step_keyword value in snippet_text message (#679 Aslak Hellesøy)
5
+ * Better Handling for "announce" in HTML formatter (#676 Stephen Kennedy)
6
+ * Too many open files - getcwd (#666 Aslak Hellesøy)
7
+ * Cucumber 0.9.3 prevents Test::Unit from running (#677 Aslak Hellesøy)
8
+ * Performance degradation when running feature files with over 1000 steps (#675 Dimitri Geshef)
9
+
1
10
  == 0.9.3 (2010-10-24)
2
11
 
3
12
  === Bugfixes
@@ -31,7 +31,7 @@ for important information about this release. Happy cuking!
31
31
  s.add_dependency 'json', '~> 1.4.6'
32
32
 
33
33
  s.add_development_dependency 'rake', '~> 0.8.7'
34
- s.add_development_dependency 'rspec', '~> 2.0.0.beta.20'
34
+ s.add_development_dependency 'rspec', '~> 2.0.1'
35
35
  s.add_development_dependency 'nokogiri', '~> 1.4.3'
36
36
  s.add_development_dependency 'prawn', '= 0.8.4'
37
37
  s.add_development_dependency 'prawn-layout', '= 0.8.4'
@@ -5,6 +5,11 @@ require 'rspec/expectations'
5
5
  require 'fileutils'
6
6
  require 'forwardable'
7
7
  require 'cucumber/formatter/unicode'
8
+ # This is to force miniunit to be loaded on 1.9.2, and verify that we can still run with --profile. See:
9
+ # * disable_mini_test_autorun.rb and
10
+ # * http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
11
+ # * https://rspec.lighthouseapp.com/projects/16211/tickets/677-cucumber-093-prevents-testunit-from-running
12
+ require 'test/unit'
8
13
 
9
14
  class CucumberWorld
10
15
  extend Forwardable
@@ -294,9 +294,9 @@ Feature: Wire Protocol
294
294
  Given there is a wire server running on port 54321 which understands the following protocol:
295
295
  | request | response |
296
296
  | ["step_matches",{"name_to_match":"we're all wired"}] | ["success",[]] |
297
- | ["snippet_text",{"step_keyword":"Given ","multiline_arg_class":"","step_name":"we're all wired"}] | ["success","foo()\n bar;\nbaz"] |
297
+ | ["snippet_text",{"step_keyword":"Given","multiline_arg_class":"","step_name":"we're all wired"}] | ["success","foo()\n bar;\nbaz"] |
298
298
  | ["begin_scenario"] | ["success"] |
299
- | ["end_scenario"] | ["success"] |
299
+ | ["end_scenario"] | ["success"] |
300
300
  When I run cucumber -f pretty
301
301
  Then STDERR should be empty
302
302
  And it should pass with
@@ -8,7 +8,6 @@ require 'cucumber/step_mother'
8
8
  require 'cucumber/cli/main'
9
9
  require 'cucumber/broadcaster'
10
10
  require 'cucumber/step_definitions'
11
- require 'cucumber/core_ext/disable_mini_unit_autorun'
12
11
 
13
12
  module Cucumber
14
13
  class << self
@@ -4,7 +4,7 @@ module Cucumber
4
4
  module Ast
5
5
  class Background #:nodoc:
6
6
  include FeatureElement
7
- attr_reader :feature_elements
7
+ attr_reader :feature_elements, :name
8
8
 
9
9
  def initialize(comment, line, keyword, name, raw_steps)
10
10
  @comment, @line, @keyword, @name, @raw_steps = comment, line, keyword, name, raw_steps
@@ -35,13 +35,15 @@ module Cucumber
35
35
  visitor.visit_background_name(@keyword, @name, file_colon_line(@line), source_indent(first_line_length))
36
36
  with_visitor(hook_context, visitor) do
37
37
  visitor.step_mother.before(hook_context)
38
+ skip_invoke! if failed?
38
39
  visitor.visit_steps(@step_invocations)
39
- @failed = @step_invocations.detect{|step_invocation| step_invocation.exception}
40
+ @failed = @step_invocations.detect{|step_invocation| step_invocation.exception || step_invocation.status != :passed }
40
41
  visitor.step_mother.after(hook_context) if @failed || @feature_elements.empty?
41
42
  end
42
43
  end
43
44
 
44
45
  def with_visitor(scenario, visitor)
46
+ @current_visitor = visitor
45
47
  init
46
48
  if self != scenario && scenario.respond_to?(:with_visitor)
47
49
  scenario.with_visitor(visitor) do
@@ -62,6 +64,10 @@ module Cucumber
62
64
  end
63
65
  end
64
66
 
67
+ def skip_invoke!
68
+ @step_invocations.each{|step_invocation| step_invocation.skip_invoke!}
69
+ end
70
+
65
71
  def failed?
66
72
  @failed
67
73
  end
@@ -80,6 +86,14 @@ module Cucumber
80
86
  sexp += steps if steps.any?
81
87
  sexp
82
88
  end
89
+
90
+ def fail!(exception)
91
+ @failed = true
92
+ @exception = exception
93
+ @current_visitor.visit_exception(@exception, :failed)
94
+ end
95
+
96
+
83
97
  end
84
98
  end
85
99
  end
@@ -154,7 +154,7 @@ module Cucumber
154
154
  #
155
155
  # gets converted into the following:
156
156
  #
157
- # [['a', 'b], ['c', 'd']]
157
+ # [['a', 'b'], ['c', 'd']]
158
158
  #
159
159
  def raw
160
160
  cell_matrix.map do |row|
@@ -164,6 +164,10 @@ module Cucumber
164
164
  end
165
165
  end
166
166
 
167
+ def column_names #:nodoc:
168
+ @col_names ||= cell_matrix[0].map { |cell| cell.value }
169
+ end
170
+
167
171
  # Same as #raw, but skips the first (header) row
168
172
  def rows
169
173
  raw[1..-1]
@@ -380,7 +384,7 @@ module Cucumber
380
384
  hash = Hash.new do |hash, key|
381
385
  hash[key.to_s] if key.is_a?(Symbol)
382
386
  end
383
- raw[0].each_with_index do |column_name, column_index|
387
+ column_names.each_with_index do |column_name, column_index|
384
388
  value = @conversion_procs[column_name].call(cells.value(column_index))
385
389
  hash[column_name] = value
386
390
  end
@@ -681,4 +685,4 @@ module Cucumber
681
685
  end
682
686
  end
683
687
  end
684
- end
688
+ end
@@ -165,7 +165,7 @@ module Cucumber
165
165
  "This represents the boolean expression (@foo || !@bar) && @zap.",
166
166
  "\n",
167
167
  "Beware that if you want to use several negative tags to exclude several tags",
168
- "you have to use logical AND: --tags ~@fixme --tags @buggy.",
168
+ "you have to use logical AND: --tags ~@fixme --tags ~@buggy.",
169
169
  "\n",
170
170
  "Positive tags can be given a threshold to limit the number of occurrences.",
171
171
  "Example: --tags @qa:3 will fail if there are more than 3 occurrences of the @qa tag.",
@@ -5,6 +5,10 @@ begin
5
5
  class << self
6
6
  @@installed_at_exit = true
7
7
  end
8
+
9
+ def run(*)
10
+ 0
11
+ end
8
12
  end
9
13
  rescue LoadError => ignore
10
14
  end
@@ -1,6 +1,7 @@
1
1
  # Proc extension to get more location info out of a proc
2
2
  class Proc #:nodoc:
3
3
  PROC_PATTERN = /[\d\w]+@(.+):(\d+).*>/
4
+ PWD = Dir.pwd
4
5
 
5
6
  def to_comment_line
6
7
  "# #{file_colon_line}"
@@ -14,7 +15,7 @@ class Proc #:nodoc:
14
15
  def file_colon_line
15
16
  path, line = *to_s.match(PROC_PATTERN)[1..2]
16
17
  path = File.expand_path(path)
17
- pwd = File.expand_path(Dir.pwd)
18
+ pwd = File.expand_path(PWD)
18
19
  if path.index(pwd)
19
20
  path = path[pwd.length+1..-1]
20
21
  elsif path =~ /.*\/gems\/(.*\.rb)$/
@@ -129,6 +129,12 @@ body {
129
129
  background: #fcfb98;
130
130
  color: #131313;
131
131
  }
132
+ .cucumber table td.announcement, td table td.announcement, th table td.announcement {
133
+ border-left: 5px solid aqua;
134
+ border-bottom: 1px solid aqua;
135
+ background: #e0ffff;
136
+ color: #001111;
137
+ }
132
138
  .cucumber ol, td ol, th ol {
133
139
  list-style: none;
134
140
  margin: 0px;
@@ -175,6 +181,13 @@ body {
175
181
  background: #fcfb98;
176
182
  color: #131313;
177
183
  }
184
+ .cucumber ol li.announcement, td ol li.announcement, th ol li.announcement {
185
+ border-left: 5px solid aqua;
186
+ border-bottom: 1px solid aqua;
187
+ background: #e0ffff;
188
+ color: #001111;
189
+ margin-left: 10px;
190
+ }
178
191
  .cucumber #summary, td #summary, th #summary {
179
192
  margin: 0px;
180
193
  padding: 5px 10px;
@@ -1,28 +1,32 @@
1
1
  /* cucumber.css is generated from cucumber.sass */
2
2
  /* Regenerate with rake sass */
3
3
 
4
- !step_left = 5px "solid"
5
- !step_bottom = 1px "solid"
4
+ !step_left = 5px "solid"
5
+ !step_bottom = 1px "solid"
6
6
 
7
- !failed = #FFFBD3
8
- !failed_border = #C20000
9
- !failed_text = #C20000
7
+ !failed = #FFFBD3
8
+ !failed_border = #C20000
9
+ !failed_text = #C20000
10
10
 
11
- !passed = #DBFFB4
12
- !passed_border = #65C400
13
- !passed_text = #3D7700
11
+ !passed = #DBFFB4
12
+ !passed_border = #65C400
13
+ !passed_text = #3D7700
14
14
 
15
- !skipped = #E0FFFF
16
- !skipped_border = #00FFFF
17
- !skipped_text = #001111
15
+ !skipped = #E0FFFF
16
+ !skipped_border = #00FFFF
17
+ !skipped_text = #001111
18
18
 
19
- !pending = #FCFB98
20
- !pending_border = #FAF834
21
- !pending_text = #131313
19
+ !pending = #FCFB98
20
+ !pending_border = #FAF834
21
+ !pending_text = #131313
22
22
 
23
- !undefined = #FCFB98
24
- !undefined_border = #FAF834
25
- !undefined_text = #131313
23
+ !undefined = #FCFB98
24
+ !undefined_border = #FAF834
25
+ !undefined_text = #131313
26
+
27
+ !announcement = #E0FFFF
28
+ !announcement_border = #00FFFF
29
+ !announcement_text = #001111
26
30
 
27
31
  body
28
32
  :font-size 0px
@@ -148,6 +152,11 @@ body
148
152
  :border-bottom= !step_bottom !undefined_border
149
153
  :background= !undefined
150
154
  :color= !undefined_text
155
+ td.announcement
156
+ :border-left= !step_left !announcement_border
157
+ :border-bottom= !step_bottom !announcement_border
158
+ :background= !announcement
159
+ :color= !announcement_text
151
160
 
152
161
  ol
153
162
  :list-style none
@@ -187,6 +196,12 @@ body
187
196
  :border-bottom= !step_bottom !undefined_border
188
197
  :background= !undefined
189
198
  :color= !undefined_text
199
+ li.announcement
200
+ :border-left= !step_left !announcement_border
201
+ :border-bottom= !step_bottom !announcement_border
202
+ :background= !announcement
203
+ :color= !announcement_text
204
+ :margin-left= 10px
190
205
 
191
206
  #summary
192
207
  :margin 0px
@@ -20,6 +20,7 @@ module Cucumber
20
20
  @scenario_number = 0
21
21
  @step_number = 0
22
22
  @header_red = nil
23
+ @delayed_announcements = []
23
24
  end
24
25
 
25
26
  def embed(file, mime_type)
@@ -245,6 +246,7 @@ module Cucumber
245
246
  end
246
247
  end
247
248
  @builder << '</li>'
249
+ print_announcements
248
250
  end
249
251
 
250
252
  def step_name(keyword, step_match, status, source_indent, background)
@@ -298,6 +300,7 @@ module Cucumber
298
300
 
299
301
  def after_table_row(table_row)
300
302
  return if @hide_this_step
303
+ print_table_row_announcements
301
304
  @builder << '</tr>'
302
305
  if table_row.exception
303
306
  @builder.tr do
@@ -328,7 +331,34 @@ module Cucumber
328
331
  end
329
332
 
330
333
  def announce(announcement)
331
- @builder.pre(announcement, :class => 'announcement')
334
+ @delayed_announcements << announcement
335
+ #@builder.pre(announcement, :class => 'announcement')
336
+ end
337
+
338
+ def print_announcements
339
+ return if @delayed_announcements.empty?
340
+
341
+ #@builder.ol do
342
+ @delayed_announcements.each do |ann|
343
+ @builder.li(:class => 'step announcement') do
344
+ @builder << ann
345
+ end
346
+ end
347
+ #end
348
+ empty_announcements
349
+ end
350
+
351
+ def print_table_row_announcements
352
+ return if @delayed_announcements.empty?
353
+
354
+ @builder.td(:class => 'announcement') do
355
+ @builder << @delayed_announcements.join(", ")
356
+ end
357
+ empty_announcements
358
+ end
359
+
360
+ def empty_announcements
361
+ @delayed_announcements = []
332
362
  end
333
363
 
334
364
  protected
@@ -4,7 +4,7 @@ module Cucumber
4
4
  PARAM_PATTERN = /"([^"]*)"/
5
5
  ESCAPED_PARAM_PATTERN = '"([^\\"]*)"'
6
6
 
7
- def snippet_text(step_keyword, step_name, multiline_arg_class)
7
+ def snippet_text(code_keyword, step_name, multiline_arg_class)
8
8
  escaped = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
9
9
  escaped = escaped.gsub(PARAM_PATTERN, ESCAPED_PARAM_PATTERN)
10
10
 
@@ -20,7 +20,7 @@ module Cucumber
20
20
  multiline_class_comment = "//#{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n"
21
21
  end
22
22
 
23
- "#{step_keyword}(/^#{escaped}$/, function(#{block_arg_string}){\n #{multiline_class_comment} //express the regexp above with the code you wish you had\n});"
23
+ "#{code_keyword}(/^#{escaped}$/, function(#{block_arg_string}){\n #{multiline_class_comment} //express the regexp above with the code you wish you had\n});"
24
24
  end
25
25
  end
26
26
  end
@@ -4,7 +4,7 @@ require 'rbconfig'
4
4
 
5
5
  module Cucumber
6
6
  unless defined?(Cucumber::VERSION)
7
- VERSION = '0.9.3'
7
+ VERSION = '0.9.4'
8
8
  BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
9
9
  LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
10
10
  JRUBY = defined?(JRUBY_VERSION)
@@ -28,8 +28,8 @@ module Cucumber
28
28
  mod = import(py_file)
29
29
  end
30
30
 
31
- def snippet_text(step_keyword, step_name, multiline_arg_class)
32
- "python snippet: #{step_keyword}, #{step_name}"
31
+ def snippet_text(code_keyword, step_name, multiline_arg_class)
32
+ "python snippet: #{code_keyword}, #{step_name}"
33
33
  end
34
34
 
35
35
  def begin_scenario(scenario)
@@ -91,7 +91,7 @@ module Cucumber
91
91
 
92
92
  ARGUMENT_PATTERNS = ['"([^"]*)"', '(\d+)']
93
93
 
94
- def snippet_text(step_keyword, step_name, multiline_arg_class)
94
+ def snippet_text(code_keyword, step_name, multiline_arg_class)
95
95
  snippet_pattern = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
96
96
  arg_count = 0
97
97
  ARGUMENT_PATTERNS.each do |pattern|
@@ -107,7 +107,7 @@ module Cucumber
107
107
  multiline_class_comment = "# #{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n "
108
108
  end
109
109
 
110
- "#{Gherkin::I18n.code_keyword_for(step_keyword)} /^#{snippet_pattern}$/ do#{block_arg_string}\n #{multiline_class_comment}pending # express the regexp above with the code you wish you had\nend"
110
+ "#{code_keyword} /^#{snippet_pattern}$/ do#{block_arg_string}\n #{multiline_class_comment}pending # express the regexp above with the code you wish you had\nend"
111
111
  end
112
112
 
113
113
  def begin_rb_scenario(scenario)
@@ -1,7 +1,8 @@
1
+ require 'gherkin/rubify'
2
+ require 'gherkin/i18n'
1
3
  require 'cucumber/configuration'
2
4
  require 'cucumber/language_support/language_methods'
3
5
  require 'cucumber/formatter/duration'
4
- require 'gherkin/rubify'
5
6
  require 'cucumber/runtime/user_interface'
6
7
  require 'cucumber/runtime/features_loader'
7
8
  require 'cucumber/runtime/results'
@@ -16,6 +17,7 @@ module Cucumber
16
17
  include Runtime::UserInterface
17
18
 
18
19
  def initialize(configuration = Configuration.default)
20
+ require 'cucumber/core_ext/disable_mini_unit_autorun'
19
21
  @current_scenario = nil
20
22
  @configuration = Configuration.parse(configuration)
21
23
  @support_code = SupportCode.new(self, @configuration)
@@ -68,7 +70,7 @@ module Cucumber
68
70
  end
69
71
 
70
72
  def snippet_text(step_keyword, step_name, multiline_arg_class) #:nodoc:
71
- @support_code.snippet_text(step_keyword, step_name, multiline_arg_class)
73
+ @support_code.snippet_text(Gherkin::I18n.code_keyword_for(step_keyword), step_name, multiline_arg_class)
72
74
  end
73
75
 
74
76
  def with_hooks(scenario, skip_hooks=false)
@@ -4,18 +4,32 @@ module Cucumber
4
4
  class Results
5
5
  def initialize(configuration)
6
6
  @configuration = configuration
7
+
8
+ # Optimization - quicker lookup.
9
+ @inserted_steps = {}
10
+ @inserted_scenarios = {}
7
11
  end
8
-
12
+
9
13
  def configure(new_configuration)
10
14
  @configuration = Configuration.parse(new_configuration)
11
15
  end
12
-
16
+
13
17
  def step_visited(step) #:nodoc:
14
- steps << step unless steps.index(step)
18
+ step_id = step.object_id
19
+
20
+ unless @inserted_steps.has_key?(step_id)
21
+ @inserted_steps[step_id] = step
22
+ steps.push(step)
23
+ end
15
24
  end
16
25
 
17
26
  def scenario_visited(scenario) #:nodoc:
18
- scenarios << scenario unless scenarios.index(scenario)
27
+ scenario_id = scenario.object_id
28
+
29
+ unless @inserted_scenarios.has_key?(scenario_id)
30
+ @inserted_scenarios[scenario_id] = scenario
31
+ scenarios.push(scenario)
32
+ end
19
33
  end
20
34
 
21
35
  def steps(status = nil) #:nodoc:
@@ -3,7 +3,7 @@ require 'cucumber/runtime'
3
3
  module Cucumber
4
4
  class StepMother < Runtime
5
5
  def initialize(*args)
6
- warn("StepMother has been deprecated and will be gently put to sleep at the next major next release. Please use Runtime instead. #{caller[0]}")
6
+ warn("StepMother has been deprecated and will be gently put to sleep at the next major release. Please use Runtime instead. #{caller[0]}")
7
7
  super
8
8
  end
9
9
  end
@@ -26,9 +26,9 @@ module Cucumber
26
26
  @connections << Connection.new(config)
27
27
  end
28
28
 
29
- def snippet_text(step_keyword, step_name, multiline_arg_class)
29
+ def snippet_text(code_keyword, step_name, multiline_arg_class)
30
30
  snippets = @connections.map do |remote|
31
- remote.snippet_text(step_keyword, step_name, multiline_arg_class.to_s)
31
+ remote.snippet_text(code_keyword, step_name, multiline_arg_class.to_s)
32
32
  end
33
33
  snippets.flatten.join("\n")
34
34
  end
@@ -48,6 +48,63 @@ module Cucumber
48
48
  $x.should == 2
49
49
  $y.should == 10
50
50
  end
51
+
52
+ describe "should respond to #name" do
53
+ it "with a value" do
54
+ background = Background.new(
55
+ comment=Comment.new(''),
56
+ line=2,
57
+ keyword="",
58
+ name="background name",
59
+ steps=[])
60
+ lambda{ background.name }.should_not raise_error
61
+ background.name.should == 'background name'
62
+ end
63
+ it "without a value" do
64
+ background = Background.new(
65
+ comment=Comment.new(''),
66
+ line=2,
67
+ keyword="",
68
+ name=nil,
69
+ steps=[])
70
+ lambda{ background.name }.should_not raise_error
71
+ end
72
+ end
73
+
74
+ describe "failures in a Before hook" do
75
+
76
+ before do
77
+ Before do
78
+ raise Exception, "Exception from Before hook"
79
+ end
80
+ end
81
+
82
+ it "should state that the background has failed" do
83
+ # Assign
84
+ background = Background.new(
85
+ comment=Comment.new(''),
86
+ line=2,
87
+ keyword="",
88
+ name="",
89
+ steps=[
90
+ Step.new(7, "Given", "y is 5")
91
+ ])
92
+ background.feature = @feature
93
+
94
+ # Expect
95
+ @visitor.should_receive( :visit_exception ) do |exception, status|
96
+ exception.should be_instance_of( Exception )
97
+ exception.message.should == "Exception from Before hook"
98
+ status.should == :failed
99
+ end
100
+
101
+ # Assert
102
+ lambda{ @visitor.visit_background(background) }.should_not raise_error
103
+ background.should be_failed
104
+ end
105
+
106
+ end
51
107
  end
108
+
52
109
  end
53
110
  end
@@ -335,6 +335,23 @@ module Cucumber
335
335
  }
336
336
  end
337
337
 
338
+ it "should detect seemingly identical tables as different" do
339
+ t1 = Table.new([
340
+ ['X', 'Y'],
341
+ ['2', '1']
342
+ ])
343
+ t2 = Table.new([
344
+ ['X', 'Y'],
345
+ [2, 1]
346
+ ])
347
+ lambda{t1.diff!(t2)}.should raise_error
348
+ t1.to_s(:indent => 12, :color => false).should == %{
349
+ | X | Y |
350
+ | (-) (i) "2" | (-) (i) "1" |
351
+ | (+) (i) 2 | (+) (i) 1 |
352
+ }
353
+ end
354
+
338
355
  it "should not allow mappings that match more than 1 column" do
339
356
  t1 = Table.new([
340
357
  ['Cuke', 'Duke'],
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 9
8
- - 3
9
- version: 0.9.3
8
+ - 4
9
+ version: 0.9.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Aslak Helles\xC3\xB8y"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-24 00:00:00 +01:00
17
+ date: 2010-11-07 00:00:00 +00:00
18
18
  default_executable: cucumber
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -117,10 +117,8 @@ dependencies:
117
117
  segments:
118
118
  - 2
119
119
  - 0
120
- - 0
121
- - beta
122
- - 20
123
- version: 2.0.0.beta.20
120
+ - 1
121
+ version: 2.0.1
124
122
  type: :development
125
123
  prerelease: false
126
124
  version_requirements: *id007
@@ -762,7 +760,7 @@ licenses: []
762
760
 
763
761
  post_install_message: "\n\
764
762
  (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n\
765
- Thank you for installing cucumber-0.9.3.\n\
763
+ Thank you for installing cucumber-0.9.4.\n\
766
764
  Please be sure to read http://wiki.github.com/aslakhellesoy/cucumber/upgrading\n\
767
765
  for important information about this release. Happy cuking!\n\n\
768
766
  (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n"
@@ -775,7 +773,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
775
773
  requirements:
776
774
  - - ">="
777
775
  - !ruby/object:Gem::Version
778
- hash: 4045923160433736312
776
+ hash: 95980206032165697
779
777
  segments:
780
778
  - 0
781
779
  version: "0"
@@ -784,7 +782,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
784
782
  requirements:
785
783
  - - ">="
786
784
  - !ruby/object:Gem::Version
787
- hash: 4045923160433736312
785
+ hash: 95980206032165697
788
786
  segments:
789
787
  - 0
790
788
  version: "0"
@@ -794,7 +792,7 @@ rubyforge_project:
794
792
  rubygems_version: 1.3.7
795
793
  signing_key:
796
794
  specification_version: 3
797
- summary: cucumber-0.9.3
795
+ summary: cucumber-0.9.4
798
796
  test_files:
799
797
  - features/announce.feature
800
798
  - features/api/list_step_defs_as_json.feature