~ubuntu-branches/ubuntu/oneiric/puppet/oneiric-security

« back to all changes in this revision

Viewing changes to vendor/gems/rspec/spec/spec/mocks/stub_spec.rb

  • Committer: Bazaar Package Importer
  • Author(s): Micah Anderson
  • Date: 2008-07-26 15:43:45 UTC
  • mto: (3.1.1 lenny) (1.3.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20080726154345-1fmgo76b4l72ulvc
ImportĀ upstreamĀ versionĀ 0.24.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
require File.dirname(__FILE__) + '/../../spec_helper.rb'
 
2
 
 
3
module Spec
 
4
  module Mocks
 
5
    describe "A method stub" do
 
6
      before(:each) do
 
7
        @class = Class.new do
 
8
          def self.existing_class_method
 
9
            :original_value
 
10
          end
 
11
 
 
12
          def existing_instance_method
 
13
            :original_value
 
14
          end
 
15
        end
 
16
        @instance = @class.new
 
17
      end
 
18
 
 
19
      it "should return expected value when expected message is received" do
 
20
        @instance.stub!(:msg).and_return(:return_value)
 
21
        @instance.msg.should equal(:return_value)
 
22
        @instance.rspec_verify
 
23
      end
 
24
 
 
25
      it "should ignore when expected message is received" do
 
26
        @instance.stub!(:msg)
 
27
        @instance.msg
 
28
        lambda do
 
29
          @instance.rspec_verify
 
30
        end.should_not raise_error
 
31
      end
 
32
 
 
33
      it "should ignore when message is received with args" do
 
34
        @instance.stub!(:msg)
 
35
        @instance.msg(:an_arg)
 
36
        lambda do
 
37
          @instance.rspec_verify
 
38
        end.should_not raise_error
 
39
      end
 
40
 
 
41
      it "should ignore when expected message is not received" do
 
42
        @instance.stub!(:msg)
 
43
        lambda do
 
44
          @instance.rspec_verify
 
45
        end.should_not raise_error
 
46
      end
 
47
      
 
48
      it "should clear itself when verified" do
 
49
        @instance.stub!(:this_should_go).and_return(:blah)
 
50
        @instance.this_should_go.should == :blah
 
51
        @instance.rspec_verify
 
52
        lambda do
 
53
          @instance.this_should_go
 
54
        end.should raise_error(NameError)
 
55
      end
 
56
 
 
57
      it "should return values in order to consecutive calls" do
 
58
        return_values = ["1",2,Object.new]
 
59
        @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
 
60
        @instance.msg.should == return_values[0]
 
61
        @instance.msg.should == return_values[1]
 
62
        @instance.msg.should == return_values[2]
 
63
      end
 
64
 
 
65
      it "should keep returning last value in consecutive calls" do
 
66
        return_values = ["1",2,Object.new]
 
67
        @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
 
68
        @instance.msg.should == return_values[0]
 
69
        @instance.msg.should == return_values[1]
 
70
        @instance.msg.should == return_values[2]
 
71
        @instance.msg.should == return_values[2]
 
72
        @instance.msg.should == return_values[2]
 
73
      end
 
74
 
 
75
      it "should revert to original instance method if there is one" do
 
76
        @instance.existing_instance_method.should equal(:original_value)
 
77
        @instance.stub!(:existing_instance_method).and_return(:mock_value)
 
78
        @instance.existing_instance_method.should equal(:mock_value)
 
79
        @instance.rspec_verify
 
80
        @instance.existing_instance_method.should equal(:original_value)
 
81
      end
 
82
      
 
83
      it "should revert to original class method if there is one" do
 
84
        @class.existing_class_method.should equal(:original_value)
 
85
        @class.stub!(:existing_class_method).and_return(:mock_value)
 
86
        @class.existing_class_method.should equal(:mock_value)
 
87
        @class.rspec_verify
 
88
        @class.existing_class_method.should equal(:original_value)
 
89
      end
 
90
 
 
91
      it "should yield a specified object" do
 
92
        @instance.stub!(:method_that_yields).and_yield(:yielded_obj)
 
93
        current_value = :value_before
 
94
        @instance.method_that_yields {|val| current_value = val}
 
95
        current_value.should == :yielded_obj
 
96
        @instance.rspec_verify
 
97
      end
 
98
 
 
99
      it "should yield multiple times with multiple calls to and_yield" do
 
100
        @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
 
101
                                                       and_yield(:another_value)
 
102
        current_value = []
 
103
        @instance.method_that_yields_multiple_times {|val| current_value << val}
 
104
        current_value.should == [:yielded_value, :another_value]
 
105
        @instance.rspec_verify
 
106
      end
 
107
      
 
108
      it "should yield a specified object and return another specified object" do
 
109
        yielded_obj = mock("my mock")
 
110
        yielded_obj.should_receive(:foo).with(:bar)
 
111
        @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
 
112
        @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
 
113
      end
 
114
 
 
115
      it "should throw when told to" do
 
116
        @mock.stub!(:something).and_throw(:up)
 
117
        lambda do
 
118
          @mock.something
 
119
        end.should throw_symbol(:up)
 
120
      end
 
121
      
 
122
      it "should override a pre-existing stub" do
 
123
        @stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
 
124
        @stub.existing_instance_method.should == :updated_stub_value
 
125
      end
 
126
      
 
127
      it "should limit " do
 
128
        @stub.stub!(:foo).with("bar")
 
129
        @stub.should_receive(:foo).with("baz")
 
130
        @stub.foo("bar")
 
131
        @stub.foo("baz")
 
132
      end
 
133
    end
 
134
    
 
135
    describe "A method stub with args" do
 
136
      before(:each) do
 
137
        @stub = Object.new
 
138
        @stub.stub!(:foo).with("bar")
 
139
      end
 
140
 
 
141
      it "should not complain if not called" do
 
142
      end
 
143
 
 
144
      it "should not complain if called with arg" do
 
145
        @stub.foo("bar")
 
146
      end
 
147
 
 
148
      it "should complain if called with no arg" do
 
149
        lambda do
 
150
          @stub.foo
 
151
        end.should raise_error
 
152
      end
 
153
 
 
154
      it "should complain if called with other arg" do
 
155
        lambda do
 
156
          @stub.foo("other")
 
157
        end.should raise_error
 
158
      end
 
159
 
 
160
      it "should not complain if also mocked w/ different args" do
 
161
        @stub.should_receive(:foo).with("baz")
 
162
        @stub.foo("bar")
 
163
        @stub.foo("baz")
 
164
      end
 
165
 
 
166
      it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
 
167
        @stub.should_receive(:foo).with("baz")
 
168
        @stub.foo("bar")
 
169
        @stub.foo("baz")
 
170
        lambda do
 
171
          @stub.foo("other")
 
172
        end.should raise_error
 
173
      end
 
174
      
 
175
      it "should support options" do
 
176
        @stub.stub!(:foo, :expected_from => "bar")
 
177
      end
 
178
    end
 
179
 
 
180
  end
 
181
end