rr 0.3.9 → 0.3.10
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 +3 -0
- data/README +7 -7
- data/Rakefile +2 -1
- data/examples/core_example_suite.rb +31 -0
- data/examples/example_suite.rb +3 -21
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_example.rb +0 -10
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +14 -12
- data/examples/rr/scenario_creator_example.rb +24 -0
- data/examples/rr/scenario_definition_example.rb +379 -72
- data/examples/rspec_example_suite.rb +1 -1
- data/lib/rr/scenario_definition.rb +31 -12
- data/lib/rr/scenario_definition_builder.rb +1 -0
- metadata +3 -2
data/CHANGES
CHANGED
data/README
CHANGED
@@ -22,14 +22,14 @@ http://xunitpatterns.com/Test%20Stub.html
|
|
22
22
|
jane = User.new
|
23
23
|
stub(User).find('42') {jane}
|
24
24
|
|
25
|
-
== Mock Probes
|
25
|
+
== Mock Proxies/Probes
|
26
26
|
Add verifications that a method was called while actually calling it.
|
27
27
|
The following example verifies render partial will be called and
|
28
28
|
renders the partial.
|
29
29
|
|
30
30
|
view = controller.template
|
31
|
-
mock.
|
32
|
-
mock.
|
31
|
+
mock.proxy(view).render(:partial => "right_navigation")
|
32
|
+
mock.proxy(view).render(:partial => "user_info") do |html|
|
33
33
|
html.should include("John Doe")
|
34
34
|
"Different html"
|
35
35
|
end
|
@@ -40,21 +40,21 @@ This technique is also useful for verifying that you are mocking exists and
|
|
40
40
|
functions proberly, thereby testing you interface.
|
41
41
|
For example, using ActiveRecord:
|
42
42
|
|
43
|
-
mock.
|
44
|
-
mock.
|
43
|
+
mock.proxy(User).find('5') do |user|
|
44
|
+
mock.proxy(user).projects do |projects|
|
45
45
|
projects[0..3]
|
46
46
|
end
|
47
47
|
mock(user).valid? {false}
|
48
48
|
user
|
49
49
|
end
|
50
50
|
|
51
|
-
== Stub Probes
|
51
|
+
== Stub Proxy/Probes
|
52
52
|
Intercept the return value of a method call.
|
53
53
|
The following example verifies render partial will be called and
|
54
54
|
renders the partial.
|
55
55
|
|
56
56
|
view = controller.template
|
57
|
-
stub.
|
57
|
+
stub.proxy(view).render(:partial => "user_info") do |html|
|
58
58
|
html.should include("Joe Smith")
|
59
59
|
html
|
60
60
|
end
|
data/Rakefile
CHANGED
@@ -15,6 +15,7 @@ task(:spec) do
|
|
15
15
|
run_suite
|
16
16
|
end
|
17
17
|
|
18
|
+
desc "Copies the trunk to a tag with the name of the current release"
|
18
19
|
task(:tag_release) do
|
19
20
|
tag_release
|
20
21
|
end
|
@@ -25,7 +26,7 @@ def run_suite
|
|
25
26
|
end
|
26
27
|
|
27
28
|
PKG_NAME = "rr"
|
28
|
-
PKG_VERSION = "0.3.
|
29
|
+
PKG_VERSION = "0.3.10"
|
29
30
|
PKG_FILES = FileList[
|
30
31
|
'[A-Z]*',
|
31
32
|
'*.rb',
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "spec"
|
3
|
+
|
4
|
+
class CoreExampleSuite
|
5
|
+
def run
|
6
|
+
options = ::Spec::Runner::OptionParser.new.parse(ARGV.dup, STDERR, STDOUT, false)
|
7
|
+
options.configure
|
8
|
+
$behaviour_runner = options.create_behaviour_runner
|
9
|
+
|
10
|
+
require_specs
|
11
|
+
|
12
|
+
puts "Running Rspec Example Suite"
|
13
|
+
$behaviour_runner.run(ARGV, false)
|
14
|
+
end
|
15
|
+
|
16
|
+
def require_specs
|
17
|
+
exclusions = []
|
18
|
+
exclusions << "rspec/"
|
19
|
+
exclusions << "test_unit/"
|
20
|
+
|
21
|
+
Dir["#{File.dirname(__FILE__)}/**/*_example.rb"].each do |file|
|
22
|
+
unless exclusions.any? {|match| file.include?(match)}
|
23
|
+
require file
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if $0 == __FILE__
|
30
|
+
CoreExampleSuite.new.run
|
31
|
+
end
|
data/examples/example_suite.rb
CHANGED
@@ -1,30 +1,12 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
require "spec"
|
3
|
-
|
4
1
|
class ExampleSuite
|
5
2
|
def run
|
6
|
-
|
7
|
-
$behaviour_runner = options.create_behaviour_runner
|
8
|
-
|
9
|
-
require_specs
|
10
|
-
|
11
|
-
puts "Running Example Suite"
|
12
|
-
$behaviour_runner.run(ARGV, false)
|
13
|
-
|
3
|
+
run_core_examples
|
14
4
|
run_rspec_examples
|
15
5
|
run_test_unit_examples
|
16
6
|
end
|
17
7
|
|
18
|
-
def
|
19
|
-
|
20
|
-
exclusions << "rspec/"
|
21
|
-
exclusions << "test_unit/"
|
22
|
-
|
23
|
-
Dir["#{dir}/**/*_example.rb"].each do |file|
|
24
|
-
unless exclusions.any? {|match| file.include?(match)}
|
25
|
-
require file
|
26
|
-
end
|
27
|
-
end
|
8
|
+
def run_core_examples
|
9
|
+
system("ruby #{dir}/core_example_suite.rb") || raise("Core suite Failed")
|
28
10
|
end
|
29
11
|
|
30
12
|
def run_rspec_examples
|
@@ -2,16 +2,6 @@ require "examples/example_helper"
|
|
2
2
|
|
3
3
|
module RR
|
4
4
|
module Expectations
|
5
|
-
describe TimesCalledExpectation, :shared => true do
|
6
|
-
before do
|
7
|
-
@space = Space.new
|
8
|
-
@object = Object.new
|
9
|
-
@double = @space.double(@object, :foobar)
|
10
|
-
@scenario = @space.scenario(@double)
|
11
|
-
@scenario.with(1, 2)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
5
|
describe TimesCalledExpectation, " with failure", :shared => true do
|
16
6
|
it_should_behave_like "RR::Expectations::TimesCalledExpectation"
|
17
7
|
|
@@ -1,18 +1,20 @@
|
|
1
|
+
require "examples/example_helper"
|
2
|
+
|
1
3
|
module RR
|
2
4
|
module Expectations
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
describe TimesCalledExpectation, :shared => true do
|
6
|
+
before do
|
7
|
+
@space = Space.new
|
8
|
+
@object = Object.new
|
9
|
+
@method_name = :foobar
|
10
|
+
@double = @space.double(@object, @method_name)
|
11
|
+
@scenario = @space.scenario(@double)
|
12
|
+
@scenario.with_any_args
|
13
|
+
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
15
|
+
def raises_expectation_error(&block)
|
16
|
+
proc {block.call}.should raise_error(Errors::TimesCalledError)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
20
|
+
end
|
@@ -80,6 +80,11 @@ describe ScenarioCreator, "#mock" do
|
|
80
80
|
)
|
81
81
|
end
|
82
82
|
|
83
|
+
it "sets up the ScenarioDefinition to be in returns block_callback_strategy" do
|
84
|
+
scenario = @creator.mock(@subject, :foobar)
|
85
|
+
scenario.block_callback_strategy.should == :returns
|
86
|
+
end
|
87
|
+
|
83
88
|
def create_scenario_with_method_name(scenario)
|
84
89
|
scenario.with(1, 2) {:baz}
|
85
90
|
scenario.times_matcher.should == TimesCalledMatchers::IntegerMatcher.new(1)
|
@@ -114,6 +119,11 @@ describe ScenarioCreator, "#stub" do
|
|
114
119
|
should create_scenario_with_method_name(@creator.stub(@subject, :foobar))
|
115
120
|
end
|
116
121
|
|
122
|
+
it "sets up the ScenarioDefinition to be in returns block_callback_strategy" do
|
123
|
+
scenario = @creator.stub(@subject, :foobar)
|
124
|
+
scenario.block_callback_strategy.should == :returns
|
125
|
+
end
|
126
|
+
|
117
127
|
def create_scenario_with_method_name(scenario)
|
118
128
|
scenario.with(1, 2) {:baz}
|
119
129
|
scenario.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
@@ -255,6 +265,20 @@ describe ScenarioCreator, "(#probe or #proxy) and #stub" do
|
|
255
265
|
scenario.argument_expectation.class.should == RR::Expectations::ArgumentEqualityExpectation
|
256
266
|
@subject.foobar(1, 2).should == :baz
|
257
267
|
end
|
268
|
+
|
269
|
+
it "sets up the ScenarioDefinition to be in after_call block_callback_strategy" do
|
270
|
+
def @subject.foobar
|
271
|
+
:original_implementation_value
|
272
|
+
end
|
273
|
+
|
274
|
+
args = nil
|
275
|
+
scenario = @creator.stub.proxy(@subject, :foobar).with() do |*args|
|
276
|
+
args = args
|
277
|
+
end
|
278
|
+
@subject.foobar
|
279
|
+
args.should == [:original_implementation_value]
|
280
|
+
scenario.block_callback_strategy.should == :after_call
|
281
|
+
end
|
258
282
|
end
|
259
283
|
|
260
284
|
describe ScenarioCreator, "#instance_of" do
|
@@ -5,16 +5,35 @@ describe ScenarioDefinition, :shared => true do
|
|
5
5
|
before do
|
6
6
|
@space = Space.new
|
7
7
|
@object = Object.new
|
8
|
-
|
9
|
-
[b, a]
|
10
|
-
end
|
8
|
+
add_original_method
|
11
9
|
@double = @space.double(@object, :foobar)
|
12
10
|
@scenario = @space.scenario(@double)
|
13
11
|
@definition = @scenario.definition
|
14
12
|
end
|
13
|
+
|
14
|
+
def add_original_method
|
15
|
+
def @object.foobar(a, b)
|
16
|
+
:original_return_value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ScenarioDefinition, " with returns block_callback_strategy", :shared => true do
|
22
|
+
before do
|
23
|
+
@definition.returns_block_callback_strategy!
|
24
|
+
create_definition
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe ScenarioDefinition, " with after_call block_callback_strategy", :shared => true do
|
29
|
+
before do
|
30
|
+
@definition.implemented_by_original_method
|
31
|
+
@definition.after_call_block_callback_strategy!
|
32
|
+
create_definition
|
33
|
+
end
|
15
34
|
end
|
16
35
|
|
17
|
-
describe ScenarioDefinition, "#with" do
|
36
|
+
describe ScenarioDefinition, "#with", :shared => true do
|
18
37
|
it_should_behave_like "RR::ScenarioDefinition"
|
19
38
|
|
20
39
|
it "returns ScenarioDefinition" do
|
@@ -22,23 +41,44 @@ describe ScenarioDefinition, "#with" do
|
|
22
41
|
end
|
23
42
|
|
24
43
|
it "sets an ArgumentEqualityExpectation" do
|
25
|
-
@definition.
|
26
|
-
@definition.should be_exact_match(1)
|
44
|
+
@definition.should be_exact_match(1, 2)
|
27
45
|
@definition.should_not be_exact_match(2)
|
28
46
|
end
|
29
47
|
|
48
|
+
def create_definition
|
49
|
+
actual_args = nil
|
50
|
+
@definition.with(1, 2) do |*args|
|
51
|
+
actual_args = args
|
52
|
+
:new_return_value
|
53
|
+
end
|
54
|
+
@object.foobar(1, 2)
|
55
|
+
@return_value = @object.foobar(1, 2)
|
56
|
+
@args = actual_args
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ScenarioDefinition, "#with with returns block_callback_strategy" do
|
61
|
+
it_should_behave_like "RR::ScenarioDefinition#with"
|
62
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
63
|
+
|
30
64
|
it "sets return value when block passed in" do
|
31
|
-
@
|
32
|
-
@
|
65
|
+
@return_value.should == :new_return_value
|
66
|
+
@args.should == [1, 2]
|
33
67
|
end
|
34
68
|
end
|
35
69
|
|
36
|
-
describe ScenarioDefinition, "#
|
37
|
-
it_should_behave_like "RR::ScenarioDefinition"
|
70
|
+
describe ScenarioDefinition, "#with with after_call block_callback_strategy" do
|
71
|
+
it_should_behave_like "RR::ScenarioDefinition#with"
|
72
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
38
73
|
|
39
|
-
|
40
|
-
@
|
74
|
+
it "sets return value when block passed in" do
|
75
|
+
@return_value.should == :new_return_value
|
76
|
+
@args.should == [:original_return_value]
|
41
77
|
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe ScenarioDefinition, "#with_any_args", :shared => true do
|
81
|
+
it_should_behave_like "RR::ScenarioDefinition"
|
42
82
|
|
43
83
|
it "returns ScenarioDefinition" do
|
44
84
|
@definition.with_no_args.should === @definition
|
@@ -49,17 +89,39 @@ describe ScenarioDefinition, "#with_any_args" do
|
|
49
89
|
@definition.should be_wildcard_match(1)
|
50
90
|
end
|
51
91
|
|
92
|
+
def create_definition
|
93
|
+
actual_args = nil
|
94
|
+
@definition.with_any_args do |*args|
|
95
|
+
actual_args = args
|
96
|
+
:new_return_value
|
97
|
+
end
|
98
|
+
@return_value = @object.foobar(1, 2)
|
99
|
+
@args = actual_args
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe ScenarioDefinition, "#with_any_args with returns block_callback_strategy" do
|
104
|
+
it_should_behave_like "RR::ScenarioDefinition#with_any_args"
|
105
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
106
|
+
|
52
107
|
it "sets return value when block passed in" do
|
53
|
-
@
|
108
|
+
@return_value.should == :new_return_value
|
109
|
+
@args.should == [1, 2]
|
54
110
|
end
|
55
111
|
end
|
56
112
|
|
57
|
-
describe ScenarioDefinition, "#
|
58
|
-
it_should_behave_like "RR::ScenarioDefinition"
|
113
|
+
describe ScenarioDefinition, "#with_any_args with after_call block_callback_strategy" do
|
114
|
+
it_should_behave_like "RR::ScenarioDefinition#with_any_args"
|
115
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
59
116
|
|
60
|
-
|
61
|
-
@
|
117
|
+
it "sets return value when block passed in" do
|
118
|
+
@return_value.should == :new_return_value
|
119
|
+
@args.should == [:original_return_value]
|
62
120
|
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe ScenarioDefinition, "#with_no_args", :shared => true do
|
124
|
+
it_should_behave_like "RR::ScenarioDefinition"
|
63
125
|
|
64
126
|
it "returns ScenarioDefinition" do
|
65
127
|
@definition.with_no_args.should === @definition
|
@@ -69,8 +131,40 @@ describe ScenarioDefinition, "#with_no_args" do
|
|
69
131
|
@definition.argument_expectation.should == Expectations::ArgumentEqualityExpectation.new()
|
70
132
|
end
|
71
133
|
|
134
|
+
def add_original_method
|
135
|
+
def @object.foobar()
|
136
|
+
:original_return_value
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def create_definition
|
141
|
+
actual_args = nil
|
142
|
+
@definition.with_no_args do |*args|
|
143
|
+
actual_args = args
|
144
|
+
:new_return_value
|
145
|
+
end
|
146
|
+
@return_value = @object.foobar
|
147
|
+
@args = actual_args
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe ScenarioDefinition, "#with_no_args with returns block_callback_strategy" do
|
152
|
+
it_should_behave_like "RR::ScenarioDefinition#with_no_args"
|
153
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
154
|
+
|
155
|
+
it "sets return value when block passed in" do
|
156
|
+
@return_value.should == :new_return_value
|
157
|
+
@args.should == []
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
describe ScenarioDefinition, "#with_no_args with after_call block_callback_strategy" do
|
162
|
+
it_should_behave_like "RR::ScenarioDefinition#with_no_args"
|
163
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
164
|
+
|
72
165
|
it "sets return value when block passed in" do
|
73
|
-
@
|
166
|
+
@return_value.should == :new_return_value
|
167
|
+
@args.should == [:original_return_value]
|
74
168
|
end
|
75
169
|
end
|
76
170
|
|
@@ -93,7 +187,7 @@ describe ScenarioDefinition, "#never" do
|
|
93
187
|
end
|
94
188
|
end
|
95
189
|
|
96
|
-
describe ScenarioDefinition, "#once" do
|
190
|
+
describe ScenarioDefinition, "#once", :shared => true do
|
97
191
|
it_should_behave_like "RR::ScenarioDefinition"
|
98
192
|
|
99
193
|
it "returns ScenarioDefinition" do
|
@@ -101,18 +195,41 @@ describe ScenarioDefinition, "#once" do
|
|
101
195
|
end
|
102
196
|
|
103
197
|
it "sets up a Times Called Expectation with 1" do
|
104
|
-
@definition.once.with_any_args
|
105
|
-
@object.foobar
|
106
198
|
proc {@object.foobar}.should raise_error(Errors::TimesCalledError)
|
107
199
|
end
|
108
200
|
|
201
|
+
def create_definition
|
202
|
+
actual_args = nil
|
203
|
+
@definition.with_any_args.once do |*args|
|
204
|
+
actual_args = args
|
205
|
+
:new_return_value
|
206
|
+
end
|
207
|
+
@return_value = @object.foobar(1, 2)
|
208
|
+
@args = actual_args
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe ScenarioDefinition, "#once with returns block_callback_strategy" do
|
213
|
+
it_should_behave_like "RR::ScenarioDefinition#once"
|
214
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
215
|
+
|
216
|
+
it "sets return value when block passed in" do
|
217
|
+
@return_value.should == :new_return_value
|
218
|
+
@args.should == [1, 2]
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
describe ScenarioDefinition, "#once with after_call block_callback_strategy" do
|
223
|
+
it_should_behave_like "RR::ScenarioDefinition#once"
|
224
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
225
|
+
|
109
226
|
it "sets return value when block passed in" do
|
110
|
-
@
|
111
|
-
@
|
227
|
+
@return_value.should == :new_return_value
|
228
|
+
@args.should == [:original_return_value]
|
112
229
|
end
|
113
230
|
end
|
114
231
|
|
115
|
-
describe ScenarioDefinition, "#twice" do
|
232
|
+
describe ScenarioDefinition, "#twice", :shared => true do
|
116
233
|
it_should_behave_like "RR::ScenarioDefinition"
|
117
234
|
|
118
235
|
it "returns ScenarioDefinition" do
|
@@ -121,18 +238,42 @@ describe ScenarioDefinition, "#twice" do
|
|
121
238
|
|
122
239
|
it "sets up a Times Called Expectation with 2" do
|
123
240
|
@definition.twice.with_any_args
|
124
|
-
@object.foobar
|
125
|
-
@object.foobar
|
126
|
-
proc {@object.foobar}.should raise_error(Errors::TimesCalledError)
|
241
|
+
proc {@object.foobar(1, 2)}.should raise_error(Errors::TimesCalledError)
|
127
242
|
end
|
128
243
|
|
244
|
+
def create_definition
|
245
|
+
actual_args = nil
|
246
|
+
@definition.with_any_args.twice do |*args|
|
247
|
+
actual_args = args
|
248
|
+
:new_return_value
|
249
|
+
end
|
250
|
+
@object.foobar(1, 2)
|
251
|
+
@return_value = @object.foobar(1, 2)
|
252
|
+
@args = actual_args
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe ScenarioDefinition, "#twice with returns block_callback_strategy" do
|
257
|
+
it_should_behave_like "RR::ScenarioDefinition#twice"
|
258
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
259
|
+
|
129
260
|
it "sets return value when block passed in" do
|
130
|
-
@
|
131
|
-
@
|
261
|
+
@return_value.should == :new_return_value
|
262
|
+
@args.should == [1, 2]
|
132
263
|
end
|
133
264
|
end
|
134
265
|
|
135
|
-
describe ScenarioDefinition, "#
|
266
|
+
describe ScenarioDefinition, "#twice with after_call block_callback_strategy" do
|
267
|
+
it_should_behave_like "RR::ScenarioDefinition#twice"
|
268
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
269
|
+
|
270
|
+
it "sets return value when block passed in" do
|
271
|
+
@return_value.should == :new_return_value
|
272
|
+
@args.should == [:original_return_value]
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
describe ScenarioDefinition, "#at_least", :shared => true do
|
136
277
|
it_should_behave_like "RR::ScenarioDefinition"
|
137
278
|
|
138
279
|
it "returns ScenarioDefinition" do
|
@@ -140,17 +281,42 @@ describe ScenarioDefinition, "#at_least" do
|
|
140
281
|
end
|
141
282
|
|
142
283
|
it "sets up a Times Called Expectation with 1" do
|
143
|
-
@definition.at_least(2)
|
144
284
|
@definition.times_matcher.should == TimesCalledMatchers::AtLeastMatcher.new(2)
|
145
285
|
end
|
146
286
|
|
287
|
+
def create_definition
|
288
|
+
actual_args = nil
|
289
|
+
@definition.with_any_args.at_least(2) do |*args|
|
290
|
+
actual_args = args
|
291
|
+
:new_return_value
|
292
|
+
end
|
293
|
+
@object.foobar(1, 2)
|
294
|
+
@return_value = @object.foobar(1, 2)
|
295
|
+
@args = actual_args
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
describe ScenarioDefinition, "#at_least with returns block_callback_strategy" do
|
300
|
+
it_should_behave_like "RR::ScenarioDefinition#at_least"
|
301
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
302
|
+
|
303
|
+
it "sets return value when block passed in" do
|
304
|
+
@return_value.should == :new_return_value
|
305
|
+
@args.should == [1, 2]
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
describe ScenarioDefinition, "#at_least with after_call block_callback_strategy" do
|
310
|
+
it_should_behave_like "RR::ScenarioDefinition#at_least"
|
311
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
312
|
+
|
147
313
|
it "sets return value when block passed in" do
|
148
|
-
@
|
149
|
-
@
|
314
|
+
@return_value.should == :new_return_value
|
315
|
+
@args.should == [:original_return_value]
|
150
316
|
end
|
151
317
|
end
|
152
318
|
|
153
|
-
describe ScenarioDefinition, "#at_most" do
|
319
|
+
describe ScenarioDefinition, "#at_most", :shared => true do
|
154
320
|
it_should_behave_like "RR::ScenarioDefinition"
|
155
321
|
|
156
322
|
it "returns ScenarioDefinition" do
|
@@ -158,9 +324,6 @@ describe ScenarioDefinition, "#at_most" do
|
|
158
324
|
end
|
159
325
|
|
160
326
|
it "sets up a Times Called Expectation with 1" do
|
161
|
-
@definition.at_most(2).with_any_args
|
162
|
-
@object.foobar
|
163
|
-
@object.foobar
|
164
327
|
proc do
|
165
328
|
@object.foobar
|
166
329
|
end.should raise_error(
|
@@ -169,13 +332,39 @@ describe ScenarioDefinition, "#at_most" do
|
|
169
332
|
)
|
170
333
|
end
|
171
334
|
|
335
|
+
def create_definition
|
336
|
+
actual_args = nil
|
337
|
+
@definition.with_any_args.at_most(2) do |*args|
|
338
|
+
actual_args = args
|
339
|
+
:new_return_value
|
340
|
+
end
|
341
|
+
@object.foobar(1, 2)
|
342
|
+
@return_value = @object.foobar(1, 2)
|
343
|
+
@args = actual_args
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
describe ScenarioDefinition, "#at_most with returns block_callback_strategy" do
|
348
|
+
it_should_behave_like "RR::ScenarioDefinition#at_most"
|
349
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
350
|
+
|
351
|
+
it "sets return value when block passed in" do
|
352
|
+
@return_value.should == :new_return_value
|
353
|
+
@args.should == [1, 2]
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
describe ScenarioDefinition, "#at_most with after_call block_callback_strategy" do
|
358
|
+
it_should_behave_like "RR::ScenarioDefinition#at_most"
|
359
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
360
|
+
|
172
361
|
it "sets return value when block passed in" do
|
173
|
-
@
|
174
|
-
@
|
362
|
+
@return_value.should == :new_return_value
|
363
|
+
@args.should == [:original_return_value]
|
175
364
|
end
|
176
365
|
end
|
177
366
|
|
178
|
-
describe ScenarioDefinition, "#times" do
|
367
|
+
describe ScenarioDefinition, "#times", :shared => true do
|
179
368
|
it_should_behave_like "RR::ScenarioDefinition"
|
180
369
|
|
181
370
|
it "returns ScenarioDefinition" do
|
@@ -183,20 +372,43 @@ describe ScenarioDefinition, "#times" do
|
|
183
372
|
end
|
184
373
|
|
185
374
|
it "sets up a Times Called Expectation with passed in times" do
|
186
|
-
@
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
375
|
+
proc {@object.foobar(1, 2)}.should raise_error(Errors::TimesCalledError)
|
376
|
+
end
|
377
|
+
|
378
|
+
def create_definition
|
379
|
+
actual_args = nil
|
380
|
+
@definition.with(1, 2).times(3) do |*args|
|
381
|
+
actual_args = args
|
382
|
+
:new_return_value
|
383
|
+
end
|
384
|
+
@object.foobar(1, 2)
|
385
|
+
@object.foobar(1, 2)
|
386
|
+
@return_value = @object.foobar(1, 2)
|
387
|
+
@args = actual_args
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe ScenarioDefinition, "#times with returns block_callback_strategy" do
|
392
|
+
it_should_behave_like "RR::ScenarioDefinition#times"
|
393
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
394
|
+
|
395
|
+
it "sets return value when block passed in" do
|
396
|
+
@return_value.should == :new_return_value
|
397
|
+
@args.should == [1, 2]
|
191
398
|
end
|
399
|
+
end
|
400
|
+
|
401
|
+
describe ScenarioDefinition, "#times with after_call block_callback_strategy" do
|
402
|
+
it_should_behave_like "RR::ScenarioDefinition#times"
|
403
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
192
404
|
|
193
405
|
it "sets return value when block passed in" do
|
194
|
-
@
|
195
|
-
@
|
406
|
+
@return_value.should == :new_return_value
|
407
|
+
@args.should == [:original_return_value]
|
196
408
|
end
|
197
409
|
end
|
198
410
|
|
199
|
-
describe ScenarioDefinition, "#any_number_of_times" do
|
411
|
+
describe ScenarioDefinition, "#any_number_of_times", :shared => true do
|
200
412
|
it_should_behave_like "RR::ScenarioDefinition"
|
201
413
|
|
202
414
|
it "returns ScenarioDefinition" do
|
@@ -204,17 +416,42 @@ describe ScenarioDefinition, "#any_number_of_times" do
|
|
204
416
|
end
|
205
417
|
|
206
418
|
it "sets up a Times Called Expectation with AnyTimes matcher" do
|
207
|
-
@definition.any_number_of_times
|
208
419
|
@definition.times_matcher.should == TimesCalledMatchers::AnyTimesMatcher.new
|
209
420
|
end
|
210
421
|
|
422
|
+
def create_definition
|
423
|
+
actual_args = nil
|
424
|
+
@definition.with(1, 2).any_number_of_times do |*args|
|
425
|
+
actual_args = args
|
426
|
+
:new_return_value
|
427
|
+
end
|
428
|
+
@object.foobar(1, 2)
|
429
|
+
@return_value = @object.foobar(1, 2)
|
430
|
+
@args = actual_args
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
describe ScenarioDefinition, "#any_number_of_times with returns block_callback_strategy" do
|
435
|
+
it_should_behave_like "RR::ScenarioDefinition#any_number_of_times"
|
436
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
437
|
+
|
438
|
+
it "sets return value when block passed in" do
|
439
|
+
@return_value.should == :new_return_value
|
440
|
+
@args.should == [1, 2]
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
describe ScenarioDefinition, "#any_number_of_times with after_call block_callback_strategy" do
|
445
|
+
it_should_behave_like "RR::ScenarioDefinition#any_number_of_times"
|
446
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
447
|
+
|
211
448
|
it "sets return value when block passed in" do
|
212
|
-
@
|
213
|
-
@
|
449
|
+
@return_value.should == :new_return_value
|
450
|
+
@args.should == [:original_return_value]
|
214
451
|
end
|
215
452
|
end
|
216
453
|
|
217
|
-
describe ScenarioDefinition, "#ordered" do
|
454
|
+
describe ScenarioDefinition, "#ordered", :shared => true do
|
218
455
|
it_should_behave_like "RR::ScenarioDefinition"
|
219
456
|
|
220
457
|
it "adds itself to the ordered scenarios list" do
|
@@ -223,21 +460,14 @@ describe ScenarioDefinition, "#ordered" do
|
|
223
460
|
end
|
224
461
|
|
225
462
|
it "does not double add itself" do
|
226
|
-
@definition.ordered
|
227
463
|
@definition.ordered
|
228
464
|
@space.ordered_scenarios.should == [@scenario]
|
229
465
|
end
|
230
466
|
|
231
467
|
it "sets ordered? to true" do
|
232
|
-
@definition.ordered
|
233
468
|
@definition.should be_ordered
|
234
469
|
end
|
235
470
|
|
236
|
-
it "sets return value when block passed in" do
|
237
|
-
@definition.with_any_args.once.ordered {:return_value}
|
238
|
-
@object.foobar.should == :return_value
|
239
|
-
end
|
240
|
-
|
241
471
|
it "raises error when there is no Scenario" do
|
242
472
|
@definition.scenario = nil
|
243
473
|
proc do
|
@@ -249,6 +479,36 @@ describe ScenarioDefinition, "#ordered" do
|
|
249
479
|
"probe the class's #new method instead."
|
250
480
|
)
|
251
481
|
end
|
482
|
+
|
483
|
+
def create_definition
|
484
|
+
actual_args = nil
|
485
|
+
@definition.with(1, 2).once.ordered do |*args|
|
486
|
+
actual_args = args
|
487
|
+
:new_return_value
|
488
|
+
end
|
489
|
+
@return_value = @object.foobar(1, 2)
|
490
|
+
@args = actual_args
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
describe ScenarioDefinition, "#ordered with returns block_callback_strategy" do
|
495
|
+
it_should_behave_like "RR::ScenarioDefinition#ordered"
|
496
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
497
|
+
|
498
|
+
it "sets return value when block passed in" do
|
499
|
+
@return_value.should == :new_return_value
|
500
|
+
@args.should == [1, 2]
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
describe ScenarioDefinition, "#ordered with after_call block_callback_strategy" do
|
505
|
+
it_should_behave_like "RR::ScenarioDefinition#ordered"
|
506
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
507
|
+
|
508
|
+
it "sets return value when block passed in" do
|
509
|
+
@return_value.should == :new_return_value
|
510
|
+
@args.should == [:original_return_value]
|
511
|
+
end
|
252
512
|
end
|
253
513
|
|
254
514
|
describe ScenarioDefinition, "#ordered?" do
|
@@ -259,31 +519,52 @@ describe ScenarioDefinition, "#ordered?" do
|
|
259
519
|
end
|
260
520
|
end
|
261
521
|
|
262
|
-
describe ScenarioDefinition, "#yields" do
|
522
|
+
describe ScenarioDefinition, "#yields", :shared => true do
|
263
523
|
it_should_behave_like "RR::ScenarioDefinition"
|
264
524
|
|
265
525
|
it "returns ScenarioDefinition" do
|
266
526
|
@definition.yields(:baz).should === @definition
|
267
527
|
end
|
268
528
|
|
269
|
-
it "yields the passed in argument to the call block when there is no returns value set" do
|
270
|
-
@
|
529
|
+
it "yields the passed in argument to the call block when there is a no returns value set" do
|
530
|
+
@passed_in_block_arg.should == :baz
|
531
|
+
end
|
532
|
+
|
533
|
+
def create_definition
|
534
|
+
actual_args = nil
|
535
|
+
@definition.with(1, 2).once.yields(:baz) do |*args|
|
536
|
+
actual_args = args
|
537
|
+
:new_return_value
|
538
|
+
end
|
271
539
|
passed_in_block_arg = nil
|
272
|
-
@object.foobar
|
273
|
-
|
540
|
+
@return_value = @object.foobar(1, 2) do |arg|
|
541
|
+
passed_in_block_arg = arg
|
542
|
+
end
|
543
|
+
@passed_in_block_arg = passed_in_block_arg
|
544
|
+
|
545
|
+
@args = actual_args
|
274
546
|
end
|
547
|
+
end
|
275
548
|
|
276
|
-
|
277
|
-
|
549
|
+
describe ScenarioDefinition, "#yields with returns block_callback_strategy" do
|
550
|
+
it_should_behave_like "RR::ScenarioDefinition#yields"
|
551
|
+
it_should_behave_like "RR::ScenarioDefinition with returns block_callback_strategy"
|
278
552
|
|
279
|
-
|
280
|
-
@
|
281
|
-
|
553
|
+
it "sets return value when block passed in" do
|
554
|
+
@return_value.should == :new_return_value
|
555
|
+
@args.length.should == 3
|
556
|
+
@args[0..1].should == [1, 2]
|
557
|
+
@args[2].should be_instance_of(Proc)
|
282
558
|
end
|
559
|
+
end
|
560
|
+
|
561
|
+
describe ScenarioDefinition, "#yields with after_call block_callback_strategy" do
|
562
|
+
it_should_behave_like "RR::ScenarioDefinition#yields"
|
563
|
+
it_should_behave_like "RR::ScenarioDefinition with after_call block_callback_strategy"
|
283
564
|
|
284
565
|
it "sets return value when block passed in" do
|
285
|
-
@
|
286
|
-
@
|
566
|
+
@return_value.should == :new_return_value
|
567
|
+
@args.should == [:original_return_value]
|
287
568
|
end
|
288
569
|
end
|
289
570
|
|
@@ -393,7 +674,7 @@ describe ScenarioDefinition, "#implemented_by_original_method" do
|
|
393
674
|
|
394
675
|
it "sets the implementation to the original method" do
|
395
676
|
@definition.implemented_by_original_method.with_any_args
|
396
|
-
@object.foobar(1, 2).should ==
|
677
|
+
@object.foobar(1, 2).should == :original_return_value
|
397
678
|
end
|
398
679
|
|
399
680
|
it "calls method_missing when original_method does not exist" do
|
@@ -500,4 +781,30 @@ describe ScenarioDefinition, "#expected_arguments" do
|
|
500
781
|
@definition.expected_arguments.should == []
|
501
782
|
end
|
502
783
|
end
|
784
|
+
|
785
|
+
describe ScenarioDefinition, "#block_callback_strategy" do
|
786
|
+
it_should_behave_like "RR::ScenarioDefinition"
|
787
|
+
|
788
|
+
it "defaults to :returns" do
|
789
|
+
@definition.block_callback_strategy.should == :returns
|
790
|
+
end
|
791
|
+
end
|
792
|
+
|
793
|
+
describe ScenarioDefinition, "#returns_block_callback_strategy!" do
|
794
|
+
it_should_behave_like "RR::ScenarioDefinition"
|
795
|
+
|
796
|
+
it "sets the block_callback_strategy to :returns" do
|
797
|
+
@definition.returns_block_callback_strategy!
|
798
|
+
@definition.block_callback_strategy.should == :returns
|
799
|
+
end
|
800
|
+
end
|
801
|
+
|
802
|
+
describe ScenarioDefinition, "#after_call_block_callback_strategy!" do
|
803
|
+
it_should_behave_like "RR::ScenarioDefinition"
|
804
|
+
|
805
|
+
it "sets the block_callback_strategy to :after_call" do
|
806
|
+
@definition.after_call_block_callback_strategy!
|
807
|
+
@definition.block_callback_strategy.should == :after_call
|
808
|
+
end
|
809
|
+
end
|
503
810
|
end
|
@@ -4,10 +4,10 @@ require "spec"
|
|
4
4
|
class RspecExampleSuite
|
5
5
|
def run
|
6
6
|
options = ::Spec::Runner::OptionParser.new.parse(ARGV.dup, STDERR, STDOUT, false)
|
7
|
+
options.configure
|
7
8
|
$behaviour_runner = options.create_behaviour_runner
|
8
9
|
|
9
10
|
require_specs
|
10
|
-
|
11
11
|
puts "Running Rspec Example Suite"
|
12
12
|
$behaviour_runner.run(ARGV, false)
|
13
13
|
end
|
@@ -7,11 +7,11 @@ module RR
|
|
7
7
|
attr_accessor :times_called,
|
8
8
|
:argument_expectation,
|
9
9
|
:times_matcher,
|
10
|
-
:double,
|
11
10
|
:implementation,
|
12
11
|
:after_call_value,
|
13
12
|
:yields_value,
|
14
13
|
:scenario
|
14
|
+
attr_reader :block_callback_strategy
|
15
15
|
|
16
16
|
def initialize(space)
|
17
17
|
@space = space
|
@@ -20,6 +20,7 @@ module RR
|
|
20
20
|
@times_matcher = nil
|
21
21
|
@after_call_value = nil
|
22
22
|
@yields_value = nil
|
23
|
+
returns_block_callback_strategy!
|
23
24
|
end
|
24
25
|
|
25
26
|
# Scenario#with sets the expectation that the Scenario will receive
|
@@ -30,7 +31,7 @@ module RR
|
|
30
31
|
# mock(subject).method_name.with(1, 2) {:return_value}
|
31
32
|
def with(*args, &returns)
|
32
33
|
@argument_expectation = Expectations::ArgumentEqualityExpectation.new(*args)
|
33
|
-
|
34
|
+
install_method_callback returns
|
34
35
|
self
|
35
36
|
end
|
36
37
|
|
@@ -42,7 +43,7 @@ module RR
|
|
42
43
|
# mock(subject).method_name.with_any_args {:return_value}
|
43
44
|
def with_any_args(&returns)
|
44
45
|
@argument_expectation = Expectations::AnyArgumentExpectation.new
|
45
|
-
|
46
|
+
install_method_callback returns
|
46
47
|
self
|
47
48
|
end
|
48
49
|
|
@@ -54,7 +55,7 @@ module RR
|
|
54
55
|
# mock(subject).method_name.with_no_args {:return_value}
|
55
56
|
def with_no_args(&returns)
|
56
57
|
@argument_expectation = Expectations::ArgumentEqualityExpectation.new()
|
57
|
-
|
58
|
+
install_method_callback returns
|
58
59
|
self
|
59
60
|
end
|
60
61
|
|
@@ -77,7 +78,7 @@ module RR
|
|
77
78
|
# mock(subject).method_name.once {:return_value}
|
78
79
|
def once(&returns)
|
79
80
|
@times_matcher = TimesCalledMatchers::IntegerMatcher.new(1)
|
80
|
-
|
81
|
+
install_method_callback returns
|
81
82
|
self
|
82
83
|
end
|
83
84
|
|
@@ -89,7 +90,7 @@ module RR
|
|
89
90
|
# mock(subject).method_name.twice {:return_value}
|
90
91
|
def twice(&returns)
|
91
92
|
@times_matcher = TimesCalledMatchers::IntegerMatcher.new(2)
|
92
|
-
|
93
|
+
install_method_callback returns
|
93
94
|
self
|
94
95
|
end
|
95
96
|
|
@@ -102,7 +103,7 @@ module RR
|
|
102
103
|
# mock(subject).method_name.at_least(4) {:return_value}
|
103
104
|
def at_least(number, &returns)
|
104
105
|
@times_matcher = TimesCalledMatchers::AtLeastMatcher.new(number)
|
105
|
-
|
106
|
+
install_method_callback returns
|
106
107
|
self
|
107
108
|
end
|
108
109
|
|
@@ -115,7 +116,7 @@ module RR
|
|
115
116
|
# mock(subject).method_name.at_most(4) {:return_value}
|
116
117
|
def at_most(number, &returns)
|
117
118
|
@times_matcher = TimesCalledMatchers::AtMostMatcher.new(number)
|
118
|
-
|
119
|
+
install_method_callback returns
|
119
120
|
self
|
120
121
|
end
|
121
122
|
|
@@ -128,7 +129,7 @@ module RR
|
|
128
129
|
# mock(subject).method_name.any_number_of_times
|
129
130
|
def any_number_of_times(&returns)
|
130
131
|
@times_matcher = TimesCalledMatchers::AnyTimesMatcher.new
|
131
|
-
|
132
|
+
install_method_callback returns
|
132
133
|
self
|
133
134
|
end
|
134
135
|
|
@@ -140,7 +141,7 @@ module RR
|
|
140
141
|
# mock(subject).method_name.times(4) {:return_value}
|
141
142
|
def times(matcher_value, &returns)
|
142
143
|
@times_matcher = TimesCalledMatchers::TimesCalledMatcher.create(matcher_value)
|
143
|
-
|
144
|
+
install_method_callback returns
|
144
145
|
self
|
145
146
|
end
|
146
147
|
|
@@ -159,7 +160,7 @@ module RR
|
|
159
160
|
) unless @scenario
|
160
161
|
@ordered = true
|
161
162
|
@space.ordered_scenarios << @scenario unless @space.ordered_scenarios.include?(@scenario)
|
162
|
-
|
163
|
+
install_method_callback returns
|
163
164
|
self
|
164
165
|
end
|
165
166
|
|
@@ -181,7 +182,7 @@ module RR
|
|
181
182
|
# subject.method_name {|yield_arg1, yield_arg2|}
|
182
183
|
def yields(*args, &returns)
|
183
184
|
@yields_value = args
|
184
|
-
|
185
|
+
install_method_callback returns
|
185
186
|
self
|
186
187
|
end
|
187
188
|
|
@@ -273,5 +274,23 @@ module RR
|
|
273
274
|
return [] unless argument_expectation
|
274
275
|
argument_expectation.expected_arguments
|
275
276
|
end
|
277
|
+
|
278
|
+
def returns_block_callback_strategy! # :nodoc:
|
279
|
+
@block_callback_strategy = :returns
|
280
|
+
end
|
281
|
+
|
282
|
+
def after_call_block_callback_strategy! # :nodoc:
|
283
|
+
@block_callback_strategy = :after_call
|
284
|
+
end
|
285
|
+
|
286
|
+
protected
|
287
|
+
def install_method_callback(block)
|
288
|
+
return unless block
|
289
|
+
case @block_callback_strategy
|
290
|
+
when :returns; returns(&block)
|
291
|
+
when :after_call; after_call(&block)
|
292
|
+
else raise "Unknown block_callback_strategy: #{@block_callback_strategy.inspect}"
|
293
|
+
end
|
294
|
+
end
|
276
295
|
end
|
277
296
|
end
|
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.3.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.3.10
|
7
|
+
date: 2007-08-18 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
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/rr/extensions/instance_methods.rb
|
73
73
|
- examples/environment_fixture_setup.rb
|
74
74
|
- examples/rspec_example_suite.rb
|
75
|
+
- examples/core_example_suite.rb
|
75
76
|
- examples/example_suite.rb
|
76
77
|
- examples/example_helper.rb
|
77
78
|
- examples/test_unit_example_suite.rb
|