rspec-mocks 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.
Files changed (35) hide show
  1. data/Changelog.md +25 -0
  2. data/features/message_expectations/allow_any_instance_of.feature +26 -0
  3. data/features/message_expectations/expect_any_instance_of.feature +27 -0
  4. data/features/message_expectations/expect_message_using_expect.feature +4 -0
  5. data/features/method_stubs/README.md +28 -2
  6. data/features/method_stubs/any_instance.feature +5 -1
  7. data/features/method_stubs/as_null_object.feature +6 -1
  8. data/features/method_stubs/simple_return_value_with_allow.feature +44 -0
  9. data/features/method_stubs/{simple_return_value.feature → simple_return_value_with_stub.feature} +0 -0
  10. data/features/method_stubs/stub_implementation.feature +23 -1
  11. data/lib/rspec/mocks.rb +35 -0
  12. data/lib/rspec/mocks/any_instance/chain.rb +27 -18
  13. data/lib/rspec/mocks/any_instance/expectation_chain.rb +1 -28
  14. data/lib/rspec/mocks/any_instance/recorder.rb +1 -2
  15. data/lib/rspec/mocks/any_instance/stub_chain.rb +2 -1
  16. data/lib/rspec/mocks/error_generator.rb +7 -0
  17. data/lib/rspec/mocks/extensions/marshal.rb +7 -7
  18. data/lib/rspec/mocks/matchers/receive.rb +5 -1
  19. data/lib/rspec/mocks/message_expectation.rb +142 -63
  20. data/lib/rspec/mocks/method_double.rb +0 -9
  21. data/lib/rspec/mocks/proxy.rb +0 -5
  22. data/lib/rspec/mocks/proxy_for_nil.rb +2 -1
  23. data/lib/rspec/mocks/syntax.rb +15 -5
  24. data/lib/rspec/mocks/test_double.rb +2 -2
  25. data/lib/rspec/mocks/version.rb +1 -1
  26. data/spec/rspec/mocks/any_instance_spec.rb +26 -0
  27. data/spec/rspec/mocks/block_return_value_spec.rb +18 -0
  28. data/spec/rspec/mocks/combining_implementation_instructions_spec.rb +205 -0
  29. data/spec/rspec/mocks/extensions/marshal_spec.rb +54 -0
  30. data/spec/rspec/mocks/matchers/receive_spec.rb +10 -0
  31. data/spec/rspec/mocks/mock_spec.rb +31 -3
  32. data/spec/rspec/mocks/partial_mock_spec.rb +3 -3
  33. data/spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb +81 -0
  34. data/spec/rspec/mocks/test_double_spec.rb +16 -6
  35. metadata +24 -9
@@ -42,10 +42,34 @@ module RSpec
42
42
  verify @double
43
43
  end
44
44
 
45
- it "warns when should_not_receive is followed by and_return" do
46
- expect(RSpec).to receive(:deprecate).with("and_return with should_not_receive")
45
+ it "prevents confusing double-negative expressions involving `never`" do
46
+ expect {
47
+ @double.should_not_receive(:not_expected).never
48
+ }.to raise_error(/trying to negate it again/)
49
+ end
50
+
51
+ def expect_and_return_warning
52
+ expect(RSpec).to receive(:deprecate).with(/`and_return` on a negative message expectation/)
53
+ end
47
54
 
48
- @double.should_not_receive(:do_something).and_return(1)
55
+ it "warns when `should_not_receive().and_return` is used" do
56
+ expect_and_return_warning
57
+ @double.should_not_receive(:foo).and_return(1)
58
+ end
59
+
60
+ it "warns when `should_receive().never.and_return` is used" do
61
+ expect_and_return_warning
62
+ @double.should_receive(:foo).never.and_return(1)
63
+ end
64
+
65
+ it "warns when `expect().not_to receive().and_return` is used" do
66
+ expect_and_return_warning
67
+ expect(@double).not_to receive(:foo).and_return(1)
68
+ end
69
+
70
+ it "warns when `expect().to receive().never.and_return` is used" do
71
+ expect_and_return_warning
72
+ expect(@double).to receive(:foo).never.and_return(1)
49
73
  end
