spy 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.travis.yml +5 -0
  2. data/Gemfile +1 -0
  3. data/README.md +22 -7
  4. data/Rakefile +2 -0
  5. data/lib/spy.rb +39 -6
  6. data/lib/spy/agency.rb +42 -27
  7. data/lib/spy/call_log.rb +26 -0
  8. data/lib/spy/constant.rb +72 -14
  9. data/lib/spy/core_ext/marshal.rb +1 -0
  10. data/lib/spy/double.rb +17 -0
  11. data/lib/spy/nest.rb +27 -0
  12. data/lib/spy/subroutine.rb +146 -44
  13. data/lib/spy/version.rb +1 -1
  14. data/spec/spy/any_instance_spec.rb +518 -0
  15. data/spec/spy/mock_spec.rb +46 -554
  16. data/spec/spy/mutate_const_spec.rb +21 -63
  17. data/spec/spy/null_object_mock_spec.rb +11 -39
  18. data/spec/spy/partial_mock_spec.rb +3 -62
  19. data/spec/spy/stash_spec.rb +30 -37
  20. data/spec/spy/stub_spec.rb +0 -6
  21. data/spec/spy/to_ary_spec.rb +5 -5
  22. data/test/integration/test_constant_spying.rb +1 -1
  23. data/test/integration/test_instance_method.rb +32 -0
  24. data/test/integration/test_subroutine_spying.rb +7 -4
  25. data/test/spy/test_double.rb +4 -0
  26. data/test/spy/test_subroutine.rb +28 -3
  27. data/test/support/pen.rb +15 -0
  28. metadata +8 -30
  29. data/spec/spy/bug_report_10260_spec.rb +0 -8
  30. data/spec/spy/bug_report_10263_spec.rb +0 -24
  31. data/spec/spy/bug_report_496_spec.rb +0 -18
  32. data/spec/spy/bug_report_600_spec.rb +0 -24
  33. data/spec/spy/bug_report_7611_spec.rb +0 -16
  34. data/spec/spy/bug_report_8165_spec.rb +0 -31
  35. data/spec/spy/bug_report_830_spec.rb +0 -21
  36. data/spec/spy/bug_report_957_spec.rb +0 -22
  37. data/spec/spy/double_spec.rb +0 -12
  38. data/spec/spy/failing_argument_matchers_spec.rb +0 -94
  39. data/spec/spy/options_hash_spec.rb +0 -35
  40. data/spec/spy/precise_counts_spec.rb +0 -68
  41. data/spec/spy/stubbed_message_expectations_spec.rb +0 -47
  42. data/spec/spy/test_double_spec.rb +0 -54
