rspec-core 2.8.0.rc2 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/autotest/rspec2.rb +4 -0
- data/lib/rspec/core/configuration.rb +75 -12
- data/lib/rspec/core/dsl.rb +1 -0
- data/lib/rspec/core/formatters/base_text_formatter.rb +28 -21
- data/lib/rspec/core/metadata.rb +1 -1
- data/lib/rspec/core/project_initializer.rb +22 -3
- data/lib/rspec/core/shared_context.rb +1 -3
- data/lib/rspec/core/version.rb +1 -1
- data/spec/rspec/core/configuration_spec.rb +18 -0
- data/spec/rspec/core/metadata_spec.rb +8 -0
- data/spec/rspec/core/project_initializer_spec.rb +2 -2
- data/spec/rspec/core_spec.rb +0 -6
- metadata +9 -13
data/lib/autotest/rspec2.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'autotest'
|
2
2
|
require 'rspec/core/deprecation'
|
3
3
|
|
4
|
+
# Derived from the `Autotest` class, extends the `autotest` command to work
|
5
|
+
# with RSpec.
|
6
|
+
#
|
7
|
+
# @note this will be extracted to a separate gem when we release rspec-3.
|
4
8
|
class Autotest::Rspec2 < Autotest
|
5
9
|
|
6
10
|
RSPEC_EXECUTABLE = File.expand_path('../../../exe/rspec', __FILE__)
|
@@ -205,7 +205,7 @@ MESSAGE
|
|
205
205
|
@preferred_options.merge!(hash)
|
206
206
|
end
|
207
207
|
|
208
|
-
# @
|
208
|
+
# @private
|
209
209
|
def reset
|
210
210
|
@reporter = nil
|
211
211
|
@formatters.clear
|
@@ -257,6 +257,9 @@ MESSAGE
|
|
257
257
|
# Used by formatters to ask whether a backtrace line should be displayed
|
258
258
|
# or not, based on the line matching any `backtrace_clean_patterns`.
|
259
259
|
def cleaned_from_backtrace?(line)
|
260
|
+
# TODO (David 2011-12-25) why are we asking the configuration to do
|
261
|
+
# stuff? Either use the patterns directly or enapsulate the filtering
|
262
|
+
# in a BacktraceCleaner object.
|
260
263
|
backtrace_clean_patterns.any? { |regex| line =~ regex }
|
261
264
|
end
|
262
265
|
|
@@ -462,6 +465,7 @@ EOM
|
|
462
465
|
end
|
463
466
|
end
|
464
467
|
|
468
|
+
# @private
|
465
469
|
def files_or_directories_to_run=(*files)
|
466
470
|
files = files.flatten
|
467
471
|
files << default_path if command == 'rspec' && default_path && files.empty?
|
@@ -597,17 +601,76 @@ EOM
|
|
597
601
|
filter_manager.exclusions
|
598
602
|
end
|
599
603
|
|
600
|
-
|
601
|
-
|
602
|
-
|
604
|
+
# Tells RSpec to include `mod` in example groups. Methods defined in
|
605
|
+
# `mod` are exposed to examples (not example groups). Use `filters` to
|
606
|
+
# constrain the groups in which to include the module.
|
607
|
+
#
|
608
|
+
# @example
|
609
|
+
#
|
610
|
+
# module AuthenticationHelpers
|
611
|
+
# def login_as(user)
|
612
|
+
# # ...
|
613
|
+
# end
|
614
|
+
# end
|
615
|
+
#
|
616
|
+
# module UserHelpers
|
617
|
+
# def users(username)
|
618
|
+
# # ...
|
619
|
+
# end
|
620
|
+
# end
|
621
|
+
#
|
622
|
+
# RSpec.configure do |config|
|
623
|
+
# config.include(UserHelpers) # included in all modules
|
624
|
+
# config.include(AuthenticationHelpers, :type => :request)
|
625
|
+
# end
|
626
|
+
#
|
627
|
+
# describe "edit profile", :type => :request do
|
628
|
+
# it "can be viewed by owning user" do
|
629
|
+
# login_as users(:jdoe)
|
630
|
+
# get "/profiles/jdoe"
|
631
|
+
# assert_select ".username", :text => 'jdoe'
|
632
|
+
# end
|
633
|
+
# end
|
634
|
+
#
|
635
|
+
# @see #extend
|
636
|
+
def include(mod, *filters)
|
637
|
+
include_or_extend_modules << [:include, mod, build_metadata_hash_from(filters)]
|
603
638
|
end
|
604
639
|
|
605
|
-
|
606
|
-
|
607
|
-
|
640
|
+
# Tells RSpec to extend example groups with `mod`. Methods defined in
|
641
|
+
# `mod` are exposed to example groups (not examples). Use `filters` to
|
642
|
+
# constrain the groups to extend.
|
643
|
+
#
|
644
|
+
# Similar to `include`, but behavior is added to example groups, which
|
645
|
+
# are classes, rather than the examples, which are instances of those
|
646
|
+
# classes.
|
647
|
+
#
|
648
|
+
# @example
|
649
|
+
#
|
650
|
+
# module UiHelpers
|
651
|
+
# def run_in_browser
|
652
|
+
# # ...
|
653
|
+
# end
|
654
|
+
# end
|
655
|
+
#
|
656
|
+
# RSpec.configure do |config|
|
657
|
+
# config.extend(UiHelpers, :type => :request)
|
658
|
+
# end
|
659
|
+
#
|
660
|
+
# describe "edit profile", :type => :request do
|
661
|
+
# run_in_browser
|
662
|
+
#
|
663
|
+
# it "does stuff in the client" do
|
664
|
+
# # ...
|
665
|
+
# end
|
666
|
+
# end
|
667
|
+
#
|
668
|
+
# @see #include
|
669
|
+
def extend(mod, *filters)
|
670
|
+
include_or_extend_modules << [:extend, mod, build_metadata_hash_from(filters)]
|
608
671
|
end
|
609
672
|
|
610
|
-
# @
|
673
|
+
# @private
|
611
674
|
#
|
612
675
|
# Used internally to extend a group with modules using `include` and/or
|
613
676
|
# `extend`.
|
@@ -618,21 +681,21 @@ EOM
|
|
618
681
|
end
|
619
682
|
end
|
620
683
|
|
621
|
-
# @
|
684
|
+
# @private
|
622
685
|
def configure_mock_framework
|
623
686
|
RSpec::Core::ExampleGroup.send(:include, mock_framework)
|
624
687
|
end
|
625
688
|
|
626
|
-
# @
|
689
|
+
# @private
|
627
690
|
def configure_expectation_framework
|
628
691
|
expectation_frameworks.each do |framework|
|
629
692
|
RSpec::Core::ExampleGroup.send(:include, framework)
|
630
693
|
end
|
631
694
|
end
|
632
695
|
|
633
|
-
# @
|
696
|
+
# @private
|
634
697
|
def load_spec_files
|
635
|
-
files_to_run.map {|f| load File.expand_path(f) }
|
698
|
+
files_to_run.uniq.map {|f| load File.expand_path(f) }
|
636
699
|
raise_if_rspec_1_is_loaded
|
637
700
|
end
|
638
701
|
|
data/lib/rspec/core/dsl.rb
CHANGED
@@ -16,20 +16,18 @@ module RSpec
|
|
16
16
|
output.puts "Failures:"
|
17
17
|
failed_examples.each_with_index do |example, index|
|
18
18
|
output.puts
|
19
|
-
|
19
|
+
pending_fixed?(example) ? dump_pending_fixed(example, index) : dump_failure(example, index)
|
20
20
|
dump_backtrace(example)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
def colorise_summary(summary)
|
25
|
-
if failure_count
|
26
|
-
if pending_count > 0
|
27
|
-
yellow(summary)
|
28
|
-
else
|
29
|
-
green(summary)
|
30
|
-
end
|
31
|
-
else
|
25
|
+
if failure_count > 0
|
32
26
|
red(summary)
|
27
|
+
elsif pending_count > 0
|
28
|
+
yellow(summary)
|
29
|
+
else
|
30
|
+
green(summary)
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
@@ -158,12 +156,13 @@ module RSpec
|
|
158
156
|
end
|
159
157
|
end
|
160
158
|
|
161
|
-
def
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
159
|
+
def dump_pending_fixed(example, index)
|
160
|
+
output.puts "#{short_padding}#{index.next}) #{example.full_description} FIXED"
|
161
|
+
output.puts blue("#{long_padding}Expected pending '#{example.metadata[:execution_result][:pending_message]}' to fail. No Error was raised.")
|
162
|
+
end
|
163
|
+
|
164
|
+
def pending_fixed?(example)
|
165
|
+
example.execution_result[:exception].pending_fixed?
|
167
166
|
end
|
168
167
|
|
169
168
|
def dump_failure(example, index)
|
@@ -176,15 +175,23 @@ module RSpec
|
|
176
175
|
output.puts "#{long_padding}#{red("Failure/Error:")} #{red(read_failed_line(exception, example).strip)}"
|
177
176
|
output.puts "#{long_padding}#{red(exception.class.name << ":")}" unless exception.class.name =~ /RSpec/
|
178
177
|
exception.message.split("\n").each { |line| output.puts "#{long_padding} #{red(line)}" } if exception.message
|
179
|
-
|
180
|
-
|
181
|
-
if group.metadata[:shared_group_name]
|
182
|
-
output.puts "#{long_padding}Shared Example Group: \"#{group.metadata[:shared_group_name]}\" called from " +
|
183
|
-
"#{backtrace_line(group.metadata[:example_group][:location])}"
|
184
|
-
break
|
185
|
-
end
|
178
|
+
if shared_group = find_shared_group(example)
|
179
|
+
dump_shared_failure_info(shared_group)
|
186
180
|
end
|
187
181
|
end
|
182
|
+
|
183
|
+
def dump_shared_failure_info(group)
|
184
|
+
output.puts "#{long_padding}Shared Example Group: \"#{group.metadata[:shared_group_name]}\" called from " +
|
185
|
+
"#{backtrace_line(group.metadata[:example_group][:location])}"
|
186
|
+
end
|
187
|
+
|
188
|
+
def find_shared_group(example)
|
189
|
+
group_and_ancestors(example).find {|group| group.metadata[:shared_group_name]}
|
190
|
+
end
|
191
|
+
|
192
|
+
def group_and_ancestors(example)
|
193
|
+
example.example_group.ancestors.push(example.example_group)
|
194
|
+
end
|
188
195
|
end
|
189
196
|
end
|
190
197
|
end
|
data/lib/rspec/core/metadata.rb
CHANGED
@@ -169,7 +169,7 @@ module RSpec
|
|
169
169
|
|
170
170
|
# @private
|
171
171
|
def filter_applies?(key, value, metadata=self)
|
172
|
-
return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key]
|
172
|
+
return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key] && !(Proc === value)
|
173
173
|
return metadata.line_number_filter_applies?(value) if key == :line_numbers
|
174
174
|
return metadata.location_filter_applies?(value) if key == :locations
|
175
175
|
return metadata.filters_apply?(key, value) if Hash === value
|
@@ -25,7 +25,12 @@ module RSpec
|
|
25
25
|
report_exists('.rspec')
|
26
26
|
else
|
27
27
|
report_creating('.rspec')
|
28
|
-
|
28
|
+
File.open('.rspec','w') do |f|
|
29
|
+
f.write <<-CONTENT
|
30
|
+
--color
|
31
|
+
--format progress
|
32
|
+
CONTENT
|
33
|
+
end
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
@@ -34,8 +39,22 @@ module RSpec
|
|
34
39
|
report_exists("spec/spec_helper.rb")
|
35
40
|
else
|
36
41
|
report_creating("spec/spec_helper.rb")
|
37
|
-
FileUtils.
|
38
|
-
|
42
|
+
FileUtils.mkdir_p('spec')
|
43
|
+
File.open('spec/spec_helper.rb','w') do |f|
|
44
|
+
f.write <<-CONTENT
|
45
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
46
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
47
|
+
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
48
|
+
# loaded once.
|
49
|
+
#
|
50
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
51
|
+
RSpec.configure do |config|
|
52
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
53
|
+
config.run_all_when_everything_filtered = true
|
54
|
+
config.filter_run :focus
|
55
|
+
end
|
56
|
+
CONTENT
|
57
|
+
end
|
39
58
|
end
|
40
59
|
end
|
41
60
|
|
@@ -3,12 +3,10 @@ module RSpec
|
|
3
3
|
# Exposes [ExampleGroup](ExampleGroup)-level methods to a module, so you
|
4
4
|
# can include that module in an [ExampleGroup](ExampleGroup).
|
5
5
|
#
|
6
|
-
# @note exposed as `RSpec::SharedContext`
|
7
|
-
#
|
8
6
|
# @example
|
9
7
|
#
|
10
8
|
# module LoggedInAsAdmin
|
11
|
-
# extend RSpec::SharedContext
|
9
|
+
# extend RSpec::Core::SharedContext
|
12
10
|
# before(:each) do
|
13
11
|
# log_in_as :admin
|
14
12
|
# end
|
data/lib/rspec/core/version.rb
CHANGED
@@ -18,6 +18,12 @@ module RSpec::Core
|
|
18
18
|
config.load_spec_files
|
19
19
|
end
|
20
20
|
|
21
|
+
it "loads each file once, even if duplicated in list" do
|
22
|
+
config.files_to_run = ["a_spec.rb", "a_spec.rb"]
|
23
|
+
config.should_receive(:load).once
|
24
|
+
config.load_spec_files
|
25
|
+
end
|
26
|
+
|
21
27
|
context "with rspec-1 loaded" do
|
22
28
|
before do
|
23
29
|
Object.const_set(:Spec, Module.new)
|
@@ -692,6 +698,12 @@ module RSpec::Core
|
|
692
698
|
config.inclusion_filter = :foo
|
693
699
|
config.inclusion_filter.should eq({:foo => true})
|
694
700
|
end
|
701
|
+
|
702
|
+
it "overrides any inclusion filters set on the command line or in configuration files" do
|
703
|
+
config.force(:inclusion_filter => { :foo => :bar })
|
704
|
+
config.inclusion_filter = {:want => :this}
|
705
|
+
config.inclusion_filter.should eq({:want => :this})
|
706
|
+
end
|
695
707
|
end
|
696
708
|
|
697
709
|
describe "#exclusion_filter" do
|
@@ -739,6 +751,12 @@ module RSpec::Core
|
|
739
751
|
config.exclusion_filter = :foo
|
740
752
|
config.exclusion_filter.should eq({:foo => true})
|
741
753
|
end
|
754
|
+
|
755
|
+
it "overrides any exclusion filters set on the command line or in configuration files" do
|
756
|
+
config.force(:exclusion_filter => { :foo => :bar })
|
757
|
+
config.exclusion_filter = {:want => :this}
|
758
|
+
config.exclusion_filter.should eq({:want => :this})
|
759
|
+
end
|
742
760
|
end
|
743
761
|
|
744
762
|
describe "line_numbers=" do
|
@@ -160,6 +160,14 @@ module RSpec
|
|
160
160
|
metadata_with_array.filter_applies?(:tag, 'fourtune').should be_true
|
161
161
|
metadata_with_array.filter_applies?(:tag, 'fortune').should be_false
|
162
162
|
end
|
163
|
+
|
164
|
+
it "matches a proc that evaluates to true" do
|
165
|
+
metadata_with_array.filter_applies?(:tag, lambda { |values| values.include? 'three' }).should be_true
|
166
|
+
end
|
167
|
+
|
168
|
+
it "does not match a proc that evaluates to false" do
|
169
|
+
metadata_with_array.filter_applies?(:tag, lambda { |values| values.include? 'nothing' }).should be_false
|
170
|
+
end
|
163
171
|
end
|
164
172
|
end
|
165
173
|
|
@@ -20,7 +20,7 @@ module RSpec::Core
|
|
20
20
|
|
21
21
|
it "generates a .rspec" do
|
22
22
|
command_line_config.run
|
23
|
-
File.read('.rspec').should
|
23
|
+
File.read('.rspec').should =~ /--color\n--format progress/m
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -46,7 +46,7 @@ module RSpec::Core
|
|
46
46
|
|
47
47
|
it "generates a spec/spec_helper.rb" do
|
48
48
|
command_line_config.run
|
49
|
-
File.read('spec/spec_helper.rb').should
|
49
|
+
File.read('spec/spec_helper.rb').should =~ /RSpec\.configure do \|config\|/m
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
data/spec/rspec/core_spec.rb
CHANGED
@@ -3,29 +3,23 @@ require 'spec_helper'
|
|
3
3
|
describe RSpec::Core do
|
4
4
|
|
5
5
|
describe "#configuration" do
|
6
|
-
|
7
6
|
it "returns the same object every time" do
|
8
7
|
RSpec.configuration.should equal(RSpec.configuration)
|
9
8
|
end
|
10
|
-
|
11
9
|
end
|
12
10
|
|
13
11
|
describe "#configure" do
|
14
|
-
|
15
12
|
it "yields the current configuration" do
|
16
13
|
RSpec.configure do |config|
|
17
14
|
config.should eq(RSpec::configuration)
|
18
15
|
end
|
19
16
|
end
|
20
|
-
|
21
17
|
end
|
22
18
|
|
23
19
|
describe "#world" do
|
24
|
-
|
25
20
|
it "returns the RSpec::Core::World instance the current run is using" do
|
26
21
|
RSpec.world.should be_instance_of(RSpec::Core::World)
|
27
22
|
end
|
28
|
-
|
29
23
|
end
|
30
24
|
|
31
25
|
end
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 47
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 8
|
9
9
|
- 0
|
10
|
-
|
11
|
-
- 2
|
12
|
-
version: 2.8.0.rc2
|
10
|
+
version: 2.8.0
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Steven Baker
|
@@ -19,7 +17,7 @@ autorequire:
|
|
19
17
|
bindir: exe
|
20
18
|
cert_chain: []
|
21
19
|
|
22
|
-
date:
|
20
|
+
date: 2012-01-05 00:00:00 Z
|
23
21
|
dependencies: []
|
24
22
|
|
25
23
|
description: BDD for Ruby. RSpec runner and example groups.
|
@@ -220,21 +218,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
219
|
none: false
|
222
220
|
requirements:
|
223
|
-
- - "
|
221
|
+
- - ">="
|
224
222
|
- !ruby/object:Gem::Version
|
225
|
-
hash:
|
223
|
+
hash: 3
|
226
224
|
segments:
|
227
|
-
-
|
228
|
-
|
229
|
-
- 1
|
230
|
-
version: 1.3.1
|
225
|
+
- 0
|
226
|
+
version: "0"
|
231
227
|
requirements: []
|
232
228
|
|
233
229
|
rubyforge_project: rspec
|
234
230
|
rubygems_version: 1.8.11
|
235
231
|
signing_key:
|
236
232
|
specification_version: 3
|
237
|
-
summary: rspec-core-2.8.0
|
233
|
+
summary: rspec-core-2.8.0
|
238
234
|
test_files:
|
239
235
|
- features/Autotest.md
|
240
236
|
- features/README.md
|