rr 0.2.4 → 0.2.5
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/CHANGES +9 -0
- data/Rakefile +1 -1
- data/examples/rr/extensions/instance_methods_creator_example.rb +189 -48
- data/examples/rr/space/space_create_example.rb +74 -15
- data/lib/rr/creator.rb +1 -1
- data/lib/rr/extensions/instance_methods.rb +103 -23
- data/lib/rr/space.rb +19 -10
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
* 0.2.5
|
2
|
+
- mock takes method_name argument
|
3
|
+
- stub takes method_name argument
|
4
|
+
- mock_probe takes method_name argument
|
5
|
+
- stub_probe takes method_name argument
|
6
|
+
- probe takes method_name argument
|
7
|
+
- dont_allow takes method_name argument
|
8
|
+
- do_not_allow takes method_name argument
|
9
|
+
|
1
10
|
* 0.2.4
|
2
11
|
- Space#doubles key is now the object id
|
3
12
|
- Fixed [#12402] Stubbing return value of probes fails after calling the stubbed method two times
|
data/Rakefile
CHANGED
@@ -7,23 +7,46 @@ module Extensions
|
|
7
7
|
|
8
8
|
before do
|
9
9
|
@subject = Object.new
|
10
|
+
class << @subject
|
11
|
+
def foobar(*args)
|
12
|
+
:original_value
|
13
|
+
end
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
it "sets up the RR mock call chain" do
|
13
|
-
|
18
|
+
should create_mock_call_chain(mock(@subject))
|
14
19
|
end
|
15
20
|
|
16
|
-
it "sets up the RR mock call chain
|
17
|
-
|
21
|
+
it "#rr_mock sets up the RR mock call chain" do
|
22
|
+
should create_mock_call_chain(rr_mock(@subject))
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
:original_value
|
24
|
-
end
|
25
|
-
end
|
25
|
+
it "creates a mock Scenario for method when passed a second argument" do
|
26
|
+
should create_scenario_with_method_name(mock(@subject, :foobar))
|
27
|
+
end
|
26
28
|
|
29
|
+
it "creates a mock Scenario for method when passed a second argument with rr_mock" do
|
30
|
+
should create_scenario_with_method_name(rr_mock(@subject, :foobar))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "raises error if passed a method name and a block" do
|
34
|
+
proc do
|
35
|
+
mock(@object, :foobar) {}
|
36
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_scenario_with_method_name(scenario)
|
40
|
+
method_name = scenario.method_name
|
41
|
+
scenario.with(1, 2) {:baz}
|
42
|
+
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(1)
|
43
|
+
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
44
|
+
scenario.argument_expectation.expected_arguments.should == [1, 2]
|
45
|
+
|
46
|
+
@subject.__send__(method_name, 1, 2).should == :baz
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_mock_call_chain(creator)
|
27
50
|
scenario = creator.foobar(1, 2) {:baz}
|
28
51
|
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(1)
|
29
52
|
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
@@ -38,23 +61,44 @@ module Extensions
|
|
38
61
|
|
39
62
|
before do
|
40
63
|
@subject = Object.new
|
64
|
+
class << @subject
|
65
|
+
def foobar(*args)
|
66
|
+
:original_value
|
67
|
+
end
|
68
|
+
end
|
41
69
|
end
|
42
70
|
|
43
71
|
it "sets up the RR stub call chain" do
|
44
|
-
|
72
|
+
should create_stub_call_chain(stub(@subject))
|
45
73
|
end
|
46
74
|
|
47
|
-
it "sets up the RR stub call chain
|
48
|
-
|
75
|
+
it "#rr_stub sets up the RR stub call chain" do
|
76
|
+
should create_stub_call_chain(rr_stub(@subject))
|
49
77
|
end
|
50
78
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
79
|
+
it "creates a stub Scenario for method when passed a second argument" do
|
80
|
+
should create_scenario_with_method_name(stub(@subject, :foobar))
|
81
|
+
end
|
82
|
+
|
83
|
+
it "#rr_stub creates a stub Scenario for method when passed a second argument" do
|
84
|
+
should create_scenario_with_method_name(rr_stub(@subject, :foobar))
|
85
|
+
end
|
86
|
+
|
87
|
+
it "raises error if passed a method name and a block" do
|
88
|
+
proc do
|
89
|
+
stub(@object, :foobar) {}
|
90
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
91
|
+
end
|
57
92
|
|
93
|
+
def create_scenario_with_method_name(scenario)
|
94
|
+
method_name = scenario.method_name
|
95
|
+
scenario.with(1, 2) {:baz}
|
96
|
+
scenario.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
97
|
+
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
98
|
+
@subject.__send__(method_name, 1, 2).should == :baz
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_stub_call_chain(creator)
|
58
102
|
scenario = creator.foobar(1, 2) {:baz}
|
59
103
|
scenario.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
60
104
|
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
@@ -67,27 +111,62 @@ module Extensions
|
|
67
111
|
|
68
112
|
before do
|
69
113
|
@subject = Object.new
|
114
|
+
class << @subject
|
115
|
+
def foobar(*args)
|
116
|
+
:original_value
|
117
|
+
end
|
118
|
+
end
|
70
119
|
end
|
71
120
|
|
72
|
-
it "sets up the RR probe call chain" do
|
73
|
-
|
121
|
+
it "#probe sets up the RR probe call chain" do
|
122
|
+
should create_mock_probe_call_chain(probe(@subject))
|
74
123
|
end
|
75
124
|
|
76
|
-
it "sets up the RR probe call chain" do
|
77
|
-
|
125
|
+
it "#rr_probe sets up the RR probe call chain" do
|
126
|
+
should create_mock_probe_call_chain(rr_probe(@subject))
|
78
127
|
end
|
79
128
|
|
80
|
-
it "sets up the RR probe call chain
|
81
|
-
|
129
|
+
it "#mock_probe sets up the RR probe call chain" do
|
130
|
+
should create_mock_probe_call_chain(mock_probe(@subject))
|
82
131
|
end
|
83
132
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
133
|
+
it "#rr_mock_probe sets up the RR probe call chain with rr_probe" do
|
134
|
+
should create_mock_probe_call_chain(rr_mock_probe(@subject))
|
135
|
+
end
|
136
|
+
|
137
|
+
it "#probe creates a mock Scenario for method when passed a second argument" do
|
138
|
+
should create_scenario_with_method_name(probe(@subject, :foobar))
|
139
|
+
end
|
140
|
+
|
141
|
+
it "#rr_probe creates a mock Scenario for method when passed a second argument with rr_mock" do
|
142
|
+
should create_scenario_with_method_name(rr_probe(@subject, :foobar))
|
143
|
+
end
|
144
|
+
|
145
|
+
it "#mock_probe creates a mock Scenario for method when passed a second argument" do
|
146
|
+
should create_scenario_with_method_name(mock_probe(@subject, :foobar))
|
147
|
+
end
|
90
148
|
|
149
|
+
it "#rr_mock_probe creates a mock Scenario for method when passed a second argument with rr_mock" do
|
150
|
+
should create_scenario_with_method_name(rr_mock_probe(@subject, :foobar))
|
151
|
+
end
|
152
|
+
|
153
|
+
it "raises error if passed a method name and a block" do
|
154
|
+
proc do
|
155
|
+
mock_probe(@object, :foobar) {}
|
156
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
157
|
+
end
|
158
|
+
|
159
|
+
def create_scenario_with_method_name(scenario)
|
160
|
+
method_name = scenario.method_name
|
161
|
+
scenario.with(1, 2)
|
162
|
+
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(1)
|
163
|
+
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
164
|
+
scenario.argument_expectation.expected_arguments.should == [1, 2]
|
165
|
+
|
166
|
+
@subject.__send__(method_name, 1, 2).should == :original_value
|
167
|
+
end
|
168
|
+
|
169
|
+
def create_mock_probe_call_chain(creator)
|
91
170
|
scenario = creator.foobar(1, 2)
|
92
171
|
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(1)
|
93
172
|
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
@@ -102,23 +181,44 @@ module Extensions
|
|
102
181
|
|
103
182
|
before do
|
104
183
|
@subject = Object.new
|
184
|
+
class << @subject
|
185
|
+
def foobar(*args)
|
186
|
+
:original_value
|
187
|
+
end
|
188
|
+
end
|
105
189
|
end
|
106
190
|
|
107
191
|
it "sets up the RR probe call chain" do
|
108
|
-
|
192
|
+
should create_stub_probe_call_chain(stub_probe(@subject))
|
109
193
|
end
|
110
194
|
|
111
195
|
it "sets up the RR probe call chain" do
|
112
|
-
|
196
|
+
should create_stub_probe_call_chain(rr_stub_probe(@subject))
|
113
197
|
end
|
114
198
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
199
|
+
it "#stub_probe creates a stub Scenario for method when passed a second argument" do
|
200
|
+
should create_scenario_with_method_name(stub_probe(@subject, :foobar))
|
201
|
+
end
|
202
|
+
|
203
|
+
it "#rr_stub_probe creates a stub Scenario for method when passed a second argument with rr_stub" do
|
204
|
+
should create_scenario_with_method_name(rr_stub_probe(@subject, :foobar))
|
205
|
+
end
|
206
|
+
|
207
|
+
it "raises error if passed a method name and a block" do
|
208
|
+
proc do
|
209
|
+
stub_probe(@object, :foobar) {}
|
210
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
211
|
+
end
|
121
212
|
|
213
|
+
def create_scenario_with_method_name(scenario)
|
214
|
+
method_name = scenario.method_name
|
215
|
+
scenario.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
216
|
+
scenario.argument_expectation.class.should == RR::Expectations::AnyArgumentExpectation
|
217
|
+
|
218
|
+
@subject.foobar(:something).should == :original_value
|
219
|
+
end
|
220
|
+
|
221
|
+
def create_stub_probe_call_chain(creator)
|
122
222
|
scenario = creator.foobar
|
123
223
|
scenario.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
124
224
|
scenario.argument_expectation.class.should == RR::Expectations::AnyArgumentExpectation
|
@@ -132,35 +232,76 @@ module Extensions
|
|
132
232
|
|
133
233
|
before do
|
134
234
|
@subject = Object.new
|
235
|
+
class << @subject
|
236
|
+
def foobar(*args)
|
237
|
+
:original_value
|
238
|
+
end
|
239
|
+
end
|
135
240
|
end
|
136
241
|
|
137
242
|
it "sets up the RR do_not_allow call chain" do
|
138
|
-
|
243
|
+
should create_do_not_allow_call_chain(do_not_allow(@subject))
|
139
244
|
end
|
140
245
|
|
141
246
|
it "sets up the RR do_not_allow call chain with rr_do_not_allow" do
|
142
|
-
|
247
|
+
should create_do_not_allow_call_chain(rr_do_not_allow(@subject))
|
143
248
|
end
|
144
249
|
|
145
250
|
it "sets up the RR do_not_allow call chain" do
|
146
|
-
|
251
|
+
should create_do_not_allow_call_chain(dont_allow(@subject))
|
147
252
|
end
|
148
253
|
|
149
254
|
it "sets up the RR do_not_allow call chain with rr_do_not_allow" do
|
150
|
-
|
255
|
+
should create_do_not_allow_call_chain(rr_dont_allow(@subject))
|
151
256
|
end
|
152
257
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
258
|
+
it "#do_not_allow creates a mock Scenario for method when passed a second argument" do
|
259
|
+
should create_scenario_with_method_name(do_not_allow(@subject, :foobar))
|
260
|
+
end
|
261
|
+
|
262
|
+
it "#rr_do_not_allow creates a mock Scenario for method when passed a second argument with rr_mock" do
|
263
|
+
should create_scenario_with_method_name(rr_do_not_allow(@subject, :foobar))
|
264
|
+
end
|
265
|
+
|
266
|
+
it "#dont_allow creates a mock Scenario for method when passed a second argument" do
|
267
|
+
should create_scenario_with_method_name(dont_allow(@subject, :foobar))
|
268
|
+
end
|
269
|
+
|
270
|
+
it "#rr_dont_allow creates a mock Scenario for method when passed a second argument with rr_mock" do
|
271
|
+
should create_scenario_with_method_name(rr_dont_allow(@subject, :foobar))
|
272
|
+
end
|
273
|
+
|
274
|
+
it "raises error if passed a method name and a block" do
|
275
|
+
proc do
|
276
|
+
do_not_allow(@object, :foobar) {}
|
277
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
278
|
+
end
|
159
279
|
|
280
|
+
def create_scenario_with_method_name(scenario)
|
281
|
+
method_name = scenario.method_name
|
282
|
+
scenario.with(1, 2)
|
283
|
+
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(0)
|
284
|
+
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
285
|
+
scenario.argument_expectation.expected_arguments.should == [1, 2]
|
286
|
+
|
287
|
+
proc do
|
288
|
+
@subject.__send__(method_name, 1, 2)
|
289
|
+
end.should raise_error(Errors::TimesCalledError)
|
290
|
+
reset
|
291
|
+
nil
|
292
|
+
end
|
293
|
+
|
294
|
+
def create_do_not_allow_call_chain(creator)
|
160
295
|
scenario = creator.foobar(1, 2)
|
161
296
|
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(0)
|
162
297
|
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
163
298
|
scenario.argument_expectation.expected_arguments.should == [1, 2]
|
299
|
+
|
300
|
+
proc do
|
301
|
+
@subject.foobar(1, 2)
|
302
|
+
end.should raise_error(Errors::TimesCalledError)
|
303
|
+
reset
|
304
|
+
nil
|
164
305
|
end
|
165
306
|
end
|
166
307
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "examples/example_helper"
|
2
2
|
|
3
3
|
module RR
|
4
|
-
describe Space, "#
|
4
|
+
describe Space, "#mock_creator" do
|
5
5
|
it_should_behave_like "RR::Space"
|
6
6
|
|
7
7
|
before do
|
@@ -10,14 +10,26 @@ describe Space, "#create_mock_creator" do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "creates a MockCreator" do
|
13
|
-
creator = @space.
|
13
|
+
creator = @space.mock_creator(@object)
|
14
14
|
creator.foobar(1) {:baz}
|
15
15
|
@object.foobar(1).should == :baz
|
16
16
|
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
17
17
|
end
|
18
18
|
|
19
|
+
it "creates a mock Scenario for method when passed a second argument" do
|
20
|
+
creator = @space.mock_creator(@object, :foobar).with(1) {:baz}
|
21
|
+
@object.foobar(1).should == :baz
|
22
|
+
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raises error if passed a method name and a block" do
|
26
|
+
proc do
|
27
|
+
@space.mock_creator(@object, :foobar) {}
|
28
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
29
|
+
end
|
30
|
+
|
19
31
|
it "uses block definition when passed a block" do
|
20
|
-
creator = @space.
|
32
|
+
creator = @space.mock_creator(@object) do |c|
|
21
33
|
c.foobar(1) {:baz}
|
22
34
|
end
|
23
35
|
@object.foobar(1).should == :baz
|
@@ -25,7 +37,7 @@ describe Space, "#create_mock_creator" do
|
|
25
37
|
end
|
26
38
|
end
|
27
39
|
|
28
|
-
describe Space, "#
|
40
|
+
describe Space, "#stub_creator" do
|
29
41
|
it_should_behave_like "RR::Space"
|
30
42
|
|
31
43
|
before do
|
@@ -35,14 +47,26 @@ describe Space, "#create_stub_creator" do
|
|
35
47
|
end
|
36
48
|
|
37
49
|
it "creates a StubCreator" do
|
38
|
-
creator = @space.
|
50
|
+
creator = @space.stub_creator(@object)
|
39
51
|
creator.foobar {:baz}
|
40
52
|
@object.foobar.should == :baz
|
41
53
|
@object.foobar.should == :baz
|
42
54
|
end
|
43
55
|
|
56
|
+
it "creates a stub Scenario for method when passed a second argument" do
|
57
|
+
creator = @space.stub_creator(@object, :foobar).with(1) {:baz}
|
58
|
+
@object.foobar(1).should == :baz
|
59
|
+
@object.foobar(1).should == :baz
|
60
|
+
end
|
61
|
+
|
62
|
+
it "raises error if passed a method name and a block" do
|
63
|
+
proc do
|
64
|
+
@space.stub_creator(@object, :foobar) {}
|
65
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
66
|
+
end
|
67
|
+
|
44
68
|
it "uses block definition when passed a block" do
|
45
|
-
creator = @space.
|
69
|
+
creator = @space.stub_creator(@object) do |c|
|
46
70
|
c.foobar(1) {:return_value}
|
47
71
|
c.foobar.with_any_args {:default}
|
48
72
|
c.baz(1) {:baz_value}
|
@@ -53,7 +77,7 @@ describe Space, "#create_stub_creator" do
|
|
53
77
|
end
|
54
78
|
end
|
55
79
|
|
56
|
-
describe Space, "#
|
80
|
+
describe Space, "#mock_probe_creator" do
|
57
81
|
it_should_behave_like "RR::Space"
|
58
82
|
|
59
83
|
before do
|
@@ -66,14 +90,26 @@ describe Space, "#create_mock_probe_creator" do
|
|
66
90
|
end
|
67
91
|
|
68
92
|
it "creates a MockProbeCreator" do
|
69
|
-
creator = @space.
|
93
|
+
creator = @space.mock_probe_creator(@object)
|
70
94
|
creator.foobar(1)
|
71
95
|
@object.foobar(1).should == :original_foobar
|
72
96
|
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
73
97
|
end
|
74
98
|
|
99
|
+
it "creates a mock probe Scenario for method when passed a second argument" do
|
100
|
+
creator = @space.mock_probe_creator(@object, :foobar).with(1)
|
101
|
+
@object.foobar(1).should == :original_foobar
|
102
|
+
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "raises error if passed a method name and a block" do
|
106
|
+
proc do
|
107
|
+
@space.mock_probe_creator(@object, :foobar) {}
|
108
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
109
|
+
end
|
110
|
+
|
75
111
|
it "uses block definition when passed a block" do
|
76
|
-
creator = @space.
|
112
|
+
creator = @space.mock_probe_creator(@object) do |c|
|
77
113
|
c.foobar(1)
|
78
114
|
end
|
79
115
|
@object.foobar(1).should == :original_foobar
|
@@ -81,7 +117,7 @@ describe Space, "#create_mock_probe_creator" do
|
|
81
117
|
end
|
82
118
|
end
|
83
119
|
|
84
|
-
describe Space, "#
|
120
|
+
describe Space, "#stub_probe_creator" do
|
85
121
|
it_should_behave_like "RR::Space"
|
86
122
|
|
87
123
|
before do
|
@@ -94,14 +130,26 @@ describe Space, "#create_stub_probe_creator" do
|
|
94
130
|
end
|
95
131
|
|
96
132
|
it "creates a StubProbeCreator" do
|
97
|
-
creator = @space.
|
133
|
+
creator = @space.stub_probe_creator(@object)
|
98
134
|
creator.foobar
|
99
135
|
@object.foobar(1).should == :original_foobar
|
100
136
|
@object.foobar(1).should == :original_foobar
|
101
137
|
end
|
102
138
|
|
139
|
+
it "creates a stub probe Scenario for method when passed a second argument" do
|
140
|
+
creator = @space.stub_probe_creator(@object, :foobar)
|
141
|
+
@object.foobar(1).should == :original_foobar
|
142
|
+
@object.foobar(1).should == :original_foobar
|
143
|
+
end
|
144
|
+
|
145
|
+
it "raises error if passed a method name and a block" do
|
146
|
+
proc do
|
147
|
+
@space.stub_probe_creator(@object, :foobar) {}
|
148
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
149
|
+
end
|
150
|
+
|
103
151
|
it "uses block definition when passed a block" do
|
104
|
-
creator = @space.
|
152
|
+
creator = @space.stub_probe_creator(@object) do |c|
|
105
153
|
c.foobar(1)
|
106
154
|
end
|
107
155
|
@object.foobar(1).should == :original_foobar
|
@@ -109,7 +157,7 @@ describe Space, "#create_stub_probe_creator" do
|
|
109
157
|
end
|
110
158
|
end
|
111
159
|
|
112
|
-
describe Space, "#
|
160
|
+
describe Space, "#do_not_allow_creator" do
|
113
161
|
it_should_behave_like "RR::Space"
|
114
162
|
|
115
163
|
before do
|
@@ -118,13 +166,24 @@ describe Space, "#create_do_not_allow_creator" do
|
|
118
166
|
end
|
119
167
|
|
120
168
|
it "creates a MockCreator" do
|
121
|
-
creator = @space.
|
169
|
+
creator = @space.do_not_allow_creator(@object)
|
122
170
|
creator.foobar(1)
|
123
171
|
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
124
172
|
end
|
125
173
|
|
174
|
+
it "creates a do not allow Scenario for method when passed a second argument" do
|
175
|
+
creator = @space.do_not_allow_creator(@object, :foobar).with(1)
|
176
|
+
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
177
|
+
end
|
178
|
+
|
179
|
+
it "raises error if passed a method name and a block" do
|
180
|
+
proc do
|
181
|
+
@space.do_not_allow_creator(@object, :foobar) {}
|
182
|
+
end.should raise_error(ArgumentError, "Cannot pass in a method name and a block")
|
183
|
+
end
|
184
|
+
|
126
185
|
it "uses block definition when passed a block" do
|
127
|
-
creator = @space.
|
186
|
+
creator = @space.do_not_allow_creator(@object) do |c|
|
128
187
|
c.foobar(1)
|
129
188
|
end
|
130
189
|
proc {@object.foobar(1)}.should raise_error(Errors::TimesCalledError)
|
data/lib/rr/creator.rb
CHANGED
@@ -12,26 +12,77 @@ module Extensions
|
|
12
12
|
RR::Space.instance.reset
|
13
13
|
end
|
14
14
|
|
15
|
-
#
|
16
|
-
# acts like a mock.
|
17
|
-
# mock(object).
|
18
|
-
|
19
|
-
|
15
|
+
# When passed the object, this method returns a MockCreator
|
16
|
+
# that generates a Double Scenario that acts like a mock.
|
17
|
+
# mock(object).method_name_1 {return_value_1}
|
18
|
+
# mock(object).method_name_2(arg1, arg2) {return_value_2}
|
19
|
+
#
|
20
|
+
# When passed the object and the method_name, this method returns
|
21
|
+
# a mock Scenario with the method already set.
|
22
|
+
#
|
23
|
+
# mock also takes a block for definitions.
|
24
|
+
# mock(object) do
|
25
|
+
# method_name_1 {return_value_1}
|
26
|
+
# method_name_2(arg_1, arg_2) {return_value_2}
|
27
|
+
# end
|
28
|
+
def mock(object, method_name=nil, &definition)
|
29
|
+
RR::Space.instance.mock_creator(object, method_name, &definition)
|
20
30
|
end
|
21
31
|
|
22
|
-
#
|
23
|
-
# acts like a stub.
|
24
|
-
# stub(object).
|
25
|
-
|
26
|
-
|
32
|
+
# When passed the object, this method returns a StubCreator
|
33
|
+
# that generates a Double Scenario that acts like a stub.
|
34
|
+
# stub(object).method_name_1 {return_value_1}
|
35
|
+
# stub(object).method_name_2(arg_1, arg_2) {return_value_2}
|
36
|
+
#
|
37
|
+
# When passed the object and the method_name, this method returns
|
38
|
+
# a stub Scenario with the method already set.
|
39
|
+
#
|
40
|
+
# stub also takes a block for definitions.
|
41
|
+
# stub(object) do
|
42
|
+
# method_name_1 {return_value_1}
|
43
|
+
# method_name_2(arg_1, arg_2) {return_value_2}
|
44
|
+
# end
|
45
|
+
def stub(object, method_name=nil, &definition)
|
46
|
+
RR::Space.instance.stub_creator(object, method_name, &definition)
|
27
47
|
end
|
28
48
|
|
29
|
-
#
|
30
|
-
#
|
49
|
+
# When passed the object, this method returns a MockProbeCreator
|
50
|
+
# that generates a Double Scenario that acts like a mock probe.
|
31
51
|
#
|
32
52
|
# mock_probe(controller.template).render(:partial => "my/socks")
|
33
53
|
#
|
34
|
-
#
|
54
|
+
# mock_probe(controller.template).render(:partial => "my/socks") do |html|
|
55
|
+
# html.should include("My socks are wet")
|
56
|
+
# html
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# mock_probe(controller.template).render(:partial => "my/socks") do |html|
|
60
|
+
# html.should include("My socks are wet")
|
61
|
+
# "My new return value"
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# mock_probe also takes a block for definitions.
|
65
|
+
# mock_probe(object) do
|
66
|
+
# render(:partial => "my/socks")
|
67
|
+
#
|
68
|
+
# render(:partial => "my/socks") do |html|
|
69
|
+
# html.should include("My socks are wet")
|
70
|
+
# html
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# render(:partial => "my/socks") do |html|
|
74
|
+
# html.should include("My socks are wet")
|
75
|
+
# html
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# render(:partial => "my/socks") do |html|
|
79
|
+
# html.should include("My socks are wet")
|
80
|
+
# "My new return value"
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# Passing a block to the Scenario (after the method name and arguments)
|
85
|
+
# allows you to intercept the return value.
|
35
86
|
# The return value can be modified, validated, and/or overridden by
|
36
87
|
# passing in a block. The return value of the block will replace
|
37
88
|
# the actual return value.
|
@@ -40,26 +91,55 @@ module Extensions
|
|
40
91
|
# html.should include("My socks are wet")
|
41
92
|
# "My new return value"
|
42
93
|
# end
|
43
|
-
def mock_probe(
|
44
|
-
RR::Space.instance.
|
94
|
+
def mock_probe(object, method_name=nil, &definition)
|
95
|
+
RR::Space.instance.mock_probe_creator(object, method_name, &definition)
|
45
96
|
end
|
46
97
|
|
47
|
-
#
|
48
|
-
#
|
98
|
+
# When passed the object, this method returns a StubProbeCreator
|
99
|
+
# that generates a Double Scenario that acts like a stub probe.
|
49
100
|
#
|
50
|
-
#
|
101
|
+
# stub_probe(User).new {|user| user}
|
102
|
+
#
|
103
|
+
# stub_probe(User).new do |user|
|
104
|
+
# mock(user).valid? {false}
|
105
|
+
# user
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# stub_probe(User).new do |user|
|
109
|
+
# mock_probe(user).friends {|friends| friends[0..3]}
|
110
|
+
# user
|
111
|
+
# end
|
51
112
|
#
|
52
113
|
# Passing a block allows you to intercept the return value.
|
53
114
|
# The return value can be modified, validated, and/or overridden by
|
54
115
|
# passing in a block. The return value of the block will replace
|
55
116
|
# the actual return value.
|
56
117
|
#
|
57
|
-
# mock_probe(
|
118
|
+
# mock_probe(User) do
|
119
|
+
# new {|user| user}
|
120
|
+
#
|
121
|
+
# new do |user|
|
122
|
+
# mock(user).valid? {false}
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# new do |user|
|
126
|
+
# mock_probe(user).friends {|friends| friends[0..3]}
|
127
|
+
# user
|
128
|
+
# end
|
129
|
+
# end
|
130
|
+
#
|
131
|
+
# Passing a block to the Scenario (after the method name and arguments)
|
132
|
+
# allows you to intercept the return value.
|
133
|
+
# The return value can be modified, validated, and/or overridden by
|
134
|
+
# passing in a block. The return value of the block will replace
|
135
|
+
# the actual return value.
|
136
|
+
#
|
137
|
+
# stub_probe(controller.template).render(:partial => "my/socks") do |html|
|
58
138
|
# html.should include("My socks are wet")
|
59
139
|
# "My new return value"
|
60
140
|
# end
|
61
|
-
def stub_probe(
|
62
|
-
RR::Space.instance.
|
141
|
+
def stub_probe(object, method_name=nil, &definition)
|
142
|
+
RR::Space.instance.stub_probe_creator(object, method_name, &definition)
|
63
143
|
end
|
64
144
|
|
65
145
|
# Same as mock_probe
|
@@ -68,8 +148,8 @@ module Extensions
|
|
68
148
|
# Sets up a DoNotAllowCreator that generates a Double Scenario that
|
69
149
|
# expects never to be called.
|
70
150
|
# do_not_allow(object).method_name
|
71
|
-
def do_not_allow(subject, &definition)
|
72
|
-
RR::Space.instance.
|
151
|
+
def do_not_allow(subject, method_name=nil, &definition)
|
152
|
+
RR::Space.instance.do_not_allow_creator(subject, method_name, &definition)
|
73
153
|
end
|
74
154
|
alias_method :dont_allow, :do_not_allow
|
75
155
|
|
data/lib/rr/space.rb
CHANGED
@@ -26,28 +26,28 @@ module RR
|
|
26
26
|
end
|
27
27
|
|
28
28
|
# Creates a MockCreator.
|
29
|
-
def
|
30
|
-
MockCreator
|
29
|
+
def mock_creator(subject, method_name=nil, &definition)
|
30
|
+
setup_creator MockCreator, subject, method_name, definition
|
31
31
|
end
|
32
32
|
|
33
33
|
# Creates a StubCreator.
|
34
|
-
def
|
35
|
-
StubCreator
|
34
|
+
def stub_creator(subject, method_name=nil, &definition)
|
35
|
+
setup_creator StubCreator, subject, method_name, definition
|
36
36
|
end
|
37
37
|
|
38
38
|
# Creates a MockProbeCreator.
|
39
|
-
def
|
40
|
-
MockProbeCreator
|
39
|
+
def mock_probe_creator(subject, method_name=nil, &definition)
|
40
|
+
setup_creator MockProbeCreator, subject, method_name, definition
|
41
41
|
end
|
42
42
|
|
43
43
|
# Creates a StubProbeCreator.
|
44
|
-
def
|
45
|
-
StubProbeCreator
|
44
|
+
def stub_probe_creator(subject, method_name=nil, &definition)
|
45
|
+
setup_creator StubProbeCreator, subject, method_name, definition
|
46
46
|
end
|
47
47
|
|
48
48
|
# Creates a DoNotAllowCreator.
|
49
|
-
def
|
50
|
-
DoNotAllowCreator
|
49
|
+
def do_not_allow_creator(subject, method_name=nil, &definition)
|
50
|
+
setup_creator DoNotAllowCreator, subject, method_name, definition
|
51
51
|
end
|
52
52
|
|
53
53
|
# Creates and registers a Scenario to be verified.
|
@@ -124,6 +124,15 @@ module RR
|
|
124
124
|
end
|
125
125
|
|
126
126
|
protected
|
127
|
+
def setup_creator(klass, subject, method_name, definition)
|
128
|
+
if method_name && definition
|
129
|
+
raise ArgumentError, "Cannot pass in a method name and a block"
|
130
|
+
end
|
131
|
+
creator = klass.new(self, subject, &definition)
|
132
|
+
return creator unless method_name
|
133
|
+
creator.__send__(method_name)
|
134
|
+
end
|
135
|
+
|
127
136
|
# Removes the ordered Scenarios from the list
|
128
137
|
def reset_ordered_scenarios
|
129
138
|
@ordered_scenarios.clear
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rr
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-07-
|
6
|
+
version: 0.2.5
|
7
|
+
date: 2007-07-21 00:00:00 -07:00
|
8
8
|
summary: RR (Double Ruby) is a double framework that features a rich selection of double techniques and a terse syntax. http://xunitpatterns.com/Test%20Double.html
|
9
9
|
require_paths:
|
10
10
|
- lib
|