rspec-mocks 2.14.6 → 2.99.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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