mspec 1.0.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.
- data/LICENSE +22 -0
- data/README +101 -0
- data/Rakefile +44 -0
- data/bin/mkspec +7 -0
- data/bin/mspec +7 -0
- data/bin/mspec-ci +8 -0
- data/bin/mspec-run +8 -0
- data/bin/mspec-tag +8 -0
- data/lib/mspec.rb +6 -0
- data/lib/mspec/commands/mkspec.rb +147 -0
- data/lib/mspec/commands/mspec-ci.rb +71 -0
- data/lib/mspec/commands/mspec-run.rb +80 -0
- data/lib/mspec/commands/mspec-tag.rb +87 -0
- data/lib/mspec/commands/mspec.rb +143 -0
- data/lib/mspec/expectations.rb +2 -0
- data/lib/mspec/expectations/expectations.rb +12 -0
- data/lib/mspec/expectations/should.rb +23 -0
- data/lib/mspec/guards.rb +13 -0
- data/lib/mspec/guards/bug.rb +27 -0
- data/lib/mspec/guards/compliance.rb +18 -0
- data/lib/mspec/guards/conflict.rb +16 -0
- data/lib/mspec/guards/endian.rb +40 -0
- data/lib/mspec/guards/extensions.rb +12 -0
- data/lib/mspec/guards/guard.rb +120 -0
- data/lib/mspec/guards/noncompliance.rb +12 -0
- data/lib/mspec/guards/platform.rb +38 -0
- data/lib/mspec/guards/quarantine.rb +15 -0
- data/lib/mspec/guards/runner.rb +30 -0
- data/lib/mspec/guards/superuser.rb +15 -0
- data/lib/mspec/guards/support.rb +12 -0
- data/lib/mspec/guards/version.rb +40 -0
- data/lib/mspec/helpers.rb +6 -0
- data/lib/mspec/helpers/bignum.rb +5 -0
- data/lib/mspec/helpers/const_lookup.rb +5 -0
- data/lib/mspec/helpers/flunk.rb +5 -0
- data/lib/mspec/helpers/io.rb +13 -0
- data/lib/mspec/helpers/scratch.rb +17 -0
- data/lib/mspec/helpers/tmp.rb +32 -0
- data/lib/mspec/matchers.rb +16 -0
- data/lib/mspec/matchers/base.rb +95 -0
- data/lib/mspec/matchers/be_ancestor_of.rb +24 -0
- data/lib/mspec/matchers/be_close.rb +27 -0
- data/lib/mspec/matchers/be_empty.rb +20 -0
- data/lib/mspec/matchers/be_false.rb +20 -0
- data/lib/mspec/matchers/be_kind_of.rb +24 -0
- data/lib/mspec/matchers/be_nil.rb +20 -0
- data/lib/mspec/matchers/be_true.rb +20 -0
- data/lib/mspec/matchers/complain.rb +56 -0
- data/lib/mspec/matchers/eql.rb +26 -0
- data/lib/mspec/matchers/equal.rb +26 -0
- data/lib/mspec/matchers/equal_utf16.rb +34 -0
- data/lib/mspec/matchers/include.rb +32 -0
- data/lib/mspec/matchers/output.rb +67 -0
- data/lib/mspec/matchers/output_to_fd.rb +71 -0
- data/lib/mspec/matchers/raise_error.rb +48 -0
- data/lib/mspec/mocks.rb +3 -0
- data/lib/mspec/mocks/mock.rb +123 -0
- data/lib/mspec/mocks/object.rb +28 -0
- data/lib/mspec/mocks/proxy.rb +112 -0
- data/lib/mspec/runner.rb +13 -0
- data/lib/mspec/runner/actions.rb +6 -0
- data/lib/mspec/runner/actions/debug.rb +17 -0
- data/lib/mspec/runner/actions/filter.rb +40 -0
- data/lib/mspec/runner/actions/gdb.rb +17 -0
- data/lib/mspec/runner/actions/tag.rb +97 -0
- data/lib/mspec/runner/actions/tally.rb +80 -0
- data/lib/mspec/runner/actions/timer.rb +22 -0
- data/lib/mspec/runner/filters.rb +4 -0
- data/lib/mspec/runner/filters/match.rb +22 -0
- data/lib/mspec/runner/filters/profile.rb +54 -0
- data/lib/mspec/runner/filters/regexp.rb +7 -0
- data/lib/mspec/runner/filters/tag.rb +29 -0
- data/lib/mspec/runner/formatters.rb +7 -0
- data/lib/mspec/runner/formatters/dotted.rb +81 -0
- data/lib/mspec/runner/formatters/html.rb +87 -0
- data/lib/mspec/runner/formatters/specdoc.rb +27 -0
- data/lib/mspec/runner/formatters/spinner.rb +89 -0
- data/lib/mspec/runner/formatters/summary.rb +8 -0
- data/lib/mspec/runner/formatters/unit.rb +25 -0
- data/lib/mspec/runner/formatters/yaml.rb +43 -0
- data/lib/mspec/runner/mspec.rb +232 -0
- data/lib/mspec/runner/object.rb +20 -0
- data/lib/mspec/runner/shared.rb +12 -0
- data/lib/mspec/runner/state.rb +116 -0
- data/lib/mspec/runner/tag.rb +20 -0
- data/lib/mspec/utils/name_map.rb +130 -0
- data/lib/mspec/utils/options.rb +344 -0
- data/lib/mspec/utils/script.rb +77 -0
- data/lib/mspec/version.rb +3 -0
- data/spec/commands/mkspec_spec.rb +321 -0
- data/spec/commands/mspec_ci_spec.rb +139 -0
- data/spec/commands/mspec_run_spec.rb +146 -0
- data/spec/commands/mspec_spec.rb +359 -0
- data/spec/commands/mspec_tag_spec.rb +131 -0
- data/spec/expectations/expectations_spec.rb +16 -0
- data/spec/expectations/should_spec.rb +99 -0
- data/spec/guards/bug_spec.rb +137 -0
- data/spec/guards/compliance_spec.rb +70 -0
- data/spec/guards/conflict_spec.rb +20 -0
- data/spec/guards/endian_spec.rb +42 -0
- data/spec/guards/extensions_spec.rb +36 -0
- data/spec/guards/guard_spec.rb +355 -0
- data/spec/guards/noncompliance_spec.rb +36 -0
- data/spec/guards/platform_spec.rb +84 -0
- data/spec/guards/quarantine_spec.rb +19 -0
- data/spec/guards/runner_spec.rb +75 -0
- data/spec/guards/superuser_spec.rb +22 -0
- data/spec/guards/support_spec.rb +22 -0
- data/spec/guards/version_spec.rb +133 -0
- data/spec/helpers/bignum_spec.rb +11 -0
- data/spec/helpers/const_lookup_spec.rb +19 -0
- data/spec/helpers/flunk_spec.rb +15 -0
- data/spec/helpers/io_spec.rb +34 -0
- data/spec/helpers/scratch_spec.rb +22 -0
- data/spec/helpers/tmp_spec.rb +72 -0
- data/spec/matchers/base_spec.rb +180 -0
- data/spec/matchers/be_ancestor_of_spec.rb +28 -0
- data/spec/matchers/be_close_spec.rb +46 -0
- data/spec/matchers/be_empty_spec.rb +26 -0
- data/spec/matchers/be_false_spec.rb +28 -0
- data/spec/matchers/be_kind_of_spec.rb +29 -0
- data/spec/matchers/be_nil_spec.rb +27 -0
- data/spec/matchers/be_true_spec.rb +28 -0
- data/spec/matchers/complain_spec.rb +52 -0
- data/spec/matchers/eql_spec.rb +33 -0
- data/spec/matchers/equal_spec.rb +33 -0
- data/spec/matchers/equal_utf16_spec.rb +47 -0
- data/spec/matchers/include_spec.rb +37 -0
- data/spec/matchers/output_spec.rb +74 -0
- data/spec/matchers/output_to_fd_spec.rb +33 -0
- data/spec/matchers/raise_error_spec.rb +56 -0
- data/spec/mocks/mock_spec.rb +272 -0
- data/spec/mocks/proxy_spec.rb +259 -0
- data/spec/runner/actions/debug_spec.rb +61 -0
- data/spec/runner/actions/filter_spec.rb +84 -0
- data/spec/runner/actions/gdb_spec.rb +61 -0
- data/spec/runner/actions/tag_spec.rb +253 -0
- data/spec/runner/actions/tally_spec.rb +107 -0
- data/spec/runner/actions/timer_spec.rb +42 -0
- data/spec/runner/filters/a.yaml +4 -0
- data/spec/runner/filters/b.yaml +11 -0
- data/spec/runner/filters/match_spec.rb +44 -0
- data/spec/runner/filters/profile_spec.rb +117 -0
- data/spec/runner/filters/regexp_spec.rb +13 -0
- data/spec/runner/filters/tag_spec.rb +77 -0
- data/spec/runner/formatters/dotted_spec.rb +184 -0
- data/spec/runner/formatters/html_spec.rb +191 -0
- data/spec/runner/formatters/specdoc_spec.rb +57 -0
- data/spec/runner/formatters/spinner_spec.rb +78 -0
- data/spec/runner/formatters/summary_spec.rb +29 -0
- data/spec/runner/formatters/unit_spec.rb +71 -0
- data/spec/runner/formatters/yaml_spec.rb +123 -0
- data/spec/runner/mspec_spec.rb +393 -0
- data/spec/runner/shared_spec.rb +41 -0
- data/spec/runner/state_spec.rb +535 -0
- data/spec/runner/tag_spec.rb +93 -0
- data/spec/runner/tags.txt +3 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/utils/name_map_spec.rb +178 -0
- data/spec/utils/options_spec.rb +862 -0
- data/spec/utils/script_spec.rb +240 -0
- metadata +217 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# This is a bit awkward. Currently the way to verify that the
|
|
2
|
+
# opposites are true (for example a failure when the specified
|
|
3
|
+
# arguments are NOT provided) is to simply alter the particular
|
|
4
|
+
# spec to a failure condition.
|
|
5
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
6
|
+
require 'mspec/runner/mspec'
|
|
7
|
+
require 'mspec/mocks/mock'
|
|
8
|
+
require 'mspec/mocks/proxy'
|
|
9
|
+
|
|
10
|
+
describe Mock do
|
|
11
|
+
after :each do
|
|
12
|
+
Mock.cleanup
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "provides expects that returns a Hash" do
|
|
16
|
+
Mock.expects.should be_an_instance_of(Hash)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe Mock, ".replaced_name" do
|
|
21
|
+
it "returns the name for a method that is being replaced by a mock method" do
|
|
22
|
+
Mock.replaced_name(:method_call).should == :__ms_method_call__
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe Mock, ".install_method" do
|
|
27
|
+
before :each do
|
|
28
|
+
@mock = mock('install_method')
|
|
29
|
+
MSpec.stub!(:actions)
|
|
30
|
+
MSpec.stub!(:current).and_return(mock("spec state", :null_object => true))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
after :each do
|
|
34
|
+
Mock.cleanup
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "returns a MockProxy instance" do
|
|
38
|
+
Mock.install_method(@mock, :method_call).should be_an_instance_of(MockProxy)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "sets the proxy to expect exactly 1 call" do
|
|
42
|
+
proxy = Mock.install_method(@mock, :method_call)
|
|
43
|
+
proxy.count.should == [:exactly, 1]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "does not override a previously mocked method with the same name" do
|
|
47
|
+
Mock.install_method(@mock, :method_call).with(:a, :b).and_return(1)
|
|
48
|
+
Mock.install_method(@mock, :method_call).with(:c).and_return(2)
|
|
49
|
+
@mock.method_call(:a, :b)
|
|
50
|
+
@mock.method_call(:c)
|
|
51
|
+
lambda { @mock.method_call(:d) }.should raise_error(ExpectationNotMetError)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "properly sends #respond_to? calls to the aliased respond_to? method when not matching mock expectations" do
|
|
55
|
+
Mock.install_method(@mock, :respond_to?).with(:to_str).and_return('mock to_str')
|
|
56
|
+
Mock.install_method(@mock, :respond_to?).with(:to_int).and_return('mock to_int')
|
|
57
|
+
@mock.respond_to?(:to_str).should == 'mock to_str'
|
|
58
|
+
@mock.respond_to?(:to_int).should == 'mock to_int'
|
|
59
|
+
@mock.respond_to?(:to_s).should == true
|
|
60
|
+
@mock.respond_to?(:not_really_a_real_method_seriously).should == false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "adds to the expectation tally" do
|
|
64
|
+
state = mock("run state", :null_object => true)
|
|
65
|
+
state.stub!(:state).and_return(mock("spec state"))
|
|
66
|
+
MSpec.should_receive(:current).and_return(state)
|
|
67
|
+
MSpec.should_receive(:actions).with(:expectation, state.state)
|
|
68
|
+
Mock.install_method(@mock, :method_call).and_return(1)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe Mock, ".verify_call" do
|
|
73
|
+
before :each do
|
|
74
|
+
MSpec.stub!(:actions)
|
|
75
|
+
MSpec.stub!(:current).and_return(mock("spec state", :null_object => true))
|
|
76
|
+
|
|
77
|
+
@mock = mock('verify_call')
|
|
78
|
+
@proxy = Mock.install_method @mock, :method_call
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
after :each do
|
|
82
|
+
ScratchPad.clear
|
|
83
|
+
Mock.cleanup
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "does not raise an exception when the mock method receives the expected arguments" do
|
|
87
|
+
@proxy.with(1, 'two', :three)
|
|
88
|
+
Mock.verify_call @mock, :method_call, 1, 'two', :three
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "raises an ExpectationNotMetError when the mock method does not receive the expected arguments" do
|
|
92
|
+
@proxy.with(4, 2)
|
|
93
|
+
lambda {
|
|
94
|
+
Mock.verify_call @mock, :method_call, 42
|
|
95
|
+
}.should raise_error(ExpectationNotMetError)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "raises an ExpectationNotMetError when the mock method is called with arguments but expects none" do
|
|
99
|
+
lambda {
|
|
100
|
+
@proxy.with(:no_args)
|
|
101
|
+
Mock.verify_call @mock, :method_call, "hello"
|
|
102
|
+
}.should raise_error(ExpectationNotMetError)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "raises an ExpectationNotMetError when the mock method is called with no arguments but expects some" do
|
|
106
|
+
@proxy.with("hello", "beautiful", "world")
|
|
107
|
+
lambda {
|
|
108
|
+
Mock.verify_call @mock, :method_call
|
|
109
|
+
}.should raise_error(ExpectationNotMetError)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "does not raise an exception when the mock method is called with arguments and is expecting :any_args" do
|
|
113
|
+
@proxy.with(:any_args)
|
|
114
|
+
Mock.verify_call @mock, :method_call, 1, 2, 3
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "yields a passed block when it is expected to" do
|
|
118
|
+
@proxy.and_yield()
|
|
119
|
+
Mock.verify_call @mock, :method_call do
|
|
120
|
+
ScratchPad.record true
|
|
121
|
+
end
|
|
122
|
+
ScratchPad.recorded.should == true
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "does not yield a passed block when it is not expected to" do
|
|
126
|
+
Mock.verify_call @mock, :method_call do
|
|
127
|
+
ScratchPad.record true
|
|
128
|
+
end
|
|
129
|
+
ScratchPad.recorded.should == nil
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "can yield subsequently" do
|
|
133
|
+
@proxy.and_yield(1).and_yield(2).and_yield(3)
|
|
134
|
+
|
|
135
|
+
ScratchPad.record []
|
|
136
|
+
Mock.verify_call @mock, :method_call do |arg|
|
|
137
|
+
ScratchPad << arg
|
|
138
|
+
end
|
|
139
|
+
ScratchPad.recorded.should == [1, 2, 3]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "can yield and return an expected value" do
|
|
143
|
+
@proxy.and_yield(1).and_return(3)
|
|
144
|
+
|
|
145
|
+
Mock.verify_call(@mock, :method_call) { |arg| ScratchPad.record arg }.should == 3
|
|
146
|
+
ScratchPad.recorded.should == 1
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "raises an expection when it is expected to yield but no block is given" do
|
|
150
|
+
@proxy.and_yield(1, 2, 3)
|
|
151
|
+
lambda {
|
|
152
|
+
Mock.verify_call(@mock, :method_call)
|
|
153
|
+
}.should raise_error(ExpectationNotMetError)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "raises an expection when it is expected to yield more arguments than the block can take" do
|
|
157
|
+
@proxy.and_yield(1, 2, 3)
|
|
158
|
+
lambda {
|
|
159
|
+
Mock.verify_call(@mock, :method_call) {|a, b|}
|
|
160
|
+
}.should raise_error(ExpectationNotMetError)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "does not raise an expection when it is expected to yield to a block that can take any number of arguments" do
|
|
164
|
+
@proxy.and_yield(1, 2, 3)
|
|
165
|
+
lambda {
|
|
166
|
+
Mock.verify_call(@mock, :method_call) {|*a|}
|
|
167
|
+
}.should_not raise_error(ExpectationNotMetError)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe Mock, ".verify_count" do
|
|
172
|
+
before :each do
|
|
173
|
+
MSpec.stub!(:actions)
|
|
174
|
+
MSpec.stub!(:current).and_return(mock("spec state", :null_object => true))
|
|
175
|
+
|
|
176
|
+
@mock = mock('verify_count')
|
|
177
|
+
@proxy = Mock.install_method @mock, :method_call
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
after :each do
|
|
181
|
+
Mock.cleanup
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "does not raise an exception when the mock receives at least the expected number of calls" do
|
|
185
|
+
@proxy.at_least(2)
|
|
186
|
+
@mock.method_call
|
|
187
|
+
@mock.method_call
|
|
188
|
+
Mock.verify_count
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "raises an ExpectationNotMetError when the mock receives less than at least the expected number of calls" do
|
|
192
|
+
@proxy.at_least(2)
|
|
193
|
+
@mock.method_call
|
|
194
|
+
lambda { Mock.verify_count }.should raise_error(ExpectationNotMetError)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "does not raise an exception when the mock receives at most the expected number of calls" do
|
|
198
|
+
@proxy.at_most(2)
|
|
199
|
+
@mock.method_call
|
|
200
|
+
@mock.method_call
|
|
201
|
+
Mock.verify_count
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "raises an ExpectationNotMetError when the mock receives more than at most the expected number of calls" do
|
|
205
|
+
@proxy.at_most(2)
|
|
206
|
+
@mock.method_call
|
|
207
|
+
@mock.method_call
|
|
208
|
+
@mock.method_call
|
|
209
|
+
lambda { Mock.verify_count }.should raise_error(ExpectationNotMetError)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it "does not raise an exception when the mock receives exactly the expected number of calls" do
|
|
213
|
+
@proxy.exactly(2)
|
|
214
|
+
@mock.method_call
|
|
215
|
+
@mock.method_call
|
|
216
|
+
Mock.verify_count
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "raises an ExpectationNotMetError when the mock receives less than exactly the expected number of calls" do
|
|
220
|
+
@proxy.exactly(2)
|
|
221
|
+
@mock.method_call
|
|
222
|
+
lambda { Mock.verify_count }.should raise_error(ExpectationNotMetError)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "raises an ExpectationNotMetError when the mock receives more than exactly the expected number of calls" do
|
|
226
|
+
@proxy.exactly(2)
|
|
227
|
+
@mock.method_call
|
|
228
|
+
@mock.method_call
|
|
229
|
+
@mock.method_call
|
|
230
|
+
lambda { Mock.verify_count }.should raise_error(ExpectationNotMetError)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
describe Mock, ".cleanup" do
|
|
235
|
+
before :each do
|
|
236
|
+
MSpec.stub!(:actions)
|
|
237
|
+
MSpec.stub!(:current).and_return(mock("spec state", :null_object => true))
|
|
238
|
+
|
|
239
|
+
@mock = mock('cleanup')
|
|
240
|
+
@proxy = Mock.install_method @mock, :method_call
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
after :each do
|
|
244
|
+
Mock.cleanup
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
it "removes the mock method call if it did not override an existing method" do
|
|
248
|
+
@mock.should respond_to(:method_call)
|
|
249
|
+
|
|
250
|
+
Mock.cleanup
|
|
251
|
+
@mock.should_not respond_to(:method_call)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
it "removes the replaced method if the mock method overrides an existing method" do
|
|
255
|
+
def @mock.already_here() :hey end
|
|
256
|
+
@mock.should respond_to(:already_here)
|
|
257
|
+
Mock.install_method @mock, :already_here
|
|
258
|
+
@mock.should respond_to(Mock.replaced_name(:already_here))
|
|
259
|
+
|
|
260
|
+
Mock.cleanup
|
|
261
|
+
@mock.should_not respond_to(Mock.replaced_name(:already_here))
|
|
262
|
+
@mock.should respond_to(:already_here)
|
|
263
|
+
@mock.already_here.should == :hey
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
it "removes all mock expectations" do
|
|
267
|
+
Mock.expects.should == { [@mock, :method_call] => [@proxy] }
|
|
268
|
+
|
|
269
|
+
Mock.cleanup
|
|
270
|
+
Mock.expects.should == {}
|
|
271
|
+
end
|
|
272
|
+
end
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require 'mspec/mocks/proxy'
|
|
3
|
+
|
|
4
|
+
describe MockProxy, "reporting method" do
|
|
5
|
+
before :each do
|
|
6
|
+
@proxy = MockProxy.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "returns the expected number of calls the mock should receive with #count" do
|
|
10
|
+
@proxy.count.should == [:exactly, 0]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns the expected arguments with #arguments" do
|
|
14
|
+
@proxy.arguments.should == :any_args
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns the expected return value with #returning" do
|
|
18
|
+
@proxy.returning.should == nil
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe MockProxy, "#with" do
|
|
23
|
+
before :each do
|
|
24
|
+
@proxy = MockProxy.new
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "returns self" do
|
|
28
|
+
@proxy.with(:a).should be_equal(@proxy)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "raises an ArgumentError if no arguments are given" do
|
|
32
|
+
lambda { @proxy.with }.should raise_error(ArgumentError)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "accepts any number of arguments" do
|
|
36
|
+
@proxy.with(1, 2, 3).should be_an_instance_of(MockProxy)
|
|
37
|
+
@proxy.arguments.should == [1,2,3]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe MockProxy, "#once" do
|
|
42
|
+
before :each do
|
|
43
|
+
@proxy = MockProxy.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "returns self" do
|
|
47
|
+
@proxy.once.should be_equal(@proxy)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "sets the expected calls to 1" do
|
|
51
|
+
@proxy.once
|
|
52
|
+
@proxy.count.should == [:exactly, 1]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "accepts no arguments" do
|
|
56
|
+
lambda { @proxy.once(:a) }.should raise_error
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe MockProxy, "#twice" do
|
|
61
|
+
before :each do
|
|
62
|
+
@proxy = MockProxy.new
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "returns self" do
|
|
66
|
+
@proxy.twice.should be_equal(@proxy)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "sets the expected calls to 2" do
|
|
70
|
+
@proxy.twice
|
|
71
|
+
@proxy.count.should == [:exactly, 2]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "accepts no arguments" do
|
|
75
|
+
lambda { @proxy.twice(:b) }.should raise_error
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe MockProxy, "#exactly" do
|
|
80
|
+
before :each do
|
|
81
|
+
@proxy = MockProxy.new
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "returns self" do
|
|
85
|
+
@proxy.exactly(2).should be_equal(@proxy)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "sets the expected calls to exactly n" do
|
|
89
|
+
@proxy.exactly(5)
|
|
90
|
+
@proxy.count.should == [:exactly, 5]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "does not accept an argument that Integer() cannot convert" do
|
|
94
|
+
lambda { @proxy.exactly('x') }.should raise_error
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe MockProxy, "#at_least" do
|
|
99
|
+
before :each do
|
|
100
|
+
@proxy = MockProxy.new
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "returns self" do
|
|
104
|
+
@proxy.at_least(3).should be_equal(@proxy)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "sets the expected calls to at least n" do
|
|
108
|
+
@proxy.at_least(3)
|
|
109
|
+
@proxy.count.should == [:at_least, 3]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "accepts :once :twice" do
|
|
113
|
+
@proxy.at_least(:once)
|
|
114
|
+
@proxy.count.should == [:at_least, 1]
|
|
115
|
+
@proxy.at_least(:twice)
|
|
116
|
+
@proxy.count.should == [:at_least, 2]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "does not accept an argument that Integer() cannot convert" do
|
|
120
|
+
lambda { @proxy.at_least('x') }.should raise_error
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe MockProxy, "#at_most" do
|
|
125
|
+
before :each do
|
|
126
|
+
@proxy = MockProxy.new
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "returns self" do
|
|
130
|
+
@proxy.at_most(2).should be_equal(@proxy)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "sets the expected calls to at most n" do
|
|
134
|
+
@proxy.at_most(2)
|
|
135
|
+
@proxy.count.should == [:at_most, 2]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "accepts :once, :twice" do
|
|
139
|
+
@proxy.at_most(:once)
|
|
140
|
+
@proxy.count.should == [:at_most, 1]
|
|
141
|
+
@proxy.at_most(:twice)
|
|
142
|
+
@proxy.count.should == [:at_most, 2]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "does not accept an argument that Integer() cannot convert" do
|
|
146
|
+
lambda { @proxy.at_most('x') }.should raise_error
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
describe MockProxy, "#any_number_of_times" do
|
|
151
|
+
before :each do
|
|
152
|
+
@proxy = MockProxy.new
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "returns self" do
|
|
156
|
+
@proxy.any_number_of_times.should be_equal(@proxy)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "sets the expected calls to at least 0" do
|
|
160
|
+
@proxy.any_number_of_times
|
|
161
|
+
@proxy.count.should == [:at_least, 0]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "does not accept an argument" do
|
|
165
|
+
lambda { @proxy.any_number_of_times(2) }.should raise_error
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
describe MockProxy, "#and_return" do
|
|
170
|
+
before :each do
|
|
171
|
+
@proxy = MockProxy.new
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "returns self" do
|
|
175
|
+
@proxy.and_return(false).should be_equal(@proxy)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "sets the expected return value" do
|
|
179
|
+
@proxy.and_return(false)
|
|
180
|
+
@proxy.returning.should == false
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "accepts any number of return values" do
|
|
184
|
+
@proxy.and_return(1, 2, 3)
|
|
185
|
+
@proxy.returning.should == 1
|
|
186
|
+
@proxy.returning.should == 2
|
|
187
|
+
@proxy.returning.should == 3
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it "implicitly sets the expected number of calls" do
|
|
191
|
+
@proxy.and_return(1, 2, 3)
|
|
192
|
+
@proxy.count.should == [:exactly, 3]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it "it only sets the expected number of calls if it is higher than what is already set" do
|
|
196
|
+
@proxy.at_least(5).times.and_return(1, 2, 3)
|
|
197
|
+
@proxy.count.should == [:at_least, 5]
|
|
198
|
+
|
|
199
|
+
@proxy.at_least(2).times.and_return(1, 2, 3)
|
|
200
|
+
@proxy.count.should == [:at_least, 3]
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
describe MockProxy, "#calls" do
|
|
205
|
+
before :each do
|
|
206
|
+
@proxy = MockProxy.new
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "returns the number of times the proxy is called" do
|
|
210
|
+
@proxy.calls.should == 0
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
describe MockProxy, "#called" do
|
|
215
|
+
before :each do
|
|
216
|
+
@proxy = MockProxy.new
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "increments the number of times the proxy is called" do
|
|
220
|
+
@proxy.called
|
|
221
|
+
@proxy.called
|
|
222
|
+
@proxy.calls.should == 2
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
describe MockProxy, "#returning" do
|
|
227
|
+
before :each do
|
|
228
|
+
@proxy = MockProxy.new
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "should return nil by default" do
|
|
232
|
+
@proxy.returning.should be_nil
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "should return the value set by #and_return" do
|
|
236
|
+
@proxy.and_return(2)
|
|
237
|
+
@proxy.returning.should == 2
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "should return a sequence of values set by #and_return" do
|
|
241
|
+
@proxy.and_return(1,2,3,4)
|
|
242
|
+
@proxy.returning.should == 1
|
|
243
|
+
@proxy.returning.should == 2
|
|
244
|
+
@proxy.returning.should == 3
|
|
245
|
+
@proxy.returning.should == 4
|
|
246
|
+
@proxy.returning.should == 4
|
|
247
|
+
@proxy.returning.should == 4
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
describe MockProxy, "#times" do
|
|
252
|
+
before :each do
|
|
253
|
+
@proxy = MockProxy.new
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it "is a no-op" do
|
|
257
|
+
@proxy.times.should == @proxy
|
|
258
|
+
end
|
|
259
|
+
end
|