rspec-mocks 2.14.6 → 2.99.0.beta1

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.
Files changed (46) hide show
  1. checksums.yaml +8 -8
  2. data/Changelog.md +20 -14
  3. data/lib/rspec/mocks.rb +6 -2
  4. data/lib/rspec/mocks/any_instance/chain.rb +28 -0
  5. data/lib/rspec/mocks/any_instance/expectation_chain.rb +5 -10
  6. data/lib/rspec/mocks/any_instance/recorder.rb +4 -1
  7. data/lib/rspec/mocks/any_instance/stub_chain.rb +5 -5
  8. data/lib/rspec/mocks/caller_filter.rb +55 -0
  9. data/lib/rspec/mocks/configuration.rb +19 -0
  10. data/lib/rspec/mocks/deprecation.rb +9 -1
  11. data/lib/rspec/mocks/extensions/proc.rb +63 -0
  12. data/lib/rspec/mocks/framework.rb +2 -0
  13. data/lib/rspec/mocks/matchers/receive.rb +2 -9
  14. data/lib/rspec/mocks/message_expectation.rb +92 -22
  15. data/lib/rspec/mocks/method_double.rb +2 -2
  16. data/lib/rspec/mocks/proxy_for_nil.rb +2 -2
  17. data/lib/rspec/mocks/space.rb +4 -5
  18. data/lib/rspec/mocks/stub_chain.rb +1 -1
  19. data/lib/rspec/mocks/syntax.rb +3 -3
  20. data/lib/rspec/mocks/targets.rb +1 -1
  21. data/lib/rspec/mocks/test_double.rb +8 -2
  22. data/lib/rspec/mocks/version.rb +1 -1
  23. data/spec/rspec/mocks/and_yield_spec.rb +1 -1
  24. data/spec/rspec/mocks/any_instance/message_chains_spec.rb +3 -3
  25. data/spec/rspec/mocks/any_instance_spec.rb +233 -84
  26. data/spec/rspec/mocks/argument_expectation_spec.rb +4 -4
  27. data/spec/rspec/mocks/block_return_value_spec.rb +49 -11
  28. data/spec/rspec/mocks/bug_report_10263_spec.rb +1 -1
  29. data/spec/rspec/mocks/bug_report_8165_spec.rb +2 -2
  30. data/spec/rspec/mocks/combining_implementation_instructions_spec.rb +4 -4
  31. data/spec/rspec/mocks/double_spec.rb +7 -0
  32. data/spec/rspec/mocks/failing_argument_matchers_spec.rb +1 -0
  33. data/spec/rspec/mocks/matchers/receive_spec.rb +10 -8
  34. data/spec/rspec/mocks/mock_space_spec.rb +10 -0
  35. data/spec/rspec/mocks/mock_spec.rb +20 -1
  36. data/spec/rspec/mocks/mutate_const_spec.rb +25 -25
  37. data/spec/rspec/mocks/null_object_mock_spec.rb +7 -0
  38. data/spec/rspec/mocks/passing_argument_matchers_spec.rb +4 -2
  39. data/spec/rspec/mocks/record_messages_spec.rb +4 -4
  40. data/spec/rspec/mocks/space_spec.rb +1 -1
  41. data/spec/rspec/mocks/stub_chain_spec.rb +8 -12
  42. data/spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb +20 -0
  43. data/spec/rspec/mocks/test_double_spec.rb +0 -5
  44. data/spec/rspec/mocks_spec.rb +14 -0
  45. data/spec/spec_helper.rb +27 -0
  46. metadata +7 -5
@@ -92,9 +92,16 @@ module RSpec
92
92
  it "preserves its nullness to subsequent examples to " +
93
93
  "maintain compatibility with <= 2.13" do
94
94
  RSpec::Mocks.teardown
95
+ allow(RSpec).to receive(:deprecate)
95
96
  expect(@double).to be_null_object
96
97
  expect { @double.some.long.message.chain }.not_to raise_error
97
98
  end
99
+
100
+ it 'prints a deprecation warning when a double is re-used between examples' do
101
+ RSpec::Mocks.teardown
102
+ expect(RSpec).to receive(:deprecate).with(/null-ness/)
103
+ expect { @double.some.long.message.chain }.not_to raise_error
104
+ end
98
105
  end
99
106
 
100
107
  describe "#as_null_object" do
@@ -85,11 +85,13 @@ module RSpec
85
85
  end
86
86
 
87
87
  context "handling block matchers" do
88
+ before { allow_deprecation }
89
+
88
90
  it "matches arguments against RSpec expectations" do
89
91
  @double.should_receive(:random_call).with {|arg1, arg2, arr, *rest|
90
92
  expect(arg1).to eq 5
91
- expect(arg2).to have_at_least(3).characters
92
- expect(arg2).to have_at_most(10).characters
93
+ expect(arg2.length).to be >= 3
94
+ expect(arg2.length).to be <= 10
93
95
  expect(arr.map {|i| i * 2}).to eq [2,4,6]
94
96
  expect(rest).to eq [:fee, "fi", 4]
95
97
  }