50
74
 
51
75
  it "passes when receiving message specified as not to be received with different args" do
@@ -92,6 +116,10 @@ module RSpec
92
116
  @double.should_not_receive(:not_expected).with("unexpected text")
93
117
  @double.not_expected "really unexpected text"
94
118
  verify @double
119
+
120
+ @double.should_receive(:not_expected).with("unexpected text").never
121
+ @double.not_expected "really unexpected text"
122
+ verify @double
95
123
  end
96
124
 
97
125
  it "allows block to calculate return values" do
@@ -36,7 +36,7 @@ module RSpec
36
36
  end
37
37
 
38
38
  it "should_not_receive returns a negative message expectation" do
39
- expect(object.should_not_receive(:foobar)).to be_kind_of(RSpec::Mocks::NegativeMessageExpectation)
39
+ expect(object.should_not_receive(:foobar)).to be_negative
40
40
  end
41
41
 
42
42
  it "should_receive mocks out the method" do
@@ -55,8 +55,8 @@ module RSpec
55
55
  expect(object.foobar(hash[:a])).to equal(1)
56
56
  end
57
57
 
58
- it "should_receive returns a message expectation" do
59
- expect(object.should_receive(:foobar)).to be_kind_of(RSpec::Mocks::MessageExpectation)
58
+ it "should_receive returns a positive message expectation" do
59
+ expect(object.should_receive(:foobar)).not_to be_negative
60
60
  object.foobar
61
61
  end
62
62
 
@@ -0,0 +1,81 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec
4
+ module Mocks
5
+
6
+ describe ".allow_message" do
7
+ let(:subject) { Object.new }
8
+
9
+ it "sets up basic message allowance" do
10
+ expect {
11
+ ::RSpec::Mocks.allow_message(subject, :basic)
12
+ }.to change {
13
+ subject.respond_to?(:basic)
14
+ }.to(true)
15
+
16
+ expect(subject.basic).to eq(nil)
17
+ end
18
+
19
+ it "sets up message allowance with params and return value" do
20
+ expect {
21
+ ::RSpec::Mocks.allow_message(subject, :x).with(:in).and_return(:out)
22
+ }.to change {
23
+ subject.respond_to?(:x)
24
+ }.to(true)
25
+
26
+ expect(subject.x(:in)).to eq(:out)
27
+ end
28
+
29
+ it "supports block implementations" do
30
+ ::RSpec::Mocks.allow_message(subject, :message) { :value }
31
+ expect(subject.message).to eq(:value)
32
+ end
33
+
34
+ it "does not set an expectation that the message will be received" do
35
+ ::RSpec::Mocks.allow_message(subject, :message)
36
+ expect { verify subject }.not_to raise_error
37
+ end
38
+ end
39
+
40
+ describe ".expect_message" do
41
+ let(:subject) { Object.new }
42
+
43
+ it "sets up basic message expectation, verifies as uncalled" do
44
+ expect {
45
+ ::RSpec::Mocks.expect_message(subject, :basic)
46
+ }.to change {
47
+ subject.respond_to?(:basic)
48
+ }.to(true)
49
+
50
+ expect { verify subject }.to raise_error(RSpec::Mocks::MockExpectationError)
51
+ end
52
+
53
+ it "fails if never is specified and the message is called" do
54
+ expect {
55
+ ::RSpec::Mocks.expect_message(subject, :foo).never
56
+ subject.foo
57
+ }.to raise_error(/expected.*0 times/)
58
+ end
59
+
60
+ it "sets up basic message expectation, verifies as called" do
61
+ ::RSpec::Mocks.expect_message(subject, :basic)
62
+ subject.basic
63
+ verify subject
64
+ end
65
+
66
+ it "sets up message expectation with params and return value" do
67
+ ::RSpec::Mocks.expect_message(subject, :msg).with(:in).and_return(:out)
68
+ expect(subject.msg(:in)).to eq(:out)
69
+ verify subject
70
+ end
71
+
72
+ it "accepts a block implementation for the expected message" do
73
+ ::RSpec::Mocks.expect_message(subject, :msg) { :value }
74
+ expect(subject.msg).to eq(:value)
75
+ verify subject
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+ end
@@ -31,13 +31,18 @@ module RSpec
31
31
  expect { double.foo }.to raise_error(/Mock "MyDouble" received/)
