rspec-core 2.14.0.rc1 → 2.14.0
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/Changelog.md +14 -0
- data/features/hooks/around_hooks.feature +1 -1
- data/lib/rspec/core/deprecation.rb +6 -1
- data/lib/rspec/core/example_group.rb +10 -0
- data/lib/rspec/core/memoized_helpers.rb +11 -9
- data/lib/rspec/core/reporter.rb +1 -1
- data/lib/rspec/core/shared_context.rb +23 -17
- data/lib/rspec/core/version.rb +1 -1
- data/spec/rspec/core/configuration_spec.rb +10 -8
- data/spec/rspec/core/deprecation_spec.rb +5 -0
- data/spec/rspec/core/example_group_spec.rb +1 -1
- data/spec/rspec/core/memoized_helpers_spec.rb +18 -0
- metadata +10 -7
data/Changelog.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
### 2.14.0 / 2013-07-06
|
2
|
+
[full changelog](http://github.com/rspec/rspec-core/compare/v2.14.0.rc1...v2.14.0)
|
3
|
+
|
4
|
+
Enhancements
|
5
|
+
|
6
|
+
* Apply focus to examples defined with `fit` (equivalent of
|
7
|
+
`it "description", focus: true`) (Michael de Silva)
|
8
|
+
|
9
|
+
Bug fix
|
10
|
+
|
11
|
+
* Ensure methods defined by `let` take precedence over others
|
12
|
+
when there is a name collision (e.g. from an included module).
|
13
|
+
(Jon Rowe, Andy Lindeman and Myron Marston)
|
14
|
+
|
1
15
|
### 2.14.0.rc1 / 2013-05-27
|
2
16
|
[full changelog](http://github.com/rspec/rspec-core/compare/v2.13.1...v2.14.0.rc1)
|
3
17
|
|
@@ -8,7 +8,12 @@ module RSpec
|
|
8
8
|
# Temporarily support old and new APIs while we transition the other
|
9
9
|
# rspec libs to use a hash for the 2nd arg and no version arg
|
10
10
|
data = Hash === replacement_or_hash ? replacement_or_hash : { :replacement => replacement_or_hash }
|
11
|
-
RSpec.configuration.reporter.deprecation
|
11
|
+
RSpec.configuration.reporter.deprecation(
|
12
|
+
{
|
13
|
+
:deprecated => deprecated,
|
14
|
+
:call_site => caller(0)[2]
|
15
|
+
}.merge(data)
|
16
|
+
)
|
12
17
|
end
|
13
18
|
|
14
19
|
# @private
|
@@ -85,6 +85,9 @@ module RSpec
|
|
85
85
|
define_example_method :focus, :focused => true, :focus => true
|
86
86
|
# Shortcut to define an example with `:focus` => true
|
87
87
|
define_example_method :focused, :focused => true, :focus => true
|
88
|
+
# Shortcut to define an example with `:focus` => true
|
89
|
+
# @see example
|
90
|
+
define_example_method :fit, :focused => true, :focus => true
|
88
91
|
|
89
92
|
# Shortcut to define an example with :pending => true
|
90
93
|
define_example_method :pending, :pending => true
|
@@ -240,6 +243,13 @@ module RSpec
|
|
240
243
|
subclass = Class.new(parent)
|
241
244
|
subclass.set_it_up(*args)
|
242
245
|
subclass.module_eval(&example_group_block) if example_group_block
|
246
|
+
|
247
|
+
# The LetDefinitions module must be included _after_ other modules
|
248
|
+
# to ensure that it takes precendence when there are name collisions.
|
249
|
+
# Thus, we delay including it until after the example group block
|
250
|
+
# has been eval'd.
|
251
|
+
MemoizedHelpers.define_helpers_on(subclass)
|
252
|
+
|
243
253
|
subclass
|
244
254
|
end
|
245
255
|
|
@@ -45,8 +45,12 @@ module RSpec
|
|
45
45
|
#
|
46
46
|
# @see #should
|
47
47
|
def subject
|
48
|
-
|
49
|
-
|
48
|
+
__memoized.fetch(:subject) do
|
49
|
+
__memoized[:subject] = begin
|
50
|
+
described = described_class || self.class.description
|
51
|
+
Class === described ? described.new : described
|
52
|
+
end
|
53
|
+
end
|
50
54
|
end
|
51
55
|
|
52
56
|
# When `should` is called with no explicit receiver, the call is
|
@@ -148,12 +152,6 @@ EOS
|
|
148
152
|
|
149
153
|
def self.included(mod)
|
150
154
|
mod.extend(ClassMethods)
|
151
|
-
|
152
|
-
# This logic defines an implicit subject
|
153
|
-
mod.subject do
|
154
|
-
described = described_class || self.class.description
|
155
|
-
Class === described ? described.new : described
|
156
|
-
end
|
157
155
|
end
|
158
156
|
|
159
157
|
module ClassMethods
|
@@ -471,12 +469,16 @@ EOS
|
|
471
469
|
}
|
472
470
|
end
|
473
471
|
|
474
|
-
example_group.__send__(:include, mod)
|
475
472
|
example_group.const_set(:LetDefinitions, mod)
|
476
473
|
mod
|
477
474
|
end
|
478
475
|
end
|
479
476
|
|
477
|
+
# @api private
|
478
|
+
def self.define_helpers_on(example_group)
|
479
|
+
example_group.send(:include, module_for(example_group))
|
480
|
+
end
|
481
|
+
|
480
482
|
if Module.method(:const_defined?).arity == 1 # for 1.8
|
481
483
|
# @api private
|
482
484
|
#
|
data/lib/rspec/core/reporter.rb
CHANGED
@@ -2,7 +2,7 @@ module RSpec::Core
|
|
2
2
|
class Reporter
|
3
3
|
NOTIFICATIONS = %W[start message example_group_started example_group_finished example_started
|
4
4
|
example_passed example_failed example_pending start_dump dump_pending
|
5
|
-
dump_failures dump_summary seed close stop deprecation deprecation_summary].map
|
5
|
+
dump_failures dump_summary seed close stop deprecation deprecation_summary].map { |n| n.to_sym }
|
6
6
|
|
7
7
|
def initialize(*formatters)
|
8
8
|
@listeners = Hash.new { |h,k| h[k] = [] }
|
@@ -17,31 +17,37 @@ module RSpec
|
|
17
17
|
# # ...
|
18
18
|
# end
|
19
19
|
module SharedContext
|
20
|
-
|
21
|
-
include MemoizedHelpers::ClassMethods
|
22
|
-
|
20
|
+
# @api private
|
23
21
|
def included(group)
|
24
|
-
|
25
|
-
|
26
|
-
group.hooks[type][scope].concat hooks[type][scope]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
_nested_group_declarations.each do |name, block, *args|
|
30
|
-
group.describe name, *args, &block
|
22
|
+
__shared_context_recordings.each do |recording|
|
23
|
+
recording.playback_onto(group)
|
31
24
|
end
|
32
25
|
end
|
33
26
|
|
34
|
-
|
35
|
-
|
27
|
+
# @api private
|
28
|
+
def __shared_context_recordings
|
29
|
+
@__shared_context_recordings ||= []
|
36
30
|
end
|
37
31
|
|
38
|
-
|
39
|
-
|
40
|
-
|
32
|
+
Recording = Struct.new(:method_name, :args, :block) do
|
33
|
+
def playback_onto(group)
|
34
|
+
group.__send__(method_name, *args, &block)
|
35
|
+
end
|
36
|
+
end
|
41
37
|
|
42
|
-
|
43
|
-
|
38
|
+
# @api private
|
39
|
+
def self.record(methods)
|
40
|
+
methods.each do |meth|
|
41
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
42
|
+
def #{meth}(*args, &block)
|
43
|
+
__shared_context_recordings << Recording.new(:#{meth}, args, block)
|
44
|
+
end
|
45
|
+
EOS
|
46
|
+
end
|
44
47
|
end
|
48
|
+
|
49
|
+
record [:describe, :context] + Hooks.instance_methods(false) +
|
50
|
+
MemoizedHelpers::ClassMethods.instance_methods(false)
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
data/lib/rspec/core/version.rb
CHANGED
@@ -1106,11 +1106,6 @@ module RSpec::Core
|
|
1106
1106
|
debugger.should_receive(:start)
|
1107
1107
|
config.debug = true
|
1108
1108
|
end
|
1109
|
-
|
1110
|
-
it 'sets the reader to true' do
|
1111
|
-
config.debug = true
|
1112
|
-
expect(config.debug?).to eq true
|
1113
|
-
end
|
1114
1109
|
end
|
1115
1110
|
|
1116
1111
|
describe "#debug=false" do
|
@@ -1118,10 +1113,17 @@ module RSpec::Core
|
|
1118
1113
|
config.should_not_receive(:require).with('ruby-debug')
|
1119
1114
|
config.debug = false
|
1120
1115
|
end
|
1116
|
+
end
|
1121
1117
|
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1118
|
+
describe "#debug?" do
|
1119
|
+
it 'returns true if the debugger has been loaded' do
|
1120
|
+
stub_const("Debugger", Object.new)
|
1121
|
+
expect(config.debug?).to be_true
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
it 'returns false if the debugger has not been loaded' do
|
1125
|
+
hide_const("Debugger")
|
1126
|
+
expect(config.debug?).to be_false
|
1125
1127
|
end
|
1126
1128
|
end
|
1127
1129
|
|
@@ -17,6 +17,11 @@ describe RSpec::Core::Deprecation do
|
|
17
17
|
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :call_site => caller(0)[1])
|
18
18
|
RSpec.deprecate("deprecated_method")
|
19
19
|
end
|
20
|
+
|
21
|
+
it "doesn't override the existing callsite" do
|
22
|
+
expect(RSpec.configuration.reporter).to receive(:deprecation).with(hash_including :call_site => "/path")
|
23
|
+
RSpec.deprecate("deprecated_method", :call_site => "/path")
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
context "new API with a hash after the first arg" do
|
@@ -397,7 +397,7 @@ module RSpec::Core
|
|
397
397
|
end
|
398
398
|
end
|
399
399
|
|
400
|
-
[:focus, :focused].each do |example_alias|
|
400
|
+
[:focus, :focused, :fit].each do |example_alias|
|
401
401
|
describe "##{example_alias}" do
|
402
402
|
let(:focused_example) { ExampleGroup.describe.send example_alias, "a focused example" }
|
403
403
|
|
@@ -616,6 +616,24 @@ module RSpec::Core
|
|
616
616
|
})
|
617
617
|
end
|
618
618
|
end
|
619
|
+
|
620
|
+
context "when included modules have hooks that define memoized helpers" do
|
621
|
+
it "allows memoized helpers to override methods in previously included modules" do
|
622
|
+
group = ExampleGroup.describe do
|
623
|
+
include Module.new {
|
624
|
+
def self.included(m); m.let(:unrelated) { :unrelated }; end
|
625
|
+
}
|
626
|
+
|
627
|
+
include Module.new {
|
628
|
+
def hello_message; "Hello from module"; end
|
629
|
+
}
|
630
|
+
|
631
|
+
let(:hello_message) { "Hello from let" }
|
632
|
+
end
|
633
|
+
|
634
|
+
expect(group.new.hello_message).to eq("Hello from let")
|
635
|
+
end
|
636
|
+
end
|
619
637
|
end
|
620
638
|
|
621
639
|
describe "#let!" do
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 2.14.0
|
4
|
+
prerelease:
|
5
|
+
version: 2.14.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Steven Baker
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-07-06 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -382,20 +382,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
382
382
|
version: '0'
|
383
383
|
segments:
|
384
384
|
- 0
|
385
|
-
hash:
|
385
|
+
hash: -1933471996242347119
|
386
386
|
none: false
|
387
387
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
388
388
|
requirements:
|
389
|
-
- - ! '
|
389
|
+
- - ! '>='
|
390
390
|
- !ruby/object:Gem::Version
|
391
|
-
version:
|
391
|
+
version: '0'
|
392
|
+
segments:
|
393
|
+
- 0
|
394
|
+
hash: -1933471996242347119
|
392
395
|
none: false
|
393
396
|
requirements: []
|
394
397
|
rubyforge_project: rspec
|
395
398
|
rubygems_version: 1.8.24
|
396
399
|
signing_key:
|
397
400
|
specification_version: 3
|
398
|
-
summary: rspec-core-2.14.0
|
401
|
+
summary: rspec-core-2.14.0
|
399
402
|
test_files:
|
400
403
|
- features/Autotest.md
|
401
404
|
- features/README.md
|