@@ -7,19 +7,19 @@ module RSpec
7
7
  @mock = double("mock").as_null_object
8
8
  end
9
9
  it "answers false for received_message? when no messages received" do
10
- expect(@mock.received_message?(:message)).to be_false
10
+ expect(@mock.received_message?(:message)).to be false
11
11
  end
12
12
  it "answers true for received_message? when message received" do
13
13
  @mock.message
14
- expect(@mock.received_message?(:message)).to be_true
14
+ expect(@mock.received_message?(:message)).to be true
15
15
  end
16
16
  it "answers true for received_message? when message received with correct args" do
17
17
  @mock.message 1,2,3
18
- expect(@mock.received_message?(:message, 1,2,3)).to be_true
18
+ expect(@mock.received_message?(:message, 1,2,3)).to be true
19
19
  end
20
20
  it "answers false for received_message? when message received with incorrect args" do
21
21
  @mock.message 1,2,3
22
- expect(@mock.received_message?(:message, 1,2)).to be_false
22
+ expect(@mock.received_message?(:message, 1,2)).to be false
23
23
  end
24
24
  end
25
25
  end
@@ -20,7 +20,7 @@ module RSpec::Mocks
20
20
  parent = parent_class.new
21
21
  child = child_class.new
22
22
 
23
- grandparent_proxy = space.proxy_for(grandparent)
23
+ _ = space.proxy_for(grandparent)
24
24
  parent_proxy = space.proxy_for(parent)
25
25
  child_proxy = space.proxy_for(child)
26
26
 
@@ -5,6 +5,14 @@ module RSpec
5
5
  describe "A chained method stub" do
6
6
  let(:object) { Object.new }
7
7
 
8
+ it 'does not get confused by symbol vs string usage for the messages' do
9
+ object.stub_chain(:foo, :bar => 1)
10
+ object.stub_chain("foo", :bazz => 2)
11
+
12
+ expect(object.foo.bar).to eq(1)
13
+ expect(object.foo.bazz).to eq(2)
14
+ end
15
+
8
16
  context "with one method in chain" do
9
17
  context "using and_return" do
10
18
  it "returns expected value from chaining only one method call" do
@@ -29,18 +37,6 @@ module RSpec
29
37
  end
30
38
 
31
39
  context "with two methods in chain" do
32
- it "accepts any number of arguments to the stubbed messages" do
33
- object.stub_chain(:msg1, :msg2).and_return(:return_value)
34
-
35
- expect(object.msg1("nonsense", :value).msg2("another", :nonsense, 3.0, "value")).to eq(:return_value)
36
- end
37
-
38
- it "accepts any number of arguments to the stubbed messages with a return value from a hash" do
39
- object.stub_chain(:msg1, :msg2 => :return_value)
40
-
41
- expect(object.msg1("nonsense", :value).msg2("another", :nonsense, 3.0, "value")).to eq(:return_value)
42
- end
43
-
44
40
  context "using and_return" do
45
41
  it "returns expected value from chaining two method calls" do
46
42
  object.stub_chain(:msg1, :msg2).and_return(:return_value)
@@ -35,6 +35,16 @@ module RSpec
35
35
  ::RSpec::Mocks.allow_message(subject, :message)
36
36
  expect { verify subject }.not_to raise_error
37
37
  end
38
+
39
+ it 'does not get confused when the string and symbol message form are both used' do
40
+ ::RSpec::Mocks.allow_message(subject, :foo).with(1) { :a }
41
+ ::RSpec::Mocks.allow_message(subject, "foo").with(2) { :b }
42
+
43
+ expect(subject.foo(1)).to eq(:a)
44
+ expect(subject.foo(2)).to eq(:b)
45
+
46
+ reset subject
47
+ end
38
48
  end
39
49
 
40
50
  describe ".expect_message" do
@@ -75,6 +85,16 @@ module RSpec
75
85
  verify subject
76
86
  end
77
87
 
88
+ it 'does not get confused when the string and symbol message form are both used' do
89
+ ::RSpec::Mocks.expect_message(subject, :foo).with(1)
90
+ ::RSpec::Mocks.expect_message(subject, "foo").with(2)
91
+
92
+ subject.foo(1)
93
+ subject.foo(2)
94
+
95
+ verify subject
96
+ end
97
+
78
98
  end
79
99
 
80
100
  end
@@ -56,11 +56,6 @@ module RSpec
56
56
  double = Module.new { TestDouble.extend_onto(self) }
57
57
  expect { double.foo }.to raise_error(/Mock received/)
58
58
  end
