cucumber 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ script: "rake"
2
+ rvm:
3
+ - 1.9.2
4
+
@@ -1,3 +1,12 @@
1
+ == 0.10.3 (2011-05-23)
2
+
3
+ === New Features
4
+ * Better JUnit formatter support for sub directories and scenario outlines (#59 Matt Simpson)
5
+ * Coloured output that spans several lines sets colours for each line. (Aslak Hellesøy)
6
+ * New bundler attribute on the Rake task, allowing faster execution. (Aslak Hellesøy)
7
+ * Fix Table#rows cell ordering in ruby 1.8. (#47_github Brian Dunn)
8
+ * JUnit Formatter: record skipped/pending/undefined scenario results (#655 meeee)
9
+
1
10
  == 0.10.2 (2011-03-21)
2
11
 
3
12
  === Bugfixes
@@ -20,7 +29,7 @@
20
29
 
21
30
  === Bugfixes
22
31
  * Missing methods in Runtime::ForProgrammingLanguages - make v8 example run again (Chris Mytton)
23
- * Features files are sorted before they are executed, giving consistent results accross different OSes (Guewen Baconnier)
32
+ * Features files are sorted before they are executed, giving consistent results across different OSes (Guewen Baconnier)
24
33
  * Remove duplicate lines in backtraces in the HTML report (Jari Bakken)
25
34
 
26
35
  == 0.10.0 (2010-12-07)
@@ -1,7 +1,7 @@
1
1
  = Cucumber
2
2
 
3
3
  The main website is at http://cukes.info/
4
- The documentation is at http://wiki.github.com/aslakhellesoy/cucumber/
4
+ The documentation is at https://wiki.github.com/cucumber/cucumber/
5
5
 
6
6
  == Note on Patches/Pull Requests
7
7
 
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'rubygems'
3
3
  require 'bundler'
4
- Bundler.setup
5
4
  Bundler::GemHelper.install_tasks
6
5
 
7
6
  Dir['gem_tasks/**/*.rake'].each { |rake| load rake }
@@ -12,7 +12,6 @@ Gem::Specification.new do |s|
12
12
  s.homepage = "http://cukes.info"
13
13
 
14
14
  s.platform = Gem::Platform::RUBY
15
- s.default_executable = "cucumber"
16
15
  s.post_install_message = %{
17
16
  (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
18
17
 
@@ -24,15 +23,15 @@ for important information about this release. Happy cuking!
24
23
 
25
24
  }
26
25
 
27
- s.add_dependency 'gherkin', '>= 2.3.5'
26
+ s.add_dependency 'gherkin', '>= 2.3.8'
28
27
  s.add_dependency 'term-ansicolor', '>= 1.0.5'
29
28
  s.add_dependency 'builder', '>= 2.1.2'
30
29
  s.add_dependency 'diff-lcs', '>= 1.1.2'
31
30
  s.add_dependency 'json', '>= 1.4.6'
32
31
 
33
- s.add_development_dependency 'aruba', '>= 0.3.4'
32
+ s.add_development_dependency 'aruba', '>= 0.3.6'
34
33
  s.add_development_dependency 'rake', '>= 0.8.7'
35
- s.add_development_dependency 'rspec', '>= 2.5.0'
34
+ s.add_development_dependency 'rspec', '>= 2.6.0'
36
35
  s.add_development_dependency 'nokogiri', '>= 1.4.4'
37
36
  s.add_development_dependency 'prawn', '= 0.8.4'
38
37
  s.add_development_dependency 'prawn-layout', '= 0.8.4'
@@ -45,7 +44,7 @@ for important information about this release. Happy cuking!
45
44
  s.add_development_dependency 'rack-test', '>= 0.5.7'
46
45
  s.add_development_dependency 'webrat', '>= 0.7.3'
47
46
  s.add_development_dependency 'sinatra', '>= 1.2.0'
48
- s.add_development_dependency 'capybara', '>= 0.4.1'
47
+ s.add_development_dependency 'capybara', '>= 1.0.0.beta1'
49
48
 
50
49
  s.rubygems_version = ">= 1.6.1"
51
50
  s.files = `git ls-files`.split("\n")
@@ -1,5 +1,5 @@
1
1
  # language: ru
2
- Фича: Деление чисел
2
+ Функция: Деление чисел
3
3
  Поскольку деление сложный процесс и люди часто допускают ошибки
4
4
  Нужно дать им возможность делить на калькуляторе
5
5
 
@@ -9,7 +9,7 @@
9
9
  Если я нажимаю "/"
10
10
  То результатом должно быть число <частное>
11
11
 
12
- Значения:
12
+ Примеры:
13
13
  | делимое | делитель | частное |
14
14
  | 100 | 2 | 50 |
15
15
  | 28 | 7 | 4 |
@@ -2,4 +2,6 @@ Feature: Pending step
2
2
 
3
3
  Scenario: Pending
4
4
  Given a pending step
5
-
5
+
6
+ Scenario: Undefined
7
+ Given an undefined step
@@ -0,0 +1,8 @@
1
+ Feature: Subdirectory - One passing scenario, one failing scenario
2
+
3
+ Scenario: Passing
4
+ Given a passing scenario
5
+
6
+ Scenario: Failing
7
+ Given a failing scenario
8
+
@@ -2,9 +2,12 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
2
  require 'cucumber/rake/task'
3
3
  require 'cucumber/platform'
4
4
 
5
- Cucumber::Rake::Task.new(:features)
5
+ Cucumber::Rake::Task.new(:features) do |t|
6
+ t.fork = false
7
+ end
6
8
 
7
9
  Cucumber::Rake::Task.new(:legacy_features) do |t|
10
+ t.fork = false
8
11
  t.cucumber_opts = %w{legacy_features}
9
12
  if(Cucumber::JRUBY)
10
13
  t.profile = Cucumber::WINDOWS ? 'jruby_win' : 'jruby'
@@ -0,0 +1,7 @@
1
+ require 'json'
2
+ require 'httparty'
3
+
4
+ IO.read(File.dirname(__FILE__) + '/versions.txt').each_line do |version|
5
+ json = HTTParty.get("http://rubygems.org/api/v1/downloads/cucumber-#{version.strip}.json")
6
+ puts JSON.parse(json.body)['version_downloads']
7
+ end
@@ -0,0 +1,74 @@
1
+ 0.10.2
2
+ 0.10.1
3
+ 0.10.0
4
+ 0.9.4
5
+ 0.9.3
6
+ 0.9.2
7
+ 0.9.1
8
+ 0.9.0
9
+ 0.8.5
10
+ 0.8.4
11
+ 0.8.3
12
+ 0.8.2
13
+ 0.8.1
14
+ 0.8.0
15
+ 0.7.3
16
+ 0.7.2
17
+ 0.7.1
18
+ 0.7.0
19
+ 0.6.4
20
+ 0.6.3
21
+ 0.6.2
22
+ 0.6.1
23
+ 0.6.0
24
+ 0.5.3
25
+ 0.5.2
26
+ 0.5.1
27
+ 0.5.0
28
+ 0.4.4
29
+ 0.4.3
30
+ 0.4.2
31
+ 0.4.1
32
+ 0.4.0
33
+ 0.3.104
34
+ 0.3.103
35
+ 0.3.102
36
+ 0.3.101
37
+ 0.3.100
38
+ 0.3.99
39
+ 0.3.98
40
+ 0.3.97
41
+ 0.3.96
42
+ 0.3.95
43
+ 0.3.94
44
+ 0.3.93
45
+ 0.3.92
46
+ 0.3.91
47
+ 0.3.90
48
+ 0.3.11
49
+ 0.3.10
50
+ 0.3.9
51
+ 0.3.8
52
+ 0.3.7
53
+ 0.3.6
54
+ 0.3.5
55
+ 0.3.4
56
+ 0.3.3
57
+ 0.3.2
58
+ 0.3.1
59
+ 0.3.0
60
+ 0.2.3
61
+ 0.2.2
62
+ 0.2.1
63
+ 0.2.0
64
+ 0.1.16
65
+ 0.1.15
66
+ 0.1.14
67
+ 0.1.13
68
+ 0.1.12
69
+ 0.1.11
70
+ 0.1.10
71
+ 0.1.9
72
+ 0.1.8
73
+ 0.1.7
74
+ 0.1.6
@@ -15,7 +15,7 @@ Feature: JUnit output formatter
15
15
  And "fixtures/junit/tmp/TEST-one_passing_one_failing.xml" with junit duration "0.005" should contain
16
16
  """
17
17
  <?xml version="1.0" encoding="UTF-8"?>
18
- <testsuite errors="0" failures="1" name="One passing scenario, one failing scenario" tests="2" time="0.005">
18
+ <testsuite errors="0" failures="1" name="One passing scenario, one failing scenario" skipped="0" tests="2" time="0.005">
19
19
  <testcase classname="One passing scenario, one failing scenario.Passing" name="Passing" time="0.005">
20
20
  </testcase>
21
21
  <testcase classname="One passing scenario, one failing scenario.Failing" name="Failing" time="0.005">
@@ -34,7 +34,35 @@ Feature: JUnit output formatter
34
34
 
35
35
  """
36
36
 
37
- Scenario: pending steps are simply skipped
37
+ Scenario: one feature in a subdirectory, one passing scenario, one failing scenario
38
+ When I run cucumber --format junit --out tmp/ features/some_subdirectory/one_passing_one_failing.feature --require features
39
+ Then it should fail with
40
+ """
41
+
42
+ """
43
+ And "fixtures/junit/tmp/TEST-some_subdirectory_one_passing_one_failing.xml" with junit duration "0.005" should contain
44
+ """
45
+ <?xml version="1.0" encoding="UTF-8"?>
46
+ <testsuite errors="0" failures="1" name="Subdirectory - One passing scenario, one failing scenario" skipped="0" tests="2" time="0.005">
47
+ <testcase classname="Subdirectory - One passing scenario, one failing scenario.Passing" name="Passing" time="0.005">
48
+ </testcase>
49
+ <testcase classname="Subdirectory - One passing scenario, one failing scenario.Failing" name="Failing" time="0.005">
50
+ <failure message="failed Failing" type="failed">
51
+ <![CDATA[Scenario: Failing
52
+
53
+ Given a failing scenario
54
+
55
+ Message:
56
+ ]]>
57
+ <![CDATA[ (RuntimeError)
58
+ features/some_subdirectory/one_passing_one_failing.feature:7:in `Given a failing scenario']]>
59
+ </failure>
60
+ </testcase>
61
+ </testsuite>
62
+
63
+ """
64
+
65
+ Scenario: pending and undefined steps are reported as skipped
38
66
  When I run cucumber --format junit --out tmp/ features/pending.feature
39
67
  Then it should pass with
40
68
  """
@@ -43,12 +71,18 @@ Feature: JUnit output formatter
43
71
  And "fixtures/junit/tmp/TEST-pending.xml" with junit duration "0.009" should contain
44
72
  """
45
73
  <?xml version="1.0" encoding="UTF-8"?>
46
- <testsuite errors="0" failures="0" name="Pending step" tests="0" time="0.009">
74
+ <testsuite errors="0" failures="0" name="Pending step" skipped="2" tests="2" time="0.009">
75
+ <testcase classname="Pending step.Pending" name="Pending" time="0.009">
76
+ <skipped/>
77
+ </testcase>
78
+ <testcase classname="Pending step.Undefined" name="Undefined" time="0.009">
79
+ <skipped/>
80
+ </testcase>
47
81
  </testsuite>
48
82
 
49
83
  """
50
84
 
51
- Scenario: pending step with strict option should fail
85
+ Scenario: pending and undefined steps with strict option should fail
52
86
  When I run cucumber --format junit --out tmp/ features/pending.feature --strict
53
87
  Then it should fail with
54
88
  """
@@ -57,7 +91,7 @@ Feature: JUnit output formatter
57
91
  And "fixtures/junit/tmp/TEST-pending.xml" with junit duration "0.000160" should contain
58
92
  """
59
93
  <?xml version="1.0" encoding="UTF-8"?>
60
- <testsuite errors="0" failures="1" name="Pending step" tests="1" time="0.000160">
94
+ <testsuite errors="0" failures="2" name="Pending step" skipped="0" tests="2" time="0.000160">
61
95
  <testcase classname="Pending step.Pending" name="Pending" time="0.000160">
62
96
  <failure message="pending Pending" type="pending">
63
97
  <![CDATA[Scenario: Pending
@@ -67,6 +101,15 @@ Feature: JUnit output formatter
67
101
  features/pending.feature:4:in `Given a pending step']]>
68
102
  </failure>
69
103
  </testcase>
104
+ <testcase classname="Pending step.Undefined" name="Undefined" time="0.000160">
105
+ <failure message="undefined Undefined" type="undefined">
106
+ <![CDATA[Scenario: Undefined
107
+
108
+ ]]>
109
+ <![CDATA[Undefined step: "an undefined step" (Cucumber::Undefined)
110
+ features/pending.feature:7:in `Given an undefined step']]>
111
+ </failure>
112
+ </testcase>
70
113
  </testsuite>
71
114
 
72
115
  """
@@ -169,7 +169,9 @@ module Cucumber
169
169
  end
170
170
 
171
171
  def rows
172
- hashes.map(&:values)
172
+ hashes.map do |hash|
173
+ hash.values_at *headers
174
+ end
173
175
  end
174
176
 
175
177
  def each_cells_row(&proc) #:nodoc:
@@ -28,11 +28,13 @@ module Cucumber
28
28
 
29
29
  def format_string(string, status)
30
30
  fmt = format_for(status)
31
- if Proc === fmt
32
- fmt.call(string)
33
- else
34
- fmt % string
35
- end
31
+ string.split("\n").map do |line|
32
+ if Proc === fmt
33
+ fmt.call(line)
34
+ else
35
+ fmt % line
36
+ end
37
+ end.join("\n")
36
38
  end
37
39
 
38
40
  def print_steps(status)
@@ -21,7 +21,7 @@ module Cucumber
21
21
 
22
22
  def before_feature(feature)
23
23
  @current_feature = feature
24
- @failures = @errors = @tests = 0
24
+ @failures = @errors = @tests = @skipped = 0
25
25
  @builder = OrderedXmlMarkup.new( :indent => 2 )
26
26
  @time = 0
27
27
  end
@@ -32,6 +32,7 @@ module Cucumber
32
32
  @testsuite.testsuite(
33
33
  :failures => @failures,
34
34
  :errors => @errors,
35
+ :skipped => @skipped,
35
36
  :tests => @tests,
36
37
  :time => "%.6f" % @time,
37
38
  :name => @feature_name ) do
@@ -56,13 +57,8 @@ module Cucumber
56
57
  end
57
58
 
58
59
  def scenario_name(keyword, name, file_colon_line, source_indent)
59
- # TODO: What's all this ugly weird code doing? Why not just use keyword and name????
60
- scenario_name = name.strip.delete(".\r\n")
61
- scenario_name = "Unnamed scenario" if name == ""
62
- @scenario = scenario_name
63
- description = "Scenario"
64
- description << " outline" if keyword.include?('Scenario Outline')
65
- @output = "#{description}: #{@scenario}\n\n"
60
+ @scenario = (name.nil? || name == "") ? "Unnamed scenario" : name.split("\n")[0]
61
+ @output = "#{keyword}: #{@scenario}\n\n"
66
62
  end
67
63
 
68
64
  def before_steps(steps)
@@ -116,20 +112,23 @@ module Cucumber
116
112
  @time += duration
117
113
  classname = "#{@feature_name}.#{@scenario}"
118
114
  name = "#{@scenario}#{suffix}"
119
- failed = (status == :failed || (status == :pending && @options[:strict]))
120
- #puts "FAILED:!!#{failed}"
121
- if status == :passed || failed
122
- @builder.testcase(:classname => classname, :name => name, :time => "%.6f" % duration) do
123
- if failed
124
- @builder.failure(:message => "#{status.to_s} #{name}", :type => status.to_s) do
125
- @builder.cdata! @output
126
- @builder.cdata!(format_exception(exception)) if exception
127
- end
128
- @failures += 1
115
+ pending = [:pending, :undefined].include?(status)
116
+ passed = (status == :passed || (pending && !@options[:strict]))
117
+
118
+ @builder.testcase(:classname => classname, :name => name, :time => "%.6f" % duration) do
119
+ unless passed
120
+ @builder.failure(:message => "#{status.to_s} #{name}", :type => status.to_s) do
121
+ @builder.cdata! @output
122
+ @builder.cdata!(format_exception(exception)) if exception
129
123
  end
124
+ @failures += 1
125
+ end
126
+ if passed and (status == :skipped || pending)
127
+ @builder.skipped
128
+ @skipped += 1
130
129
  end
131
- @tests += 1
132
130
  end
131
+ @tests += 1
133
132
  end
134
133
 
135
134
  def format_exception(exception)
@@ -137,9 +136,12 @@ module Cucumber
137
136
  end
138
137
 
139
138
  def feature_result_filename(feature_file)
139
+ File.join(@reportdir, "TEST-#{basename(feature_file)}.xml")
140
+ end
141
+
142
+ def basename(feature_file)
140
143
  ext_length = File.extname(feature_file).length
141
- basename = File.basename(feature_file)[0...-ext_length]
142
- File.join(@reportdir, "TEST-#{basename}.xml")
144
+ feature_file.gsub('features/', '').gsub(File::SEPARATOR, '_')[0...-ext_length]
143
145
  end
144
146
 
145
147
  def write_file(feature_filename, data)
@@ -4,7 +4,7 @@ require 'rbconfig'
4
4
 
5
5
  module Cucumber
6
6
  unless defined?(Cucumber::VERSION)
7
- VERSION = '0.10.2'
7
+ VERSION = '0.10.3'
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)
@@ -52,45 +52,59 @@ module Cucumber
52
52
  end
53
53
 
54
54
  class ForkedCucumberRunner #:nodoc:
55
- attr_reader :args
56
55
 
57
- def initialize(libs, cucumber_bin, cucumber_opts, feature_files)
58
- @args = (
59
- ['-I'] + load_path(libs) +
60
- quoted_binary(cucumber_bin) +
61
- cucumber_opts +
62
- feature_files
63
- ).flatten
56
+ def initialize(libs, cucumber_bin, cucumber_opts, bundler, feature_files)
57
+ @libs = libs
58
+ @cucumber_bin = cucumber_bin
59
+ @cucumber_opts = cucumber_opts
60
+ @bundler = bundler
61
+ @feature_files = feature_files
64
62
  end
65
63
 
66
64
  def load_path(libs)
67
- ['"%s"' % libs.join(File::PATH_SEPARATOR)]
65
+ ['"%s"' % @libs.join(File::PATH_SEPARATOR)]
68
66
  end
69
67
 
70
68
  def quoted_binary(cucumber_bin)
71
69
  ['"%s"' % cucumber_bin]
72
70
  end
73
71
 
74
- def runner
75
- File.exist?("./Gemfile") && Gem.available?("bundler") ? ["bundle", "exec", RUBY] : [RUBY]
72
+ def use_bundler
73
+ @bundler.nil? ? File.exist?("./Gemfile") && Gem.available?("bundler") : @bundler
74
+ end
75
+
76
+ def cmd
77
+ if use_bundler
78
+ [ RUBY, '-S', 'bundle', 'exec', 'cucumber', @cucumber_opts,
79
+ @feature_files ].flatten
80
+ else
81
+ [ RUBY, '-I', load_path(@libs), quoted_binary(@cucumber_bin),
82
+ @cucumber_opts, @feature_files ].flatten
83
+ end
76
84
  end
77
85
 
78
86
  def run
79
- sh((runner + args).join(" "))
87
+ sh(cmd.join(" "))
80
88
  end
81
89
  end
82
90
 
83
91
  class RCovCucumberRunner < ForkedCucumberRunner #:nodoc:
84
- def initialize(libs, cucumber_bin, cucumber_opts, feature_files, rcov_opts)
85
- @args = (
86
- ['-I'] + load_path(libs) +
87
- ['-S', 'rcov'] + rcov_opts +
88
- quoted_binary(cucumber_bin) +
89
- ['--'] +
90
- cucumber_opts +
91
- feature_files
92
- ).flatten
92
+
93
+ def initialize(libs, cucumber_bin, cucumber_opts, bundler, feature_files, rcov_opts)
94
+ super( libs, cucumber_bin, cucumber_opts, bundler, feature_files )
95
+ @rcov_opts = rcov_opts
93
96
  end
97
+
98
+ def cmd
99
+ if use_bundler
100
+ [RUBY, '-S', 'bundle', 'exec', 'rcov', @rcov_opts,
101
+ quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
102
+ else
103
+ [RUBY, '-I', load_path(@libs), '-S', 'rcov', @rcov_opts,
104
+ quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
105
+ end
106
+ end
107
+
94
108
  end
95
109
 
96
110
  LIB = File.expand_path(File.dirname(__FILE__) + '/../..') #:nodoc:
@@ -128,6 +142,13 @@ module Cucumber
128
142
  # to it. Will be ignored when CUCUMBER_OPTS is used.
129
143
  attr_accessor :profile
130
144
 
145
+ # Whether or not to run with bundler (bundle exec). Setting this to false may speed
146
+ # up the execution. The default value is true if Bundler is installed and you have
147
+ # a Gemfile, false otherwise.
148
+ #
149
+ # Note that this attribute has no effect if you don't run in forked mode.
150
+ attr_accessor :bundler
151
+
131
152
  # Define Cucumber Rake task
132
153
  def initialize(task_name = "cucumber", desc = "Run Cucumber features")
133
154
  @task_name, @desc = task_name, desc
@@ -153,9 +174,9 @@ module Cucumber
153
174
  def runner(task_args = nil) #:nodoc:
154
175
  cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
155
176
  if(@rcov)
156
- RCovCucumberRunner.new(libs, binary, cucumber_opts, feature_files, rcov_opts)
177
+ RCovCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files, rcov_opts)
157
178
  elsif(@fork)
158
- ForkedCucumberRunner.new(libs, binary, cucumber_opts, feature_files)
179
+ ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
159
180
  else
160
181
  InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
161
182
  end
@@ -61,6 +61,10 @@ module Cucumber
61
61
  @table.rows.first.should_not include('4444')
62
62
  end
63
63
 
64
+ it "should return the row values in order" do
65
+ @table.rows.first.should == %w{4444 55555 666666}
66
+ end
67
+
64
68
  it "should pass silently if a mapped column does not exist in non-strict mode" do
65
69
  lambda {
66
70
  @table.map_column!('two', false) { |v| v.to_i }
@@ -51,6 +51,19 @@ module Cucumber::Formatter
51
51
 
52
52
  it { @doc.to_s.should =~ /One passing scenario, one failing scenario/ }
53
53
  end
54
+
55
+ describe "with a scenario in a subdirectory" do
56
+ define_feature %{
57
+ Feature: One passing scenario, one failing scenario
58
+
59
+ Scenario: Passing
60
+ Given a passing scenario
61
+ }, File.join('features', 'some', 'path', 'spec.feature')
62
+
63
+ it 'writes the filename including the subdirectory' do
64
+ @formatter.written_files.keys.first.should == File.join('', 'TEST-some_path_spec.xml')
65
+ end
66
+ end
54
67
 
55
68
  describe "with a scenario outline table" do
56
69
  define_steps do
@@ -2,10 +2,11 @@ module Cucumber
2
2
  module Formatter
3
3
 
4
4
  module SpecHelperDsl
5
- attr_reader :feature_content, :step_defs
5
+ attr_reader :feature_content, :step_defs, :feature_filename
6
6
 
7
- def define_feature(string)
7
+ def define_feature(string, feature_file = 'spec.feature')
8
8
  @feature_content = string
9
+ @feature_filename = feature_file
9
10
  end
10
11
 
11
12
  def define_steps(&block)
@@ -25,7 +26,7 @@ module Cucumber
25
26
  end
26
27
 
27
28
  def load_features(content)
28
- feature_file = FeatureFile.new('spec.feature', content)
29
+ feature_file = FeatureFile.new(self.class.feature_filename, content)
29
30
  features = Ast::Features.new
30
31
  filters = []
31
32
  feature = feature_file.parse(filters, {})
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'cucumber/rake/task'
3
+ require 'rake'
4
+
5
+ module Cucumber
6
+ module Rake
7
+
8
+ describe Task::ForkedCucumberRunner do
9
+
10
+ let(:libs) { ['lib'] }
11
+ let(:binary) { Cucumber::BINARY }
12
+ let(:cucumber_opts) { ['--cuke-option'] }
13
+ let(:feature_files) { ['./some.feature'] }
14
+
15
+ context "when running with bundler" do
16
+
17
+ let(:bundler) { true }
18
+
19
+ subject { Task::ForkedCucumberRunner.new(
20
+ libs, binary, cucumber_opts, bundler, feature_files) }
21
+
22
+ it "does use bundler if bundler is set to true" do
23
+ subject.use_bundler.should be_true
24
+ end
25
+
26
+ it "uses bundle exec to find cucumber and libraries" do
27
+ subject.cmd.should == [RUBY,
28
+ '-S',
29
+ 'bundle',
30
+ 'exec',
31
+ 'cucumber',
32
+ '--cuke-option'] + feature_files
33
+ end
34
+
35
+ end
36
+
37
+ context "when running without bundler" do
38
+
39
+ let(:bundler) { false }
40
+
41
+ subject { Task::ForkedCucumberRunner.new(
42
+ libs, binary, cucumber_opts, bundler, feature_files) }
43
+
44
+ it "does not use bundler if bundler is set to false" do
45
+ subject.use_bundler.should be_false
46
+ end
47
+
48
+ it "uses well known cucumber location and specified libraries" do
49
+ subject.cmd.should == [RUBY,
50
+ "-I",
51
+ "\"lib\"",
52
+ "\"#{Cucumber::BINARY }\"",
53
+ "--cuke-option"] + feature_files
54
+ end
55
+
56
+ end
57
+
58
+
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,71 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'cucumber/rake/task'
3
+ require 'rake'
4
+
5
+ module Cucumber
6
+ module Rake
7
+
8
+ describe Task::RCovCucumberRunner do
9
+
10
+ let(:libs) { ['lib'] }
11
+ let(:binary) { Cucumber::BINARY }
12
+ let(:cucumber_opts) { ['--cuke-option'] }
13
+ let(:feature_files) { [] }
14
+ let(:rcov_opts) { ['--rcov-option'] }
15
+
16
+
17
+ context "when running with bundler" do
18
+
19
+ let(:bundler) { true }
20
+
21
+ subject { Task::RCovCucumberRunner.new(
22
+ libs, binary, cucumber_opts, bundler, feature_files, rcov_opts) }
23
+
24
+ it "does use bundler if bundler is set to true" do
25
+ subject.use_bundler.should be_true
26
+ end
27
+
28
+ it "uses bundle exec to find cucumber and libraries" do
29
+ subject.cmd.should == [RUBY,
30
+ '-S',
31
+ 'bundle',
32
+ 'exec',
33
+ 'rcov',
34
+ '--rcov-option',
35
+ "\"#{Cucumber::BINARY }\"",
36
+ '--',
37
+ '--cuke-option'] + feature_files
38
+ end
39
+
40
+ end
41
+
42
+ context "when running without bundler" do
43
+
44
+ let(:bundler) { false }
45
+
46
+ subject { Task::RCovCucumberRunner.new(
47
+ libs, binary, cucumber_opts, bundler, feature_files, rcov_opts) }
48
+
49
+ it "does not use bundler if bundler is set to false" do
50
+ subject.use_bundler.should be_false
51
+ end
52
+
53
+ it "uses well known cucumber location and specified libraries" do
54
+ subject.cmd.should == [RUBY,
55
+ '-I',
56
+ '"lib"',
57
+ '-S',
58
+ 'rcov',
59
+ '--rcov-option',
60
+ "\"#{Cucumber::BINARY }\"",
61
+ '--',
62
+ '--cuke-option'] + feature_files
63
+ end
64
+
65
+ end
66
+
67
+
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'cucumber/rake/task'
3
+ require 'rake'
4
+
5
+ module Cucumber
6
+ module Rake
7
+
8
+ describe Task do
9
+
10
+ context "when running rcov" do
11
+ let(:task) { Task.new { |t| t.rcov = true } }
12
+
13
+ it "correctly builds an RCovCucumberRunner" do
14
+ runner = task.runner
15
+ runner.should be_a(Task::RCovCucumberRunner)
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ end
22
+ end
@@ -8,3 +8,4 @@ Bundler.setup
8
8
 
9
9
  require 'cucumber'
10
10
  $KCODE='u' unless Cucumber::RUBY_1_9
11
+ Term::ANSIColor.coloring = true
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cucumber
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.10.2
5
+ version: 0.10.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Aslak Helles\xC3\xB8y"
@@ -10,22 +10,23 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-21 00:00:00 +00:00
14
- default_executable: cucumber
13
+ date: 2011-05-23 00:00:00 +01:00
14
+ default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: gherkin
18
+ prerelease: false
18
19
  requirement: &id001 !ruby/object:Gem::Requirement
19
20
  none: false
20
21
  requirements:
21
22
  - - ">="
22
23
  - !ruby/object:Gem::Version
23
- version: 2.3.5
24
+ version: 2.3.8
24
25
  type: :runtime
25
- prerelease: false
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: term-ansicolor
29
+ prerelease: false
29
30
  requirement: &id002 !ruby/object:Gem::Requirement
30
31
  none: false
31
32
  requirements:
@@ -33,10 +34,10 @@ dependencies:
33
34
  - !ruby/object:Gem::Version
34
35
  version: 1.0.5
35
36
  type: :runtime
36
- prerelease: false
37
37
  version_requirements: *id002
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: builder
40
+ prerelease: false
40
41
  requirement: &id003 !ruby/object:Gem::Requirement
41
42
  none: false
42
43
  requirements:
@@ -44,10 +45,10 @@ dependencies:
44
45
  - !ruby/object:Gem::Version
45
46
  version: 2.1.2
46
47
  type: :runtime
47
- prerelease: false
48
48
  version_requirements: *id003
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: diff-lcs
51
+ prerelease: false
51
52
  requirement: &id004 !ruby/object:Gem::Requirement
52
53
  none: false
53
54
  requirements:
@@ -55,10 +56,10 @@ dependencies:
55
56
  - !ruby/object:Gem::Version
56
57
  version: 1.1.2
57
58
  type: :runtime
58
- prerelease: false
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: json
62
+ prerelease: false
62
63
  requirement: &id005 !ruby/object:Gem::Requirement
63
64
  none: false
64
65
  requirements:
@@ -66,21 +67,21 @@ dependencies:
66
67
  - !ruby/object:Gem::Version
67
68
  version: 1.4.6
68
69
  type: :runtime
69
- prerelease: false
70
70
  version_requirements: *id005
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: aruba
73
+ prerelease: false
73
74
  requirement: &id006 !ruby/object:Gem::Requirement
74
75
  none: false
75
76
  requirements:
76
77
  - - ">="
77
78
  - !ruby/object:Gem::Version
78
- version: 0.3.4
79
+ version: 0.3.6
79
80
  type: :development
80
- prerelease: false
81
81
  version_requirements: *id006
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: rake
84
+ prerelease: false
84
85
  requirement: &id007 !ruby/object:Gem::Requirement
85
86
  none: false
86
87
  requirements:
@@ -88,21 +89,21 @@ dependencies:
88
89
  - !ruby/object:Gem::Version
89
90
  version: 0.8.7
90
91
  type: :development
91
- prerelease: false
92
92
  version_requirements: *id007
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: rspec
95
+ prerelease: false
95
96
  requirement: &id008 !ruby/object:Gem::Requirement
96
97
  none: false
97
98
  requirements:
98
99
  - - ">="
99
100
  - !ruby/object:Gem::Version
100
- version: 2.5.0
101
+ version: 2.6.0
101
102
  type: :development
102
- prerelease: false
103
103
  version_requirements: *id008
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: nokogiri
106
+ prerelease: false
106
107
  requirement: &id009 !ruby/object:Gem::Requirement
107
108
  none: false
108
109
  requirements:
@@ -110,10 +111,10 @@ dependencies:
110
111
  - !ruby/object:Gem::Version
111
112
  version: 1.4.4
112
113
  type: :development
113
- prerelease: false
114
114
  version_requirements: *id009
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: prawn
117
+ prerelease: false
117
118
  requirement: &id010 !ruby/object:Gem::Requirement
118
119
  none: false
119
120
  requirements:
@@ -121,10 +122,10 @@ dependencies:
121
122
  - !ruby/object:Gem::Version
122
123
  version: 0.8.4
123
124
  type: :development
124
- prerelease: false
125
125
  version_requirements: *id010
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: prawn-layout
128
+ prerelease: false
128
129
  requirement: &id011 !ruby/object:Gem::Requirement
129
130
  none: false
130
131
  requirements:
@@ -132,10 +133,10 @@ dependencies:
132
133
  - !ruby/object:Gem::Version
133
134
  version: 0.8.4
134
135
  type: :development
135
- prerelease: false
136
136
  version_requirements: *id011
137
137
  - !ruby/object:Gem::Dependency
138
138
  name: syntax
139
+ prerelease: false
139
140
  requirement: &id012 !ruby/object:Gem::Requirement
140
141
  none: false
141
142
  requirements:
@@ -143,10 +144,10 @@ dependencies:
143
144
  - !ruby/object:Gem::Version
144
145
  version: 1.0.0
145
146
  type: :development
146
- prerelease: false
147
147
  version_requirements: *id012
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: spork
150
+ prerelease: false
150
151
  requirement: &id013 !ruby/object:Gem::Requirement
151
152
  none: false
152
153
  requirements:
@@ -154,10 +155,10 @@ dependencies:
154
155
  - !ruby/object:Gem::Version
155
156
  version: 0.8.4
156
157
  type: :development
157
- prerelease: false
158
158
  version_requirements: *id013
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: simplecov
161
+ prerelease: false
161
162
  requirement: &id014 !ruby/object:Gem::Requirement
162
163
  none: false
163
164
  requirements:
@@ -165,10 +166,10 @@ dependencies:
165
166
  - !ruby/object:Gem::Version
166
167
  version: 0.4.1
167
168
  type: :development
168
- prerelease: false
169
169
  version_requirements: *id014
170
170
  - !ruby/object:Gem::Dependency
171
171
  name: ramaze
172
+ prerelease: false
172
173
  requirement: &id015 !ruby/object:Gem::Requirement
173
174
  none: false
174
175
  requirements:
@@ -176,10 +177,10 @@ dependencies:
176
177
  - !ruby/object:Gem::Version
177
178
  version: "0"
178
179
  type: :development
179
- prerelease: false
180
180
  version_requirements: *id015
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rack-test
183
+ prerelease: false
183
184
  requirement: &id016 !ruby/object:Gem::Requirement
184
185
  none: false
185
186
  requirements:
@@ -187,10 +188,10 @@ dependencies:
187
188
  - !ruby/object:Gem::Version
188
189
  version: 0.5.7
189
190
  type: :development
190
- prerelease: false
191
191
  version_requirements: *id016
192
192
  - !ruby/object:Gem::Dependency
193
193
  name: webrat
194
+ prerelease: false
194
195
  requirement: &id017 !ruby/object:Gem::Requirement
195
196
  none: false
196
197
  requirements:
@@ -198,10 +199,10 @@ dependencies:
198
199
  - !ruby/object:Gem::Version
199
200
  version: 0.7.3
200
201
  type: :development
201
- prerelease: false
202
202
  version_requirements: *id017
203
203
  - !ruby/object:Gem::Dependency
204
204
  name: sinatra
205
+ prerelease: false
205
206
  requirement: &id018 !ruby/object:Gem::Requirement
206
207
  none: false
207
208
  requirements:
@@ -209,18 +210,17 @@ dependencies:
209
210
  - !ruby/object:Gem::Version
210
211
  version: 1.2.0
211
212
  type: :development
212
- prerelease: false
213
213
  version_requirements: *id018
214
214
  - !ruby/object:Gem::Dependency
215
215
  name: capybara
216
+ prerelease: false
216
217
  requirement: &id019 !ruby/object:Gem::Requirement
217
218
  none: false
218
219
  requirements:
219
220
  - - ">="
220
221
  - !ruby/object:Gem::Version
221
- version: 0.4.1
222
+ version: 1.0.0.beta1
222
223
  type: :development
223
- prerelease: false
224
224
  version_requirements: *id019
225
225
  description: Behaviour Driven Development with elegance and joy
226
226
  email: cukes@googlegroups.com
@@ -237,6 +237,7 @@ files:
237
237
  - .gitignore
238
238
  - .rspec
239
239
  - .rvmrc
240
+ - .travis.yml
240
241
  - Gemfile
241
242
  - History.txt
242
243
  - LICENSE
@@ -512,6 +513,7 @@ files:
512
513
  - fixtures/json/features/tables.feature
513
514
  - fixtures/junit/features/one_passing_one_failing.feature
514
515
  - fixtures/junit/features/pending.feature
516
+ - fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature
515
517
  - fixtures/junit/features/step_definitions/steps.rb
516
518
  - fixtures/self_test/.gitignore
517
519
  - fixtures/self_test/README.textile
@@ -571,6 +573,7 @@ files:
571
573
  - fixtures/tickets/features/tickets.feature
572
574
  - gem_tasks/contributors.rake
573
575
  - gem_tasks/cucumber.rake
576
+ - gem_tasks/downloads.rb
574
577
  - gem_tasks/environment.rake
575
578
  - gem_tasks/examples.rake
576
579
  - gem_tasks/fix_cr_lf.rake
@@ -578,6 +581,7 @@ files:
578
581
  - gem_tasks/rspec.rake
579
582
  - gem_tasks/sass.rake
580
583
  - gem_tasks/sdoc.rake
584
+ - gem_tasks/versions.txt
581
585
  - legacy_features/announce.feature
582
586
  - legacy_features/api/list_step_defs_as_json.feature
583
587
  - legacy_features/api/run_cli_main_with_existing_runtime.feature
@@ -761,6 +765,9 @@ files:
761
765
  - spec/cucumber/formatter/junit_spec.rb
762
766
  - spec/cucumber/formatter/progress_spec.rb
763
767
  - spec/cucumber/formatter/spec_helper.rb
768
+ - spec/cucumber/rake/forked_spec.rb
769
+ - spec/cucumber/rake/rcov_spec.rb
770
+ - spec/cucumber/rake/task_spec.rb
764
771
  - spec/cucumber/rb_support/rb_language_spec.rb
765
772
  - spec/cucumber/rb_support/rb_step_definition_spec.rb
766
773
  - spec/cucumber/rb_support/rb_transform_spec.rb
@@ -783,7 +790,7 @@ licenses: []
783
790
 
784
791
  post_install_message: "\n\
785
792
  (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n\
786
- Thank you for installing cucumber-0.10.2.\n\
793
+ Thank you for installing cucumber-0.10.3.\n\
787
794
  Please be sure to read http://wiki.github.com/aslakhellesoy/cucumber/upgrading\n\
788
795
  for important information about this release. Happy cuking!\n\n\
789
796
  (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n"
@@ -796,18 +803,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
796
803
  requirements:
797
804
  - - ">="
798
805
  - !ruby/object:Gem::Version
799
- hash: -4431173531369610521
800
- segments:
801
- - 0
802
806
  version: "0"
803
807
  required_rubygems_version: !ruby/object:Gem::Requirement
804
808
  none: false
805
809
  requirements:
806
810
  - - ">="
807
811
  - !ruby/object:Gem::Version
808
- hash: -4431173531369610521
809
- segments:
810
- - 0
811
812
  version: "0"
812
813
  requirements: []
813
814
 
@@ -815,7 +816,7 @@ rubyforge_project:
815
816
  rubygems_version: 1.6.2
816
817
  signing_key:
817
818
  specification_version: 3
818
- summary: cucumber-0.10.2
819
+ summary: cucumber-0.10.3
819
820
  test_files:
820
821
  - features/background.feature
821
822
  - features/bootstrap.feature
@@ -854,6 +855,9 @@ test_files:
854
855
  - spec/cucumber/formatter/junit_spec.rb
855
856
  - spec/cucumber/formatter/progress_spec.rb
856
857
  - spec/cucumber/formatter/spec_helper.rb
858
+ - spec/cucumber/rake/forked_spec.rb
859
+ - spec/cucumber/rake/rcov_spec.rb
860
+ - spec/cucumber/rake/task_spec.rb
857
861
  - spec/cucumber/rb_support/rb_language_spec.rb
858
862
  - spec/cucumber/rb_support/rb_step_definition_spec.rb
859
863
  - spec/cucumber/rb_support/rb_transform_spec.rb