@@ -1,12 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "double" do
4
- it "is an alias for stub and mock" do
5
- expect(double()).to be_a(RSpec::Mocks::Mock)
6
- end
7
-
8
- it "uses 'Double' in failure messages" do
9
- double = double('name')
10
- expect {double.foo}.to raise_error(/Double "name" received/)
11
- end
12
- end
@@ -1,94 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Mocks
5
- describe "failing MockArgumentMatchers" do
6
- before(:each) do
7
- @double = double("double")
8
- @reporter = double("reporter").as_null_object
9
- end
10
-
11
- after(:each) do
12
- @double.rspec_reset
13
- end
14
-
15
- it "rejects non boolean" do
16
- @double.should_receive(:random_call).with(boolean())
17
- expect do
18
- @double.random_call("false")
19
- end.to raise_error(RSpec::Mocks::MockExpectationError)
20
- end
21
-
22
- it "rejects non numeric" do
23
- @double.should_receive(:random_call).with(an_instance_of(Numeric))
24
- expect do
25
- @double.random_call("1")
26
- end.to raise_error(RSpec::Mocks::MockExpectationError)
27
- end
28
-
29
- it "rejects non string" do
30
- @double.should_receive(:random_call).with(an_instance_of(String))
31
- expect do
32
- @double.random_call(123)
33
- end.to raise_error(RSpec::Mocks::MockExpectationError)
34
- end
35
-
36
- it "rejects goose when expecting a duck" do
37
- @double.should_receive(:random_call).with(duck_type(:abs, :div))
38
- expect { @double.random_call("I don't respond to :abs or :div") }.to raise_error(RSpec::Mocks::MockExpectationError)
39
- end
40
-
41
- it "fails if regexp does not match submitted string" do
42
- @double.should_receive(:random_call).with(/bcd/)
43
- expect { @double.random_call("abc") }.to raise_error(RSpec::Mocks::MockExpectationError)
44
- end
45
-
46
- it "fails if regexp does not match submitted regexp" do
47
- @double.should_receive(:random_call).with(/bcd/)
48
- expect { @double.random_call(/bcde/) }.to raise_error(RSpec::Mocks::MockExpectationError)
49
- end
50
-
51
- it "fails for a hash w/ wrong values" do
52
- @double.should_receive(:random_call).with(:a => "b", :c => "d")
53
- expect do
54
- @double.random_call(:a => "b", :c => "e")
55
- end.to raise_error(RSpec::Mocks::MockExpectationError, /Double "double" received :random_call with unexpected arguments\n expected: \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\)\n got: \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/)
56
- end
57
-
58
- it "fails for a hash w/ wrong keys" do
59
- @double.should_receive(:random_call).with(:a => "b", :c => "d")
60
- expect do
61
- @double.random_call("a" => "b", "c" => "d")
62
- end.to raise_error(RSpec::Mocks::MockExpectationError, /Double "double" received :random_call with unexpected arguments\n expected: \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\)\n got: \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/)
63
- end
64
-
65
- it "matches against a Matcher" do
66
- expect do
67
- @double.should_receive(:msg).with(equal(3))
68
- @double.msg(37)
69
- end.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"double\" received :msg with unexpected arguments\n expected: (equal 3)\n got: (37)")
70
- end
71
-
72
- it "fails no_args with one arg" do
73
- expect do
74
- @double.should_receive(:msg).with(no_args)
75
- @double.msg(37)
76
- end.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"double\" received :msg with unexpected arguments\n expected: (no args)\n got: (37)")
77
- end
78
-
79
- it "fails hash_including with missing key" do
80
- expect do
81
- @double.should_receive(:msg).with(hash_including(:a => 1))
82
- @double.msg({})
83
- end.to raise_error(RSpec::Mocks::MockExpectationError, "Double \"double\" received :msg with unexpected arguments\n expected: (hash_including(:a=>1))\n got: ({})")
84
- end
85
-
86
- it "fails with block matchers" do
87
- expect do
88
- @double.should_receive(:msg).with {|arg| expect(arg).to eq :received }
89
- @double.msg :no_msg_for_you
90
- end.to raise_error(RSpec::Expectations::ExpectationNotMetError, /expected: :received.*\s*.*got: :no_msg_for_you/)
91
- end
92
- end
93
- end
94
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Mocks
5
- describe "calling :should_receive with an options hash" do
6
- it "reports the file and line submitted with :expected_from" do
7
- begin
8
- mock = RSpec::Mocks::Mock.new("a mock")
9
- mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
10
- mock.rspec_verify
11
- rescue Exception => e
12
- ensure
13
- expect(e.backtrace.to_s).to match /\/path\/to\/blah.ext:37/m
14
- end
15
- end
16
-
17
- it "uses the message supplied with :message" do
18
- expect {
19
- m = RSpec::Mocks::Mock.new("a mock")
20
- m.should_receive(:message, :message => "recebi nada")
21
- m.rspec_verify
22
- }.to raise_error("recebi nada")
23
- end
24
-
25
- it "uses the message supplied with :message after a similar stub" do
26
- expect {
27
- m = RSpec::Mocks::Mock.new("a mock")
28
- Spy.on(m, :message)
29
- m.should_receive(:message, :message => "from mock")
30
- m.rspec_verify
31
- }.to raise_error("from mock")
32
- end
33
- end
34
- end
35
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec
4
- module Mocks
5
- describe "PreciseCounts" do
6
- before(:each) do
7
- @double = double("test double")
8
- end
9
-
10
- it "fails when exactly n times method is called less than n times" do
11
- @double.should_receive(:do_something).exactly(3).times
12
- @double.do_something
13
- @double.do_something
14
- expect {
15
- @double.rspec_verify
16
- }.to raise_error(RSpec::Mocks::MockExpectationError)
17
- end
18
-
19
- it "fails fast when exactly n times method is called more than n times" do
20
- @double.should_receive(:do_something).exactly(3).times
21
- @double.do_something
22
- @double.do_something
23
- @double.do_something
24
- expect {
25
- @double.do_something
26
- }.to raise_error(RSpec::Mocks::MockExpectationError)
27
- end
28
-
29
- it "fails when exactly n times method is never called" do
30
- @double.should_receive(:do_something).exactly(3).times
31
- expect {
32
- @double.rspec_verify
33
- }.to raise_error(RSpec::Mocks::MockExpectationError)
34
- end
35
-
36
- it "passes if exactly n times method is called exactly n times" do
37
- @double.should_receive(:do_something).exactly(3).times
38
- @double.do_something
39
- @double.do_something
40
- @double.do_something
41
- @double.rspec_verify
42
- end
43
-
44
- it "returns the value given by a block when the exactly once method is called" do
45
- @double.should_receive(:to_s).exactly(:once) { "testing" }
46
- expect(@double.to_s).to eq "testing"
47
- @double.rspec_verify
48
- end
49
-
50
- it "passes mutiple calls with different args" do
51
- @double.should_receive(:do_something).once.with(1)
52
- @double.should_receive(:do_something).once.with(2)
53
- @double.do_something(1)
54
- @double.do_something(2)
55
- @double.rspec_verify
56
- end
57
-
58
- it "passes multiple calls with different args and counts" do
59
- @double.should_receive(:do_something).twice.with(1)
60
- @double.should_receive(:do_something).once.with(2)
61
- @double.do_something(1)
62
- @double.do_something(2)
63
- @double.do_something(1)
64
- @double.rspec_verify
65
- end
66
- end
67
- end
68
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "expection set on previously stubbed method" do
4
- it "fails if message is not received after expectation is set" do
5
- double = double(:msg => nil)
6
- double.msg
7
- double.should_receive(:msg)
8
- expect { double.rspec_verify }.to raise_error(RSpec::Mocks::MockExpectationError)
9
- end
10
-
11
- it "outputs arguments of similar calls" do
12
- double = double('double', :foo => true)
13
- double.should_receive(:foo).with('first')
14
- double.foo('second')
15
- double.foo('third')
16
- expect {
17
- double.rspec_verify
18
- }.to raise_error(%Q|Double "double" received :foo with unexpected arguments\n expected: ("first")\n got: ("second"), ("third")|)
19
- double.rspec_reset
20
- end
21
-
22
- context "with argument constraint on stub" do
23
- it "matches any args if no arg constraint set on expectation" do
24
- double = double("mock")
25
- Spy.on(double, :foo).with(3).and_return("stub")
26
- double.should_receive(:foo).at_least(:once).and_return("expectation")
27
- double.foo
28
- double.rspec_verify
29
- end
30
-
31
- it "matches specific args set on expectation" do
32
- double = double("mock")
33
- Spy.on(double, :foo).with(3).and_return("stub")
34
- double.should_receive(:foo).at_least(:once).with(4).and_return("expectation")
35
- double.foo(4)
36
- double.rspec_verify
37
- end
38
-
39
- it "fails if expectation's arg constraint is not met" do
40
- double = double("mock")
41
- Spy.on(double, :foo).with(3).and_return("stub")
42
- double.should_receive(:foo).at_least(:once).with(4).and_return("expectation")
43
- double.foo(3)
44
- expect { double.rspec_verify }.to raise_error(/expected: \(4\)\s+got: \(3\)/)
45
- end
46
- end
47
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spy
4
- describe Double do
5
- before(:all) do
6
- Module.class_eval do
7
- private
8
- def use; end
9
- end
10
- end
11
-
12
- after(:all) do
13
- Module.class_eval do
14
- undef use
15
- end
16
- end
17
-
18
- it 'can be extended onto a module to make it a pure test double that can mock private methods' do
19
- double = Module.new
20
- Spy.on(double, :use)
21
- expect { double.use }.to raise_error(/private method `use' called/)
22
-
23
- double = Module.new { TestDouble.extend_onto(self) }
24
- double.should_receive(:use).and_return(:ok)
25
- expect(double.use).to be(:ok)
26
- end
27
-
28
- it 'sets the test double name when a name is passed' do
29
- double = Module.new { TestDouble.extend_onto(self, "MyDouble") }
30
- expect { double.foo }.to raise_error(/Mock "MyDouble" received/)
31
- end
32
-
33
- it 'stubs the methods passed in the stubs hash' do
34
- double = Module.new do
35
- TestDouble.extend_onto(self, "MyDouble", :a => 5, :b => 10)
36
- end
37
-
38
- expect(double.a).to eq(5)
39
- expect(double.b).to eq(10)
40
- end
41
-
42
- it 'indicates what type of test double it is in error messages' do
43
- double = Module.new do
44
- TestDouble.extend_onto(self, "A", :__declared_as => "ModuleMock")
45
- end
46
- expect { double.foo }.to raise_error(/ModuleMock "A"/)
47
- end
48
-
49
- it 'is declared as a mock by default' do
50
- double = Module.new { TestDouble.extend_onto(self) }
51
- expect { double.foo }.to raise_error(/Mock received/)
52
- end
53
- end
54
- end