59
-
60
- it 'warns of deprecation of :null_object => true' do
61
- RSpec.should_receive :deprecate
62
- double = Class.new { TestDouble.extend_onto self, 'name', :null_object => true }
63
- end
64
59
  end
65
60
  end
66
61
  end
@@ -62,4 +62,18 @@ describe RSpec::Mocks do
62
62
  load "spec/mocks.rb"
63
63
  end
64
64
  end
65
+
66
+ def file_contents_for(lib, filename)
67
+ # http://rubular.com/r/HYpUMftlG2
68
+ path = $LOAD_PATH.find { |p| p.match(/\/rspec-#{lib}(-[a-f0-9]+)?\/lib/) }
69
+ file = File.join(path, filename)
70
+ File.read(file)
71
+ end
72
+
73
+ it 'has an up-to-date caller_filter file' do
74
+ mocks = file_contents_for("mocks", "rspec/mocks/caller_filter.rb")
75
+ core = file_contents_for("core", "rspec/core/caller_filter.rb")
76
+
77
+ expect(mocks).to eq(core)
78
+ end
65
79
  end
@@ -20,6 +20,20 @@ module VerifyAndResetHelpers
20
20
  end
21
21
  end
22
22
 
23
+ # TODO: This is duplicated in rspec-core, should be extracted into
24
+ # rspec-support when that project gets started.
25
+ module HelperMethods
26
+ def expect_deprecation_with_call_site(file, line)
27
+ expect(RSpec.configuration.reporter).to receive(:deprecation) do |options|
28
+ expect(options[:call_site]).to include([file, line].join(':'))
29
+ end
30
+ end
31
+
32
+ def allow_deprecation
33
+ allow(RSpec.configuration.reporter).to receive(:deprecation)
34
+ end
35
+ end
36
+
23
37
  RSpec.configure do |config|
24
38
  config.mock_with :rspec
25
39
  config.color_enabled = true
@@ -34,6 +48,7 @@ RSpec.configure do |config|
34
48
 
35
49
  old_verbose = nil
36
50
  config.before(:each, :silence_warnings) do
51
+ allow(RSpec).to receive(:deprecate)
37
52
  old_verbose = $VERBOSE
38
53
  $VERBOSE = nil
39
54
  end
@@ -43,6 +58,7 @@ RSpec.configure do |config|
43
58
  end
44
59
 
45
60
  config.include VerifyAndResetHelpers
61
+ config.include HelperMethods
46
62
  end
47
63
 
48
64
  shared_context "with syntax" do |syntax|
@@ -58,3 +74,14 @@ shared_context "with syntax" do |syntax|
58
74
  end
59
75
  end
60
76
 
77
+ shared_context "with isolated configuration" do
78
+ orig_configuration = nil
79
+ before do
80
+ orig_configuration = RSpec::Mocks.configuration
81
+ RSpec::Mocks.instance_variable_set(:@configuration, RSpec::Mocks::Configuration.new)
82
+ end
83
+
84
+ after do
85
+ RSpec::Mocks.instance_variable_set(:@configuration, orig_configuration)
86
+ end
87
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-mocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.6
4
+ version: 2.99.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Baker
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-20 00:00:00.000000000 Z
12
+ date: 2013-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -68,6 +68,7 @@ files:
68
68
  - lib/rspec/mocks/any_instance/stub_chain_chain.rb
69
69
  - lib/rspec/mocks/argument_list_matcher.rb
70
70
  - lib/rspec/mocks/argument_matchers.rb
71
+ - lib/rspec/mocks/caller_filter.rb
71
72
  - lib/rspec/mocks/configuration.rb
72
73
  - lib/rspec/mocks/deprecation.rb
73
74
  - lib/rspec/mocks/error_generator.rb
@@ -75,6 +76,7 @@ files:
75
76
  - lib/rspec/mocks/example_methods.rb
76
77
  - lib/rspec/mocks/extensions/instance_exec.rb
77
78
  - lib/rspec/mocks/extensions/marshal.rb
79
+ - lib/rspec/mocks/extensions/proc.rb
78
80
  - lib/rspec/mocks/framework.rb
79
81
  - lib/rspec/mocks/instance_method_stasher.rb
80
82
  - lib/rspec/mocks/matchers/have_received.rb
@@ -209,15 +211,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
211
  version: '0'
210
212
  required_rubygems_version: !ruby/object:Gem::Requirement
211
213
  requirements:
212
- - - ! '>='
214
+ - - ! '>'
213
215
  - !ruby/object:Gem::Version
214
- version: '0'
216
+ version: 1.3.1
215
217
  requirements: []
216
218
  rubyforge_project: rspec
217
219
  rubygems_version: 2.0.7
218
220
  signing_key:
219
221
  specification_version: 4
220
- summary: rspec-mocks-2.14.6
222
+ summary: rspec-mocks-2.99.0.beta1
221
223
  test_files:
222
224
  - features/README.md
223
225
  - features/Scope.md