32
32
  end
33
33
 
34
- it 'stubs the methods passed in the stubs hash' do
35
- double = Module.new do
36
- TestDouble.extend_onto(self, "MyDouble", :a => 5, :b => 10)
37
- end
34
+ [[:should, :expect], [:expect], [:should]].each do |syntax|
35
+ context "with syntax #{syntax.inspect}" do
36
+ include_context "with syntax", syntax
37
+ it 'stubs the methods passed in the stubs hash' do
38
+ double = Module.new do
39
+ TestDouble.extend_onto(self, "MyDouble", :a => 5, :b => 10)
40
+ end
38
41
 
39
- expect(double.a).to eq(5)
40
- expect(double.b).to eq(10)
42
+ expect(double.a).to eq(5)
43
+ expect(double.b).to eq(10)
44
+ end
45
+ end
41
46
  end
42
47
 
43
48
  it 'indicates what type of test double it is in error messages' do
@@ -51,6 +56,11 @@ module RSpec
51
56
  double = Module.new { TestDouble.extend_onto(self) }
52
57
  expect { double.foo }.to raise_error(/Mock received/)
53
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
54
64
  end
55
65
  end
56
66
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-mocks
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: 7
5
- version: 2.14.0.rc1
4
+ prerelease:
5
+ version: 2.14.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Steven Baker
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-27 00:00:00.000000000 Z
13
+ date: 2013-07-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  version_requirements: !ruby/object:Gem::Requirement
@@ -114,9 +114,11 @@ files:
114
114
  - features/argument_matchers/general_matchers.feature
115
115
  - features/argument_matchers/type_matchers.feature
116
116
  - features/message_expectations/README.md
117
+ - features/message_expectations/allow_any_instance_of.feature
117
118
  - features/message_expectations/any_instance.feature
118
119
  - features/message_expectations/block_local_expectations.feature.pending
119
120
  - features/message_expectations/call_original.feature
121
+ - features/message_expectations/expect_any_instance_of.feature
120
122
  - features/message_expectations/expect_message_using_expect.feature
121
123
  - features/message_expectations/expect_message_using_should_receive.feature
122
124
  - features/message_expectations/receive_counts.feature
@@ -124,7 +126,8 @@ files:
124
126
  - features/method_stubs/README.md
125
127
  - features/method_stubs/any_instance.feature
126
128
  - features/method_stubs/as_null_object.feature
127
- - features/method_stubs/simple_return_value.feature
129
+ - features/method_stubs/simple_return_value_with_allow.feature
130
+ - features/method_stubs/simple_return_value_with_stub.feature
128
131
  - features/method_stubs/stub_chain.feature
129
132
  - features/method_stubs/stub_implementation.feature
130
133
  - features/method_stubs/to_ary.feature
@@ -158,8 +161,10 @@ files:
158
161
  - spec/rspec/mocks/bug_report_8165_spec.rb
159
162
  - spec/rspec/mocks/bug_report_830_spec.rb
160
163
  - spec/rspec/mocks/bug_report_957_spec.rb
164
+ - spec/rspec/mocks/combining_implementation_instructions_spec.rb
161
165
  - spec/rspec/mocks/configuration_spec.rb
162
166
  - spec/rspec/mocks/double_spec.rb
167
+ - spec/rspec/mocks/extensions/marshal_spec.rb
163
168
  - spec/rspec/mocks/failing_argument_matchers_spec.rb
164
169
  - spec/rspec/mocks/hash_excluding_matcher_spec.rb
165
170
  - spec/rspec/mocks/hash_including_matcher_spec.rb
@@ -187,6 +192,7 @@ files:
187
192
  - spec/rspec/mocks/stub_implementation_spec.rb
