rspec-core 2.0.0.beta.12 → 2.0.0.beta.13
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.
- data/.gitignore +1 -0
- data/Gemfile +14 -0
- data/Rakefile +15 -12
- data/VERSION +1 -1
- data/features/command_line/example_name_option.feature +17 -3
- data/features/command_line/exit_status.feature +49 -0
- data/features/hooks/before_and_after_hooks.feature +51 -19
- data/features/hooks/halt.feature +1 -1
- data/features/support/env.rb +5 -3
- data/lib/rspec/core/command_line.rb +14 -5
- data/lib/rspec/core/configuration.rb +14 -24
- data/lib/rspec/core/configuration_options.rb +13 -8
- data/lib/rspec/core/drb_command_line.rb +2 -3
- data/lib/rspec/core/example.rb +5 -5
- data/lib/rspec/core/example_group.rb +23 -25
- data/lib/rspec/core/formatters/base_text_formatter.rb +13 -4
- data/lib/rspec/core/hooks.rb +57 -24
- data/lib/rspec/core/metadata.rb +1 -1
- data/lib/rspec/core/pending.rb +3 -3
- data/lib/rspec/core/rake_task.rb +48 -11
- data/lib/rspec/core/runner.rb +19 -8
- data/lib/rspec/core/subject.rb +3 -3
- data/lib/rspec/core/world.rb +3 -7
- data/rspec-core.gemspec +16 -12
- data/spec/rspec/core/command_line_spec.rb +72 -0
- data/spec/rspec/core/configuration_options_spec.rb +12 -3
- data/spec/rspec/core/configuration_spec.rb +6 -1
- data/spec/rspec/core/deprecations_spec.rb +19 -0
- data/spec/rspec/core/drb_command_line_spec.rb +1 -1
- data/spec/rspec/core/example_group_spec.rb +120 -12
- data/spec/rspec/core/example_spec.rb +27 -17
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +23 -0
- data/spec/rspec/core/metadata_spec.rb +32 -0
- data/spec/rspec/core/runner_spec.rb +2 -1
- data/spec/rspec/core/shared_example_group_spec.rb +1 -1
- data/spec/spec_helper.rb +49 -51
- data/specs.watchr +1 -1
- metadata +31 -27
data/.gitignore
CHANGED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
gem "bundler"
|
2
|
+
gem "rake"
|
3
|
+
gem "jeweler"
|
4
|
+
gem "cucumber"
|
5
|
+
gem "aruba"
|
6
|
+
gem "autotest"
|
7
|
+
gem "rcov"
|
8
|
+
gem "mocha"
|
9
|
+
gem "rr"
|
10
|
+
gem "flexmock"
|
11
|
+
gem "rspec-core", :path => "."
|
12
|
+
gem "rspec-expectations", :path => "../rspec-expectations"
|
13
|
+
gem "rspec-mocks", :path => "../rspec-mocks"
|
14
|
+
gem "ruby-debug"
|
data/Rakefile
CHANGED
@@ -1,29 +1,32 @@
|
|
1
|
+
require "bundler"
|
2
|
+
Bundler.setup
|
3
|
+
|
1
4
|
gem "jeweler", ">= 1.4.0"
|
2
|
-
require
|
3
|
-
require
|
5
|
+
require "rake"
|
6
|
+
require "yaml"
|
4
7
|
|
5
|
-
$:.unshift File.expand_path(
|
8
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
6
9
|
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
10
|
+
require "rake/rdoctask"
|
11
|
+
require "rspec/core/rake_task"
|
12
|
+
require "rspec/core/version"
|
13
|
+
require "cucumber/rake/task"
|
11
14
|
|
12
15
|
begin
|
13
|
-
require
|
16
|
+
require "jeweler"
|
14
17
|
Jeweler::Tasks.new do |gem|
|
15
18
|
gem.name = "rspec-core"
|
16
19
|
gem.version = RSpec::Core::Version::STRING
|
17
20
|
gem.summary = "rspec-core-#{RSpec::Core::Version::STRING}"
|
18
|
-
gem.description =
|
21
|
+
gem.description = "RSpec runner and example groups"
|
19
22
|
gem.email = "dchelimsky@gmail.com;chad.humphries@gmail.com"
|
20
|
-
gem.homepage = "http://github.com/rspec/core"
|
23
|
+
gem.homepage = "http://github.com/rspec/rspec-core"
|
21
24
|
gem.authors = ["Chad Humphries", "David Chelimsky"]
|
22
25
|
gem.rubyforge_project = "rspec"
|
23
26
|
gem.add_development_dependency "rspec-expectations", ">= #{RSpec::Core::Version::STRING}"
|
24
27
|
gem.add_development_dependency "rspec-mocks", ">= #{RSpec::Core::Version::STRING}"
|
25
|
-
gem.add_development_dependency
|
26
|
-
gem.add_development_dependency
|
28
|
+
gem.add_development_dependency "cucumber", ">= 0.5.3"
|
29
|
+
gem.add_development_dependency "autotest", ">= 4.2.9"
|
27
30
|
gem.post_install_message = <<-EOM
|
28
31
|
#{"*"*50}
|
29
32
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0.beta.
|
1
|
+
2.0.0.beta.13
|
@@ -24,6 +24,16 @@ Feature: example name option
|
|
24
24
|
it "second example in second group" do; end
|
25
25
|
end
|
26
26
|
"""
|
27
|
+
Given a file named "third_spec.rb" with:
|
28
|
+
"""
|
29
|
+
describe "third group" do
|
30
|
+
it "first example in third group" do; end
|
31
|
+
context "nested group" do
|
32
|
+
it "first example in nested group" do; end
|
33
|
+
it "second example in nested group" do; end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
"""
|
27
37
|
|
28
38
|
Scenario: no matches
|
29
39
|
When I run "rspec . --example nothing_like_this"
|
@@ -31,11 +41,11 @@ Feature: example name option
|
|
31
41
|
|
32
42
|
Scenario: match on one word
|
33
43
|
When I run "rspec . --example example"
|
34
|
-
Then I should see "
|
44
|
+
Then I should see "7 examples, 0 failures"
|
35
45
|
|
36
|
-
Scenario: one match in each
|
46
|
+
Scenario: one match in each context
|
37
47
|
When I run "rspec . --example 'first example'"
|
38
|
-
Then I should see "
|
48
|
+
Then I should see "4 examples, 0 failures"
|
39
49
|
|
40
50
|
Scenario: one match in one file using just the example name
|
41
51
|
When I run "rspec . --example 'first example in first group'"
|
@@ -56,3 +66,7 @@ Feature: example name option
|
|
56
66
|
Scenario: one match in one file with group name
|
57
67
|
When I run "rspec . --example 'second group first example'"
|
58
68
|
Then I should see "1 example, 0 failures"
|
69
|
+
|
70
|
+
Scenario: all examples in one group including examples in nested groups
|
71
|
+
When I run "rspec . --example 'third group'"
|
72
|
+
Then I should see "3 examples, 0 failures"
|
@@ -0,0 +1,49 @@
|
|
1
|
+
Feature: exit status
|
2
|
+
In order to fail the build when it should,
|
3
|
+
the spec CLI exits with an appropriate exit status
|
4
|
+
|
5
|
+
Scenario: exit with 0 when all examples pass
|
6
|
+
Given a file named "ok_spec.rb" with:
|
7
|
+
"""
|
8
|
+
describe "ok" do
|
9
|
+
it "passes" do
|
10
|
+
end
|
11
|
+
end
|
12
|
+
"""
|
13
|
+
When I run "rspec ok_spec.rb"
|
14
|
+
Then it should pass with:
|
15
|
+
"""
|
16
|
+
1 example, 0 failures
|
17
|
+
"""
|
18
|
+
|
19
|
+
Scenario: exit with 1 when one example fails
|
20
|
+
Given a file named "ko_spec.rb" with:
|
21
|
+
"""
|
22
|
+
describe "KO" do
|
23
|
+
it "fails" do
|
24
|
+
raise "KO"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
"""
|
28
|
+
When I run "rspec ko_spec.rb"
|
29
|
+
Then it should fail with:
|
30
|
+
"""
|
31
|
+
1 example, 1 failure
|
32
|
+
"""
|
33
|
+
|
34
|
+
Scenario: exit with 1 when a nested examples fails
|
35
|
+
Given a file named "nested_ko_spec.rb" with:
|
36
|
+
"""
|
37
|
+
describe "KO" do
|
38
|
+
describe "nested" do
|
39
|
+
it "fails" do
|
40
|
+
raise "KO"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
"""
|
45
|
+
When I run "rspec nested_ko_spec.rb"
|
46
|
+
Then it should fail with:
|
47
|
+
"""
|
48
|
+
1 example, 1 failure
|
49
|
+
"""
|
@@ -14,10 +14,12 @@ Feature: before and after hooks
|
|
14
14
|
after(:all) blocks are run once after all of the examples in a group
|
15
15
|
|
16
16
|
Before and after blocks are called in the following order:
|
17
|
+
before suite
|
17
18
|
before all
|
18
19
|
before each
|
19
|
-
after
|
20
|
-
after
|
20
|
+
after each
|
21
|
+
after all
|
22
|
+
after suite
|
21
23
|
|
22
24
|
Before and after blocks can be defined in the example groups to which they
|
23
25
|
apply or in a configuration. When defined in a configuration, they can be
|
@@ -155,6 +157,53 @@ Feature: before and after hooks
|
|
155
157
|
When I run "rspec ./ensure_block_order_spec.rb"
|
156
158
|
Then I should see matching /before all\nbefore each\nafter each\n.after all/
|
157
159
|
|
160
|
+
Scenario: before/after blocks defined in config are run in order
|
161
|
+
Given a file named "configuration_spec.rb" with:
|
162
|
+
"""
|
163
|
+
require "rspec/expectations"
|
164
|
+
|
165
|
+
RSpec.configure do |config|
|
166
|
+
config.before(:suite) do
|
167
|
+
puts "before suite"
|
168
|
+
end
|
169
|
+
|
170
|
+
config.before(:all) do
|
171
|
+
puts "before all"
|
172
|
+
end
|
173
|
+
|
174
|
+
config.before(:each) do
|
175
|
+
puts "before each"
|
176
|
+
end
|
177
|
+
|
178
|
+
config.after(:each) do
|
179
|
+
puts "after each"
|
180
|
+
end
|
181
|
+
|
182
|
+
config.after(:all) do
|
183
|
+
puts "after all"
|
184
|
+
end
|
185
|
+
|
186
|
+
config.after(:suite) do
|
187
|
+
puts "after suite"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
describe "ignore" do
|
192
|
+
example "ignore" do
|
193
|
+
end
|
194
|
+
end
|
195
|
+
"""
|
196
|
+
When I run "rspec configuration_spec.rb"
|
197
|
+
Then I should see matching:
|
198
|
+
"""
|
199
|
+
before suite
|
200
|
+
before all
|
201
|
+
before each
|
202
|
+
after each
|
203
|
+
.after all
|
204
|
+
after suite
|
205
|
+
"""
|
206
|
+
|
158
207
|
Scenario: before/after all blocks are run once
|
159
208
|
Given a file named "before_and_after_all_spec.rb" with:
|
160
209
|
"""
|
@@ -278,20 +327,3 @@ Feature: before and after hooks
|
|
278
327
|
When I run "rspec ./error_in_before_each_spec.rb"
|
279
328
|
Then I should see "1 example, 1 failure"
|
280
329
|
And I should see "this error"
|
281
|
-
|
282
|
-
@wip
|
283
|
-
Scenario: exception in before(:all) is captured and reported as failure
|
284
|
-
Given a file named "error_in_before_all_spec.rb" with:
|
285
|
-
"""
|
286
|
-
describe "error in before(:all)" do
|
287
|
-
before(:all) do
|
288
|
-
raise "this error"
|
289
|
-
end
|
290
|
-
|
291
|
-
it "is reported as failure" do
|
292
|
-
end
|
293
|
-
end
|
294
|
-
"""
|
295
|
-
When I run "rspec ./error_in_before_all_spec.rb"
|
296
|
-
Then I should see "1 example, 1 failure"
|
297
|
-
And I should see "this error"
|
data/features/hooks/halt.feature
CHANGED
data/features/support/env.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require "bundler"
|
2
|
+
Bundler.setup
|
3
|
+
|
3
4
|
require 'aruba'
|
5
|
+
require 'rspec/expectations'
|
4
6
|
|
5
7
|
module ArubaOverrides
|
6
8
|
def detect_ruby_script(cmd)
|
7
9
|
if cmd =~ /^rspec /
|
8
|
-
"
|
10
|
+
"bundle exec ../../bin/#{cmd}"
|
9
11
|
else
|
10
12
|
super(cmd)
|
11
13
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Core
|
3
3
|
class CommandLine
|
4
|
-
def initialize(
|
5
|
-
|
6
|
-
|
4
|
+
def initialize(args_or_options)
|
5
|
+
if RSpec::Core::ConfigurationOptions === args_or_options
|
6
|
+
@options = args_or_options
|
7
|
+
else
|
8
|
+
@options = RSpec::Core::ConfigurationOptions.new(args_or_options)
|
9
|
+
@options.parse_options
|
10
|
+
end
|
7
11
|
@options.configure(configuration)
|
8
12
|
configuration.require_files_to_run
|
9
13
|
configuration.configure_mock_framework
|
@@ -15,9 +19,14 @@ module RSpec
|
|
15
19
|
world.announce_inclusion_filter
|
16
20
|
|
17
21
|
configuration.reporter.report(example_count) do |reporter|
|
18
|
-
|
22
|
+
begin
|
23
|
+
configuration.run_hook(:before, :suite)
|
24
|
+
example_groups.run_examples(reporter)
|
25
|
+
ensure
|
26
|
+
configuration.run_hook(:after, :suite)
|
27
|
+
end
|
19
28
|
end
|
20
|
-
|
29
|
+
|
21
30
|
example_groups.success?
|
22
31
|
end
|
23
32
|
|
@@ -1,6 +1,10 @@
|
|
1
|
+
require "rbconfig"
|
2
|
+
|
1
3
|
module RSpec
|
2
4
|
module Core
|
3
5
|
class Configuration
|
6
|
+
include RSpec::Core::Hooks
|
7
|
+
|
4
8
|
def self.add_setting(name, opts={})
|
5
9
|
if opts[:alias]
|
6
10
|
alias_method name, opts[:alias]
|
@@ -16,6 +20,7 @@ module RSpec
|
|
16
20
|
add_setting :error_stream
|
17
21
|
add_setting :output_stream
|
18
22
|
add_setting :output, :alias => :output_stream
|
23
|
+
add_setting :drb
|
19
24
|
add_setting :drb_port
|
20
25
|
add_setting :color_enabled
|
21
26
|
add_setting :profile_examples
|
@@ -82,13 +87,6 @@ module RSpec
|
|
82
87
|
output_stream.puts(message)
|
83
88
|
end
|
84
89
|
|
85
|
-
def hooks
|
86
|
-
@hooks ||= {
|
87
|
-
:before => { :each => [], :all => [], :suite => [] },
|
88
|
-
:after => { :each => [], :all => [], :suite => [] }
|
89
|
-
}
|
90
|
-
end
|
91
|
-
|
92
90
|
def settings
|
93
91
|
@settings ||= {}
|
94
92
|
end
|
@@ -123,7 +121,7 @@ module RSpec
|
|
123
121
|
def color_enabled=(bool)
|
124
122
|
return unless bool
|
125
123
|
settings[:color_enabled] = true
|
126
|
-
if bool && Config::CONFIG['host_os'] =~ /mswin|mingw/
|
124
|
+
if bool && ::Config::CONFIG['host_os'] =~ /mswin|mingw/
|
127
125
|
orig_output_stream = settings[:output_stream]
|
128
126
|
begin
|
129
127
|
require 'Win32/Console/ANSI'
|
@@ -171,7 +169,9 @@ EOM
|
|
171
169
|
end
|
172
170
|
|
173
171
|
def formatter=(formatter_to_use)
|
174
|
-
if formatter_to_use.
|
172
|
+
if string_const?(formatter_to_use) && Object.const_defined?(formatter_to_use)
|
173
|
+
formatter_class = Object.const_get(formatter_to_use)
|
174
|
+
elsif formatter_to_use.is_a?(Class)
|
175
175
|
formatter_class = formatter_to_use
|
176
176
|
else
|
177
177
|
formatter_class = case formatter_to_use.to_s
|
@@ -185,7 +185,11 @@ EOM
|
|
185
185
|
end
|
186
186
|
self.formatter_class = formatter_class
|
187
187
|
end
|
188
|
-
|
188
|
+
|
189
|
+
def string_const?(str)
|
190
|
+
str.is_a?(String) && /\A[A-Z][a-zA-Z0-9_:]*\z/ =~ str
|
191
|
+
end
|
192
|
+
|
189
193
|
def formatter
|
190
194
|
@formatter ||= formatter_class.new(output)
|
191
195
|
end
|
@@ -237,20 +241,6 @@ EOM
|
|
237
241
|
end
|
238
242
|
end
|
239
243
|
|
240
|
-
def before(each_or_all=:each, options={}, &block)
|
241
|
-
hooks[:before][each_or_all] << [options, block]
|
242
|
-
end
|
243
|
-
|
244
|
-
def after(each_or_all=:each, options={}, &block)
|
245
|
-
hooks[:after][each_or_all] << [options, block]
|
246
|
-
end
|
247
|
-
|
248
|
-
def find_hook(hook, each_or_all, group)
|
249
|
-
hooks[hook][each_or_all].select do |filters, block|
|
250
|
-
group.all_apply?(filters)
|
251
|
-
end.map { |filters, block| block }
|
252
|
-
end
|
253
|
-
|
254
244
|
def configure_mock_framework
|
255
245
|
require_mock_framework_adapter
|
256
246
|
RSpec::Core::ExampleGroup.send(:include, RSpec::Core::MockFrameworkAdapter)
|
@@ -13,26 +13,31 @@ module RSpec
|
|
13
13
|
def initialize(args)
|
14
14
|
@args = args
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def configure(config)
|
18
|
-
|
18
|
+
keys = options.keys
|
19
|
+
keys.unshift(:requires) if keys.delete(:requires)
|
20
|
+
keys.unshift(:libs) if keys.delete(:libs)
|
21
|
+
keys.each do |key|
|
19
22
|
config.send("#{key}=", options[key])
|
20
23
|
end
|
21
24
|
end
|
22
|
-
|
23
|
-
def sorted_keys
|
24
|
-
options.keys.sort{|a,b| a.to_s <=> b.to_s}
|
25
|
-
end
|
26
|
-
|
25
|
+
|
27
26
|
def drb_argv
|
28
27
|
argv = []
|
29
|
-
argv << "--color"
|
28
|
+
argv << "--color" if options[:color_enabled]
|
30
29
|
argv << "--profile" if options[:profile_examples]
|
31
30
|
argv << "--backtrace" if options[:full_backtrace]
|
32
31
|
argv << "--format" << options[:formatter] if options[:formatter]
|
33
32
|
argv << "--line_number" << options[:line_number] if options[:line_number]
|
34
33
|
argv << "--options_file" << options[:options_file] if options[:options_file]
|
35
34
|
argv << "--example" << options[:full_description].source if options[:full_description]
|
35
|
+
(options[:libs] || []).each do |path|
|
36
|
+
argv << "-I" << path
|
37
|
+
end
|
38
|
+
(options[:requires] || []).each do |path|
|
39
|
+
argv << "--require" << path
|
40
|
+
end
|
36
41
|
argv + options[:files_or_directories_to_run]
|
37
42
|
end
|
38
43
|
|