cucumber 0.10.2 → 0.10.3

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.
@@ -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