188
193
  - spec/rspec/mocks/stub_spec.rb
189
194
  - spec/rspec/mocks/stubbed_message_expectations_spec.rb
195
+ - spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb
190
196
  - spec/rspec/mocks/test_double_spec.rb
191
197
  - spec/rspec/mocks/to_ary_spec.rb
192
198
  - spec/rspec/mocks/twice_counts_spec.rb
@@ -207,20 +213,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
213
  version: '0'
208
214
  segments:
209
215
  - 0
210
- hash: 1552323332526866969
216
+ hash: 3612137047295133706
211
217
  none: false
212
218
  required_rubygems_version: !ruby/object:Gem::Requirement
213
219
  requirements:
214
- - - ! '>'
220
+ - - ! '>='
215
221
  - !ruby/object:Gem::Version
216
- version: 1.3.1
222
+ version: '0'
223
+ segments:
224
+ - 0
225
+ hash: 3612137047295133706
217
226
  none: false
218
227
  requirements: []
219
228
  rubyforge_project: rspec
220
229
  rubygems_version: 1.8.24
221
230
  signing_key:
222
231
  specification_version: 3
223
- summary: rspec-mocks-2.14.0.rc1
232
+ summary: rspec-mocks-2.14.0
224
233
  test_files:
225
234
  - features/README.md
226
235
  - features/Scope.md
@@ -230,9 +239,11 @@ test_files:
230
239
  - features/argument_matchers/general_matchers.feature
231
240
  - features/argument_matchers/type_matchers.feature
232
241
  - features/message_expectations/README.md
242
+ - features/message_expectations/allow_any_instance_of.feature
233
243
  - features/message_expectations/any_instance.feature
234
244
  - features/message_expectations/block_local_expectations.feature.pending
235
245
  - features/message_expectations/call_original.feature
246
+ - features/message_expectations/expect_any_instance_of.feature
236
247
  - features/message_expectations/expect_message_using_expect.feature
237
248
  - features/message_expectations/expect_message_using_should_receive.feature
238
249
  - features/message_expectations/receive_counts.feature
@@ -240,7 +251,8 @@ test_files:
240
251
  - features/method_stubs/README.md
241
252
  - features/method_stubs/any_instance.feature
242
253
  - features/method_stubs/as_null_object.feature
243
- - features/method_stubs/simple_return_value.feature
254
+ - features/method_stubs/simple_return_value_with_allow.feature
255
+ - features/method_stubs/simple_return_value_with_stub.feature
244
256
  - features/method_stubs/stub_chain.feature
245
257
  - features/method_stubs/stub_implementation.feature
246
258
  - features/method_stubs/to_ary.feature
@@ -274,8 +286,10 @@ test_files:
274
286
  - spec/rspec/mocks/bug_report_8165_spec.rb
275
287
  - spec/rspec/mocks/bug_report_830_spec.rb
276
288
  - spec/rspec/mocks/bug_report_957_spec.rb
289
+ - spec/rspec/mocks/combining_implementation_instructions_spec.rb
277
290
  - spec/rspec/mocks/configuration_spec.rb
278
291
  - spec/rspec/mocks/double_spec.rb
292
+ - spec/rspec/mocks/extensions/marshal_spec.rb
279
293
  - spec/rspec/mocks/failing_argument_matchers_spec.rb
280
294
  - spec/rspec/mocks/hash_excluding_matcher_spec.rb
281
295
  - spec/rspec/mocks/hash_including_matcher_spec.rb
@@ -303,6 +317,7 @@ test_files:
303
317
  - spec/rspec/mocks/stub_implementation_spec.rb
304
318
  - spec/rspec/mocks/stub_spec.rb
305
319
  - spec/rspec/mocks/stubbed_message_expectations_spec.rb
320
+ - spec/rspec/mocks/syntax_agnostic_message_matchers_spec.rb
306
321
  - spec/rspec/mocks/test_double_spec.rb
307
322
  - spec/rspec/mocks/to_ary_spec.rb
308
323
  - spec/rspec/mocks/twice_counts_spec.rb