rspec-core 2.0.0.rc → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/History.markdown +11 -0
- data/README.markdown +1 -1
- data/Rakefile +35 -26
- data/Upgrade.markdown +54 -2
- data/features/README.markdown +15 -8
- data/features/command_line/configure.feature +2 -1
- data/features/configuration/read_options_from_file.feature +6 -0
- data/features/hooks/before_and_after_hooks.feature +23 -0
- data/features/{hooks → metadata}/described_class.feature +0 -0
- data/lib/autotest/rspec2.rb +10 -7
- data/lib/rspec/core/command_line.rb +3 -25
- data/lib/rspec/core/configuration.rb +26 -11
- data/lib/rspec/core/example.rb +1 -7
- data/lib/rspec/core/example_group.rb +17 -2
- data/lib/rspec/core/hooks.rb +20 -7
- data/lib/rspec/core/option_parser.rb +5 -1
- data/lib/rspec/core/rake_task.rb +23 -9
- data/lib/rspec/core/version.rb +1 -1
- data/spec/autotest/failed_results_re_spec.rb +5 -6
- data/spec/autotest/rspec_spec.rb +18 -27
- data/spec/rspec/core/command_line_spec.rb +13 -3
- data/spec/rspec/core/configuration_spec.rb +74 -6
- data/spec/rspec/core/example_group_spec.rb +26 -0
- data/spec/rspec/core/example_spec.rb +0 -12
- data/spec/rspec/core/hooks_filtering_spec.rb +20 -0
- data/spec/rspec/core/option_parser_spec.rb +7 -3
- data/spec/rspec/core/rake_task_spec.rb +24 -3
- data/spec/spec_helper.rb +17 -17
- data/specs.watchr +1 -2
- metadata +38 -52
data/Gemfile
CHANGED
@@ -14,7 +14,9 @@ gem "syntax"
|
|
14
14
|
gem "rspec-core", :path => "."
|
15
15
|
gem "rspec-expectations", :path => "../rspec-expectations"
|
16
16
|
gem "rspec-mocks", :path => "../rspec-mocks"
|
17
|
+
gem "relish"
|
17
18
|
unless RUBY_PLATFORM == "java"
|
19
|
+
gem "ruby-prof"
|
18
20
|
case RUBY_VERSION
|
19
21
|
when /^1.9.2/
|
20
22
|
gem "ruby-debug19"
|
data/History.markdown
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
## rspec-core release history (incomplete)
|
2
2
|
|
3
|
+
### 2.0.0 / 2010-10-10
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-core/compare/v2.0.0.rc...v2.0.0)
|
6
|
+
|
7
|
+
* RSpec-1 compatibility
|
8
|
+
* Rake task uses ENV["SPEC"] as file list if present
|
9
|
+
|
10
|
+
* Bug fixes
|
11
|
+
* Bug Fix: optparse --out foo.txt (Leonardo Bessa)
|
12
|
+
* Suppress color codes for non-tty output (except autotest)
|
13
|
+
|
3
14
|
### 2.0.0.rc / 2010-10-05
|
4
15
|
|
5
16
|
[full changelog](http://github.com/rspec/rspec-core/compare/v2.0.0.beta.22...v2.0.0.rc)
|
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -10,48 +10,57 @@ require "rspec/core/rake_task"
|
|
10
10
|
require "rspec/core/version"
|
11
11
|
require "cucumber/rake/task"
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
t.rcov_opts << %[--no-html --aggregate coverage.data]
|
13
|
+
class Cucumber::Rake::Task::ForkedCucumberRunner
|
14
|
+
# When cucumber shells out, we still need it to run in the context of our
|
15
|
+
# bundle.
|
16
|
+
def run
|
17
|
+
sh "bundle exec #{RUBY} " + args.join(" ")
|
18
|
+
end
|
20
19
|
end
|
21
20
|
|
22
21
|
task :cleanup_rcov_files do
|
23
22
|
rm_rf 'coverage.data'
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
desc "Run all examples"
|
26
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
27
|
+
t.rspec_path = 'bin/rspec'
|
28
|
+
t.rspec_opts = %w[--color]
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
Cucumber::Rake::Task.new(:cucumber)
|
32
|
+
|
33
|
+
namespace :spec do
|
34
|
+
desc "Run all examples using rcov"
|
35
|
+
RSpec::Core::RakeTask.new :rcov => :cleanup_rcov_files do |t|
|
36
|
+
t.rcov = true
|
37
|
+
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
|
38
|
+
t.rcov_opts << %[--text-report --sort coverage --no-html --aggregate coverage.data]
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
+
namespace :cucumber do
|
43
|
+
desc "Run cucumber features using rcov"
|
44
|
+
Cucumber::Rake::Task.new :rcov => :cleanup_rcov_files do |t|
|
42
45
|
t.cucumber_opts = %w{--format progress}
|
43
|
-
end
|
44
|
-
|
45
|
-
task :default => [:spec, :cucumber]
|
46
|
-
else
|
47
|
-
Cucumber::Rake::Task.new(:cucumber) do |t|
|
48
46
|
t.rcov = true
|
49
|
-
t.rcov_opts = %[-Ilib -Ispec --exclude "
|
47
|
+
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
|
50
48
|
t.rcov_opts << %[--text-report --sort coverage --aggregate coverage.data]
|
51
|
-
t.cucumber_opts = %w{--format progress}
|
52
49
|
end
|
50
|
+
end
|
51
|
+
|
52
|
+
task :default => [:spec, :cucumber]
|
53
|
+
|
54
|
+
task :clobber do
|
55
|
+
rm_rf 'pkg'
|
56
|
+
rm_rf 'tmp'
|
57
|
+
rm_rf 'coverage'
|
58
|
+
end
|
53
59
|
|
54
|
-
|
60
|
+
desc "Push cukes to relishapp using the relish-client-gem"
|
61
|
+
task :relish, :version do |t, args|
|
62
|
+
raise "rake relish[VERSION]" unless args[:version]
|
63
|
+
sh "bundle exec relish --organization rspec --project rspec-core -v #{args[:version]} push"
|
55
64
|
end
|
56
65
|
|
57
66
|
Rake::RDocTask.new do |rdoc|
|
data/Upgrade.markdown
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Upgrade to rspec-core-2.0
|
2
2
|
|
3
|
-
## What's changed since
|
3
|
+
## What's changed since RSpec-1
|
4
4
|
|
5
5
|
### rspec command
|
6
6
|
|
@@ -8,6 +8,27 @@ The command to run specs is now `rspec` instead of `spec`.
|
|
8
8
|
|
9
9
|
rspec ./spec
|
10
10
|
|
11
|
+
#### Co-habitation of rspec-1 and rspec-2
|
12
|
+
|
13
|
+
Early beta versions of RSpec-2 included a `spec` command, which conflicted with
|
14
|
+
the RSpec-1 `spec` command because RSpec-1's was installed by the rspec gem,
|
15
|
+
while RSpec-2's is installed by the rspec-core gem.
|
16
|
+
|
17
|
+
If you installed one of these early versions, the safest bet is to uninstall
|
18
|
+
rspec-1 and rspec-core-2, and then reinstall both. After you do this, you will
|
19
|
+
be able to run rspec-2 like this:
|
20
|
+
|
21
|
+
`rspec ./spec`
|
22
|
+
|
23
|
+
... and rspec-1 like this:
|
24
|
+
|
25
|
+
`spec _1.3.1_ ./spec`
|
26
|
+
|
27
|
+
Rubygems inspects the first argument to any gem executable to see if it's
|
28
|
+
formatted like a version number surrounded by underscores. If so, it uses that
|
29
|
+
version (e.g. `1.3.1`). If not, it uses the most recent version (e.g.
|
30
|
+
`2.0.0`).
|
31
|
+
|
11
32
|
### rake task
|
12
33
|
|
13
34
|
The RSpec rake task has moved to:
|
@@ -43,7 +64,7 @@ Or, if you're using bundler:
|
|
43
64
|
|
44
65
|
The `autospec` command is a thing of the past.
|
45
66
|
|
46
|
-
### RSpec
|
67
|
+
### RSpec is the new Spec
|
47
68
|
|
48
69
|
The root namespace (top level module) is now `RSpec` instead of `Spec`, and
|
49
70
|
the root directory under `lib` within all of the `rspec` gems is `rspec` instead of `spec`.
|
@@ -66,6 +87,37 @@ options. Precedence is:
|
|
66
87
|
./.rspec
|
67
88
|
~/.rspec
|
68
89
|
|
90
|
+
### Bones
|
91
|
+
|
92
|
+
Bones produces a handy little Rakefile to provide several services including
|
93
|
+
running specs. The current version (3.4.7) still assumes RSpec-1. To bring its
|
94
|
+
Rakefile into conformance with RSpec-2 a few changes are necessary.
|
95
|
+
|
96
|
+
1. The require line has changed to `require 'spec/rake/spectask'`
|
97
|
+
|
98
|
+
2. The `spec_opts` accessor has been deprecated in favor of `rspec_opts`. Also,
|
99
|
+
the `rspec` command no longer supports the `--options` command line option
|
100
|
+
so the options must be embedded directly in the Rakefile, or stored in the
|
101
|
+
`.rspec` files mentioned above.
|
102
|
+
|
103
|
+
3. The `spec_files` accessor has been replaced by `pattern`.
|
104
|
+
|
105
|
+
Here is a complete example:
|
106
|
+
|
107
|
+
# rspec-1
|
108
|
+
Spec::Rake::SpecTask.new do |t|
|
109
|
+
t.spec_opts = ['--options', "\"spec/spec.opts\""]
|
110
|
+
t.spec_files = FileList['spec/**/*.rb']
|
111
|
+
end
|
112
|
+
|
113
|
+
becomes:
|
114
|
+
|
115
|
+
# rspec-2
|
116
|
+
RSpec::Core::RakeTask.new do |t|
|
117
|
+
t.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
|
118
|
+
t.pattern = 'spec/**/*_spec.rb'
|
119
|
+
end
|
120
|
+
|
69
121
|
### `context` is no longer a top-level method
|
70
122
|
|
71
123
|
We removed `context` from the main object because it was creating conflicts with
|
data/features/README.markdown
CHANGED
@@ -1,12 +1,19 @@
|
|
1
|
-
|
1
|
+
rspec-core provides the structure for RSpec code examples:
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
describe Account do
|
4
|
+
it "has a balance of zero when first opened" do
|
5
|
+
# example code goes here - for more on the
|
6
|
+
# code inside the examples, see rspec-expectations
|
7
|
+
# and rspec-mocks
|
8
|
+
end
|
9
|
+
end
|
8
10
|
|
9
11
|
## Issues
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
+
The documentation for rspec-core is a work in progress. We'll be adding
|
14
|
+
Cucumber features over time, and clarifying existing ones. If you have
|
15
|
+
specific features you'd like to see added, find the existing documentation
|
16
|
+
incomplete or confusing, or, better yet, wish to write a missing Cucumber
|
17
|
+
feature yourself, please [submit an
|
18
|
+
issue](http://github.com/rspec/rspec-core/issues) or a [pull
|
19
|
+
request](http://github.com/rspec/rspec-core).
|
@@ -1,6 +1,7 @@
|
|
1
1
|
Feature: configure
|
2
2
|
|
3
|
-
Use --configure to generate configuration
|
3
|
+
Use the --configure option on the command line to generate configuration
|
4
|
+
files.
|
4
5
|
|
5
6
|
The only supported argument, so far, is "autotest", which creates an
|
6
7
|
autotest/discover.rb file in your project root directory.
|
@@ -18,6 +18,12 @@ Feature: read command line configuration options from files
|
|
18
18
|
"""
|
19
19
|
describe "color_enabled" do
|
20
20
|
context "when set with RSpec.configure" do
|
21
|
+
before do
|
22
|
+
# color is disabled for non-tty output, so stub the output stream
|
23
|
+
# to say it is tty, even though we're running this with cucumber
|
24
|
+
RSpec.configuration.output_stream.stub(:tty?) { true }
|
25
|
+
end
|
26
|
+
|
21
27
|
it "is true" do
|
22
28
|
RSpec.configuration.should be_color_enabled
|
23
29
|
end
|
@@ -155,6 +155,29 @@ Feature: before and after hooks
|
|
155
155
|
after all ran
|
156
156
|
"""
|
157
157
|
|
158
|
+
Scenario: failure in after(:all) block
|
159
|
+
Given a file named "after_all_spec.rb" with:
|
160
|
+
"""
|
161
|
+
describe "an error in after(:all)" do
|
162
|
+
after(:all) do
|
163
|
+
raise StandardError.new("Boom!")
|
164
|
+
end
|
165
|
+
|
166
|
+
it "passes this example" do
|
167
|
+
end
|
168
|
+
|
169
|
+
it "passes this example, too" do
|
170
|
+
end
|
171
|
+
end
|
172
|
+
"""
|
173
|
+
When I run "rspec after_all_spec.rb"
|
174
|
+
Then the output should contain "2 examples, 0 failures"
|
175
|
+
And the output should contain:
|
176
|
+
"""
|
177
|
+
An error occurred in an after(:all) hook.
|
178
|
+
StandardError: Boom!
|
179
|
+
"""
|
180
|
+
|
158
181
|
Scenario: define before and after blocks in configuration
|
159
182
|
Given a file named "befores_in_configuration_spec.rb" with:
|
160
183
|
"""
|
File without changes
|
data/lib/autotest/rspec2.rb
CHANGED
@@ -10,7 +10,10 @@ class Autotest::Rspec2 < Autotest
|
|
10
10
|
super
|
11
11
|
clear_mappings
|
12
12
|
setup_rspec_project_mappings
|
13
|
-
|
13
|
+
|
14
|
+
# Example for Ruby 1.8: http://rubular.com/r/AOXNVDrZpx
|
15
|
+
# Example for Ruby 1.9: http://rubular.com/r/85ag5AZ2jP
|
16
|
+
self.failed_results_re = /^\s*\d+\).*\n\s+Failure.*(\n\s+#\s(.*)?:\d+(?::.*)?)+$/m
|
14
17
|
self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
|
15
18
|
end
|
16
19
|
|
@@ -38,11 +41,15 @@ class Autotest::Rspec2 < Autotest
|
|
38
41
|
|
39
42
|
def make_test_cmd(files_to_test)
|
40
43
|
files_to_test.empty? ? '' :
|
41
|
-
"#{ruby} #{require_rubygems}#{SPEC_PROGRAM} #{normalize(files_to_test).keys.flatten.map { |f| "'#{f}'"}.join(' ')}"
|
44
|
+
"#{bundle_exec}#{ruby} #{require_rubygems}-S #{SPEC_PROGRAM} --autotest #{normalize(files_to_test).keys.flatten.map { |f| "'#{f}'"}.join(' ')}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def bundle_exec
|
48
|
+
using_bundler? ? "bundle exec " : ""
|
42
49
|
end
|
43
50
|
|
44
51
|
def require_rubygems
|
45
|
-
using_bundler? ? "" : defined?(:Gem) ? "-rrubygems " : ""
|
52
|
+
using_bundler? ? "" : defined?(:Gem) ? "-rrubygems " : " "
|
46
53
|
end
|
47
54
|
|
48
55
|
def normalize(files_to_test)
|
@@ -52,10 +59,6 @@ class Autotest::Rspec2 < Autotest
|
|
52
59
|
end
|
53
60
|
end
|
54
61
|
|
55
|
-
def ruby
|
56
|
-
using_bundler? ? "bundle exec" : super
|
57
|
-
end
|
58
|
-
|
59
62
|
def using_bundler?
|
60
63
|
File.exists?('./Gemfile')
|
61
64
|
end
|
@@ -12,44 +12,22 @@ module RSpec
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def run(err, out)
|
15
|
-
@options.configure(@configuration)
|
16
15
|
@configuration.error_stream = err
|
17
16
|
@configuration.output_stream ||= out
|
17
|
+
@options.configure(@configuration)
|
18
18
|
@configuration.load_spec_files
|
19
19
|
@configuration.configure_mock_framework
|
20
20
|
@world.announce_inclusion_filter
|
21
21
|
@world.announce_exclusion_filter
|
22
22
|
|
23
|
-
@configuration.reporter.report(example_count) do |reporter|
|
23
|
+
@configuration.reporter.report(@world.example_count) do |reporter|
|
24
24
|
begin
|
25
25
|
@configuration.run_hook(:before, :suite)
|
26
|
-
example_groups.
|
26
|
+
@world.example_groups.map {|g| g.run(reporter)}.all?
|
27
27
|
ensure
|
28
28
|
@configuration.run_hook(:after, :suite)
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
example_groups.success?
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def example_count
|
38
|
-
@world.example_count
|
39
|
-
end
|
40
|
-
|
41
|
-
module ExampleGroups
|
42
|
-
def run_examples(reporter)
|
43
|
-
@success = self.inject(true) {|success, group| success &= group.run(reporter)}
|
44
|
-
end
|
45
|
-
|
46
|
-
def success?
|
47
|
-
@success ||= false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def example_groups
|
52
|
-
@world.example_groups.extend(ExampleGroups)
|
53
31
|
end
|
54
32
|
end
|
55
33
|
end
|
@@ -23,7 +23,6 @@ module RSpec
|
|
23
23
|
add_setting :out, :alias => :output_stream
|
24
24
|
add_setting :drb
|
25
25
|
add_setting :drb_port
|
26
|
-
add_setting :color_enabled
|
27
26
|
add_setting :profile_examples
|
28
27
|
add_setting :fail_fast, :default => false
|
29
28
|
add_setting :run_all_when_everything_filtered
|
@@ -34,16 +33,17 @@ module RSpec
|
|
34
33
|
add_setting :files_to_run
|
35
34
|
add_setting :include_or_extend_modules
|
36
35
|
add_setting :backtrace_clean_patterns
|
36
|
+
add_setting :autotest
|
37
37
|
|
38
38
|
def initialize
|
39
|
+
@color_enabled = false
|
39
40
|
self.include_or_extend_modules = []
|
40
41
|
self.files_to_run = []
|
41
42
|
self.backtrace_clean_patterns = [
|
42
43
|
/\/lib\d*\/ruby\//,
|
43
|
-
/bin
|
44
|
-
/
|
45
|
-
/
|
46
|
-
/bin\/spec/,
|
44
|
+
/bin\//,
|
45
|
+
/gems/,
|
46
|
+
/spec\/spec_helper\.rb/,
|
47
47
|
/lib\/rspec\/(core|expectations|matchers|mocks)/
|
48
48
|
]
|
49
49
|
end
|
@@ -129,20 +129,27 @@ module RSpec
|
|
129
129
|
settings[:backtrace_clean_patterns] = []
|
130
130
|
end
|
131
131
|
|
132
|
-
|
132
|
+
def color_enabled
|
133
|
+
@color_enabled && (output_to_tty? || autotest?)
|
134
|
+
end
|
135
|
+
|
136
|
+
def color_enabled?
|
137
|
+
!!color_enabled
|
138
|
+
end
|
133
139
|
|
134
140
|
def color_enabled=(bool)
|
135
141
|
return unless bool
|
136
|
-
|
142
|
+
@color_enabled = true
|
137
143
|
if bool && ::RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
138
|
-
|
144
|
+
using_stdout = settings[:output_stream] == $stdout
|
145
|
+
using_stderr = settings[:error_stream] == $stderr
|
139
146
|
begin
|
140
147
|
require 'Win32/Console/ANSI'
|
148
|
+
settings[:output_stream] = $stdout if using_stdout
|
149
|
+
settings[:error_stream] = $stderr if using_stderr
|
141
150
|
rescue LoadError
|
142
151
|
warn "You must 'gem install win32console' to use colour on Windows"
|
143
|
-
|
144
|
-
ensure
|
145
|
-
settings[:output_stream] = orig_output_stream
|
152
|
+
@color_enabled = false
|
146
153
|
end
|
147
154
|
end
|
148
155
|
end
|
@@ -301,6 +308,14 @@ EOM
|
|
301
308
|
|
302
309
|
private
|
303
310
|
|
311
|
+
def output_to_tty?
|
312
|
+
begin
|
313
|
+
settings[:output_stream].tty?
|
314
|
+
rescue NoMethodError
|
315
|
+
false
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
304
319
|
def built_in_formatter(key)
|
305
320
|
case key.to_s
|
306
321
|
when 'd', 'doc', 'documentation', 's', 'n', 'spec', 'nested'
|