rr 0.3.11 → 0.4.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/CHANGES +8 -3
- data/README +130 -39
- data/Rakefile +6 -5
- data/lib/rr.rb +8 -8
- data/lib/rr/adapters/rr_methods.rb +228 -0
- data/lib/rr/adapters/rspec.rb +1 -1
- data/lib/rr/adapters/test_unit.rb +1 -1
- data/lib/rr/double.rb +294 -89
- data/lib/rr/{scenario_creator.rb → double_creator.rb} +65 -66
- data/lib/rr/{scenario_definition.rb → double_definition.rb} +36 -36
- data/lib/rr/{scenario_definition_builder.rb → double_definition_builder.rb} +3 -3
- data/lib/rr/double_insertion.rb +132 -0
- data/lib/rr/{scenario_matches.rb → double_matches.rb} +2 -2
- data/lib/rr/{scenario_method_proxy.rb → double_method_proxy.rb} +2 -2
- data/lib/rr/errors/argument_equality_error.rb +3 -3
- data/lib/rr/errors/rr_error.rb +13 -13
- data/lib/rr/errors/scenario_definition_error.rb +3 -3
- data/lib/rr/errors/scenario_not_found_error.rb +3 -3
- data/lib/rr/errors/scenario_order_error.rb +3 -3
- data/lib/rr/errors/times_called_error.rb +3 -3
- data/lib/rr/expectations/any_argument_expectation.rb +1 -1
- data/lib/rr/expectations/argument_equality_expectation.rb +1 -1
- data/lib/rr/expectations/times_called_expectation.rb +1 -1
- data/lib/rr/hash_with_object_id_key.rb +1 -1
- data/lib/rr/space.rb +40 -40
- data/lib/rr/times_called_matchers/any_times_matcher.rb +13 -13
- data/lib/rr/times_called_matchers/at_least_matcher.rb +11 -11
- data/lib/rr/times_called_matchers/at_most_matcher.rb +16 -16
- data/lib/rr/times_called_matchers/integer_matcher.rb +13 -13
- data/lib/rr/times_called_matchers/non_terminal.rb +21 -21
- data/lib/rr/times_called_matchers/proc_matcher.rb +7 -7
- data/lib/rr/times_called_matchers/range_matcher.rb +14 -14
- data/lib/rr/times_called_matchers/terminal.rb +16 -16
- data/lib/rr/times_called_matchers/times_called_matcher.rb +32 -32
- data/spec/core_spec_suite.rb +18 -0
- data/{examples → spec}/environment_fixture_setup.rb +0 -1
- data/{examples/high_level_example.rb → spec/high_level_spec.rb} +11 -11
- data/spec/rr/adapters/rr_methods_argument_matcher_spec.rb +67 -0
- data/spec/rr/adapters/rr_methods_creator_spec.rb +365 -0
- data/spec/rr/adapters/rr_methods_space_spec.rb +134 -0
- data/spec/rr/adapters/rr_methods_spec_helper.rb +11 -0
- data/{examples/rr/extensions/instance_methods_times_matcher_example.rb → spec/rr/adapters/rr_methods_times_matcher_spec.rb} +4 -4
- data/spec/rr/double/double_insertion_bind_spec.rb +78 -0
- data/spec/rr/double/double_insertion_dispatching_spec.rb +221 -0
- data/spec/rr/double/double_insertion_has_original_method_spec.rb +56 -0
- data/spec/rr/double/double_insertion_register_scenario_spec.rb +24 -0
- data/spec/rr/double/double_insertion_reset_spec.rb +89 -0
- data/spec/rr/double/double_insertion_spec.rb +66 -0
- data/spec/rr/double/double_insertion_verify_spec.rb +23 -0
- data/spec/rr/double_creator_spec.rb +454 -0
- data/{examples/rr/scenario_definition_example.rb → spec/rr/double_definition_spec.rb} +143 -143
- data/spec/rr/double_method_proxy_spec.rb +71 -0
- data/spec/rr/double_spec.rb +654 -0
- data/spec/rr/errors/rr_error_spec.rb +65 -0
- data/spec/rr/expectations/any_argument_expectation_spec.rb +47 -0
- data/spec/rr/expectations/anything_argument_equality_expectation_spec.rb +38 -0
- data/spec/rr/expectations/argument_equality_expectation_spec.rb +58 -0
- data/spec/rr/expectations/boolean_argument_equality_expectation_spec.rb +53 -0
- data/spec/rr/expectations/duck_type_argument_equality_expectation_spec.rb +71 -0
- data/spec/rr/expectations/is_a_argument_equality_expectation_spec.rb +51 -0
- data/spec/rr/expectations/numeric_argument_equality_expectation_spec.rb +47 -0
- data/spec/rr/expectations/range_argument_equality_expectation_spec.rb +59 -0
- data/spec/rr/expectations/regexp_argument_equality_expectation_spec.rb +72 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +43 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +67 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +71 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +21 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +103 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +79 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +81 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +40 -0
- data/spec/rr/rspec/rspec_adapter_spec.rb +65 -0
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +52 -0
- data/spec/rr/rspec/rspec_usage_spec.rb +67 -0
- data/spec/rr/space/hash_with_object_id_key_spec.rb +88 -0
- data/spec/rr/space/space_create_spec.rb +278 -0
- data/spec/rr/space/space_helper.rb +7 -0
- data/spec/rr/space/space_register_spec.rb +32 -0
- data/spec/rr/space/space_reset_spec.rb +131 -0
- data/spec/rr/space/space_spec.rb +32 -0
- data/spec/rr/space/space_verify_spec.rb +181 -0
- data/{examples → spec}/rr/test_unit/test_helper.rb +1 -1
- data/{examples → spec}/rr/test_unit/test_unit_backtrace_test.rb +0 -0
- data/{examples → spec}/rr/test_unit/test_unit_integration_test.rb +4 -4
- data/spec/rr/times_called_matchers/any_times_matcher_spec.rb +47 -0
- data/spec/rr/times_called_matchers/at_least_matcher_spec.rb +55 -0
- data/spec/rr/times_called_matchers/at_most_matcher_spec.rb +70 -0
- data/spec/rr/times_called_matchers/integer_matcher_spec.rb +70 -0
- data/spec/rr/times_called_matchers/proc_matcher_spec.rb +55 -0
- data/spec/rr/times_called_matchers/range_matcher_spec.rb +76 -0
- data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +118 -0
- data/spec/rspec_spec_suite.rb +16 -0
- data/spec/spec_helper.rb +9 -0
- data/{examples/example_suite.rb → spec/spec_suite.rb} +3 -3
- data/{examples/test_unit_example_suite.rb → spec/test_unit_spec_suite.rb} +0 -0
- metadata +93 -93
- data/examples/core_example_suite.rb +0 -31
- data/examples/example_helper.rb +0 -9
- data/examples/rr/double/double_bind_example.rb +0 -70
- data/examples/rr/double/double_dispatching_example.rb +0 -236
- data/examples/rr/double/double_example.rb +0 -66
- data/examples/rr/double/double_has_original_method_example.rb +0 -56
- data/examples/rr/double/double_register_scenario_example.rb +0 -24
- data/examples/rr/double/double_reset_example.rb +0 -89
- data/examples/rr/double/double_verify_example.rb +0 -23
- data/examples/rr/errors/rr_error_example.rb +0 -65
- data/examples/rr/expectations/any_argument_expectation_example.rb +0 -52
- data/examples/rr/expectations/anything_argument_equality_expectation_example.rb +0 -38
- data/examples/rr/expectations/argument_equality_expectation_example.rb +0 -62
- data/examples/rr/expectations/boolean_argument_equality_expectation_example.rb +0 -48
- data/examples/rr/expectations/duck_type_argument_equality_expectation_example.rb +0 -67
- data/examples/rr/expectations/is_a_argument_equality_expectation_example.rb +0 -50
- data/examples/rr/expectations/numeric_argument_equality_expectation_example.rb +0 -46
- data/examples/rr/expectations/range_argument_equality_expectation_example.rb +0 -59
- data/examples/rr/expectations/regexp_argument_equality_expectation_example.rb +0 -67
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_any_times_example.rb +0 -50
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_least_example.rb +0 -73
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_most_example.rb +0 -77
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_example.rb +0 -42
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +0 -20
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_integer_example.rb +0 -111
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_proc_example.rb +0 -88
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_range_example.rb +0 -90
- data/examples/rr/extensions/instance_methods_argument_matcher_example.rb +0 -65
- data/examples/rr/extensions/instance_methods_creator_example.rb +0 -363
- data/examples/rr/extensions/instance_methods_example_helper.rb +0 -11
- data/examples/rr/extensions/instance_methods_space_example.rb +0 -122
- data/examples/rr/rspec/rspec_adapter_example.rb +0 -63
- data/examples/rr/rspec/rspec_backtrace_tweaking_example.rb +0 -36
- data/examples/rr/rspec/rspec_usage_example.rb +0 -65
- data/examples/rr/scenario_creator_example.rb +0 -459
- data/examples/rr/scenario_example.rb +0 -701
- data/examples/rr/scenario_method_proxy_example.rb +0 -71
- data/examples/rr/space/hash_with_object_id_key_example.rb +0 -86
- data/examples/rr/space/space_create_example.rb +0 -278
- data/examples/rr/space/space_example.rb +0 -29
- data/examples/rr/space/space_helper.rb +0 -7
- data/examples/rr/space/space_register_example.rb +0 -32
- data/examples/rr/space/space_reset_example.rb +0 -120
- data/examples/rr/space/space_verify_example.rb +0 -169
- data/examples/rr/times_called_matchers/any_times_matcher_example.rb +0 -63
- data/examples/rr/times_called_matchers/at_least_matcher_example.rb +0 -70
- data/examples/rr/times_called_matchers/at_most_matcher_example.rb +0 -85
- data/examples/rr/times_called_matchers/integer_matcher_example.rb +0 -91
- data/examples/rr/times_called_matchers/proc_matcher_example.rb +0 -77
- data/examples/rr/times_called_matchers/range_matcher_example.rb +0 -97
- data/examples/rr/times_called_matchers/times_called_matcher_example.rb +0 -53
- data/examples/rspec_example_suite.rb +0 -25
- data/lib/rr/extensions/instance_methods.rb +0 -228
- data/lib/rr/scenario.rb +0 -337
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec/spec_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
describe Space, "#register_ordered_scenario" do
|
5
|
+
it_should_behave_like "RR::Space"
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@space = Space.new
|
9
|
+
@original_space = Space.instance
|
10
|
+
Space.instance = @space
|
11
|
+
@object = Object.new
|
12
|
+
@method_name = :foobar
|
13
|
+
@double_insertion = @space.double_insertion(@object, @method_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:each) do
|
17
|
+
Space.instance = @original_space
|
18
|
+
end
|
19
|
+
|
20
|
+
it "adds the ordered scenario to the ordered_scenarios collection" do
|
21
|
+
scenario1 = @space.scenario(@double_insertion)
|
22
|
+
|
23
|
+
@space.ordered_scenarios.should == []
|
24
|
+
@space.register_ordered_scenario scenario1
|
25
|
+
@space.ordered_scenarios.should == [scenario1]
|
26
|
+
|
27
|
+
scenario2 = @space.scenario(@double_insertion)
|
28
|
+
@space.register_ordered_scenario scenario2
|
29
|
+
@space.ordered_scenarios.should == [scenario1, scenario2]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require "spec/spec_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
describe Space do
|
5
|
+
it_should_behave_like "RR::Space"
|
6
|
+
describe "#reset" do
|
7
|
+
before do
|
8
|
+
@space = Space.new
|
9
|
+
@object1 = Object.new
|
10
|
+
@object2 = Object.new
|
11
|
+
@method_name = :foobar
|
12
|
+
end
|
13
|
+
|
14
|
+
it "removes the ordered scenarios" do
|
15
|
+
double1 = @space.double_insertion(@object1, :foobar1)
|
16
|
+
double2 = @space.double_insertion(@object1, :foobar2)
|
17
|
+
|
18
|
+
scenario1 = @space.scenario(double1)
|
19
|
+
scenario2 = @space.scenario(double2)
|
20
|
+
|
21
|
+
scenario1.ordered
|
22
|
+
scenario2.ordered
|
23
|
+
|
24
|
+
@space.ordered_scenarios.should_not be_empty
|
25
|
+
|
26
|
+
@space.reset
|
27
|
+
@space.ordered_scenarios.should be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it "resets all double_insertions" do
|
31
|
+
double1 = @space.double_insertion(@object1, @method_name)
|
32
|
+
double1_reset_calls = 0
|
33
|
+
(
|
34
|
+
class << double1;
|
35
|
+
self;
|
36
|
+
end).class_eval do
|
37
|
+
define_method(:reset) do ||
|
38
|
+
double1_reset_calls += 1
|
39
|
+
end
|
40
|
+
end
|
41
|
+
double2 = @space.double_insertion(@object2, @method_name)
|
42
|
+
double2_reset_calls = 0
|
43
|
+
(
|
44
|
+
class << double2;
|
45
|
+
self;
|
46
|
+
end).class_eval do
|
47
|
+
define_method(:reset) do ||
|
48
|
+
double2_reset_calls += 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@space.reset
|
53
|
+
double1_reset_calls.should == 1
|
54
|
+
double2_reset_calls.should == 1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#reset_double" do
|
59
|
+
before do
|
60
|
+
@space = Space.new
|
61
|
+
@object = Object.new
|
62
|
+
@method_name = :foobar
|
63
|
+
end
|
64
|
+
|
65
|
+
it "resets the double_insertions" do
|
66
|
+
double_insertion = @space.double_insertion(@object, @method_name)
|
67
|
+
@space.double_insertions[@object][@method_name].should === double_insertion
|
68
|
+
@object.methods.should include("__rr__#{@method_name}")
|
69
|
+
|
70
|
+
@space.reset_double(@object, @method_name)
|
71
|
+
@space.double_insertions[@object][@method_name].should be_nil
|
72
|
+
@object.methods.should_not include("__rr__#{@method_name}")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "removes the object from the double_insertions map when it has no double_insertions" do
|
76
|
+
double1 = @space.double_insertion(@object, :foobar1)
|
77
|
+
double2 = @space.double_insertion(@object, :foobar2)
|
78
|
+
|
79
|
+
@space.double_insertions.include?(@object).should == true
|
80
|
+
@space.double_insertions[@object][:foobar1].should_not be_nil
|
81
|
+
@space.double_insertions[@object][:foobar2].should_not be_nil
|
82
|
+
|
83
|
+
@space.reset_double(@object, :foobar1)
|
84
|
+
@space.double_insertions.include?(@object).should == true
|
85
|
+
@space.double_insertions[@object][:foobar1].should be_nil
|
86
|
+
@space.double_insertions[@object][:foobar2].should_not be_nil
|
87
|
+
|
88
|
+
@space.reset_double(@object, :foobar2)
|
89
|
+
@space.double_insertions.include?(@object).should == false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#reset_double_insertions" do
|
94
|
+
it_should_behave_like "RR::Space"
|
95
|
+
|
96
|
+
before do
|
97
|
+
@space = Space.new
|
98
|
+
@object1 = Object.new
|
99
|
+
@object2 = Object.new
|
100
|
+
@method_name = :foobar
|
101
|
+
end
|
102
|
+
|
103
|
+
it "resets the double_insertion and removes it from the double_insertions list" do
|
104
|
+
double1 = @space.double_insertion(@object1, @method_name)
|
105
|
+
double1_reset_calls = 0
|
106
|
+
(
|
107
|
+
class << double1;
|
108
|
+
self;
|
109
|
+
end).class_eval do
|
110
|
+
define_method(:reset) do ||
|
111
|
+
double1_reset_calls += 1
|
112
|
+
end
|
113
|
+
end
|
114
|
+
double2 = @space.double_insertion(@object2, @method_name)
|
115
|
+
double2_reset_calls = 0
|
116
|
+
(
|
117
|
+
class << double2;
|
118
|
+
self;
|
119
|
+
end).class_eval do
|
120
|
+
define_method(:reset) do ||
|
121
|
+
double2_reset_calls += 1
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
@space.send(:reset_double_insertions)
|
126
|
+
double1_reset_calls.should == 1
|
127
|
+
double2_reset_calls.should == 1
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec/spec_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
describe Space, " class" do
|
5
|
+
it_should_behave_like "RR::Space"
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@original_space = Space.instance
|
9
|
+
@space = Space.new
|
10
|
+
Space.instance = @space
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
Space.instance = @original_space
|
15
|
+
end
|
16
|
+
|
17
|
+
it "proxies to a singleton instance of Space" do
|
18
|
+
create_double_args = nil
|
19
|
+
(
|
20
|
+
class << @space;
|
21
|
+
self;
|
22
|
+
end).class_eval do
|
23
|
+
define_method :double_insertion do |*args|
|
24
|
+
create_double_args = args
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Space.double_insertion(:foo, :bar)
|
29
|
+
create_double_args.should == [:foo, :bar]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
require "spec/spec_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
describe Space, "#verify_ordered_scenario", :shared => true do
|
5
|
+
before do
|
6
|
+
@space = Space.new
|
7
|
+
@object = Object.new
|
8
|
+
@method_name = :foobar
|
9
|
+
@double_insertion = @space.double_insertion(@object, @method_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "raises an error when Double is NonTerminal" do
|
13
|
+
scenario = @space.scenario(@double_insertion)
|
14
|
+
@space.register_ordered_scenario(scenario)
|
15
|
+
|
16
|
+
scenario.any_number_of_times
|
17
|
+
scenario.should_not be_terminal
|
18
|
+
|
19
|
+
proc do
|
20
|
+
@space.verify_ordered_scenario(scenario)
|
21
|
+
end.should raise_error(
|
22
|
+
Errors::DoubleOrderError,
|
23
|
+
"Ordered Doubles cannot have a NonTerminal TimesCalledExpectation"
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe Space do
|
29
|
+
it_should_behave_like "RR::Space"
|
30
|
+
|
31
|
+
describe "#verify_double_insertions" do
|
32
|
+
before do
|
33
|
+
@space = Space.new
|
34
|
+
@object1 = Object.new
|
35
|
+
@object2 = Object.new
|
36
|
+
@method_name = :foobar
|
37
|
+
end
|
38
|
+
|
39
|
+
it "verifies and deletes the double_insertions" do
|
40
|
+
double1 = @space.double_insertion(@object1, @method_name)
|
41
|
+
double1_verify_calls = 0
|
42
|
+
double1_reset_calls = 0
|
43
|
+
(
|
44
|
+
class << double1;
|
45
|
+
self;
|
46
|
+
end).class_eval do
|
47
|
+
define_method(:verify) do ||
|
48
|
+
double1_verify_calls += 1
|
49
|
+
end
|
50
|
+
define_method(:reset) do ||
|
51
|
+
double1_reset_calls += 1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
double2 = @space.double_insertion(@object2, @method_name)
|
55
|
+
double2_verify_calls = 0
|
56
|
+
double2_reset_calls = 0
|
57
|
+
(
|
58
|
+
class << double2;
|
59
|
+
self;
|
60
|
+
end).class_eval do
|
61
|
+
define_method(:verify) do ||
|
62
|
+
double2_verify_calls += 1
|
63
|
+
end
|
64
|
+
define_method(:reset) do ||
|
65
|
+
double2_reset_calls += 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
@space.verify_double_insertions
|
70
|
+
double1_verify_calls.should == 1
|
71
|
+
double2_verify_calls.should == 1
|
72
|
+
double1_reset_calls.should == 1
|
73
|
+
double1_reset_calls.should == 1
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#verify_double" do
|
78
|
+
it_should_behave_like "RR::Space"
|
79
|
+
|
80
|
+
before do
|
81
|
+
@space = Space.new
|
82
|
+
@object = Object.new
|
83
|
+
@method_name = :foobar
|
84
|
+
end
|
85
|
+
|
86
|
+
it "verifies and deletes the double_insertion" do
|
87
|
+
double_insertion = @space.double_insertion(@object, @method_name)
|
88
|
+
@space.double_insertions[@object][@method_name].should === double_insertion
|
89
|
+
@object.methods.should include("__rr__#{@method_name}")
|
90
|
+
|
91
|
+
verify_calls = 0
|
92
|
+
(
|
93
|
+
class << double_insertion;
|
94
|
+
self;
|
95
|
+
end).class_eval do
|
96
|
+
define_method(:verify) do ||
|
97
|
+
verify_calls += 1
|
98
|
+
end
|
99
|
+
end
|
100
|
+
@space.verify_double(@object, @method_name)
|
101
|
+
verify_calls.should == 1
|
102
|
+
|
103
|
+
@space.double_insertions[@object][@method_name].should be_nil
|
104
|
+
@object.methods.should_not include("__rr__#{@method_name}")
|
105
|
+
end
|
106
|
+
|
107
|
+
it "deletes the double_insertion when verifying the double_insertion raises an error" do
|
108
|
+
double_insertion = @space.double_insertion(@object, @method_name)
|
109
|
+
@space.double_insertions[@object][@method_name].should === double_insertion
|
110
|
+
@object.methods.should include("__rr__#{@method_name}")
|
111
|
+
|
112
|
+
verify_called = true
|
113
|
+
(
|
114
|
+
class << double_insertion;
|
115
|
+
self;
|
116
|
+
end).class_eval do
|
117
|
+
define_method(:verify) do ||
|
118
|
+
verify_called = true
|
119
|
+
raise "An Error"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
proc {@space.verify_double(@object, @method_name)}.should raise_error
|
123
|
+
verify_called.should be_true
|
124
|
+
|
125
|
+
@space.double_insertions[@object][@method_name].should be_nil
|
126
|
+
@object.methods.should_not include("__rr__#{@method_name}")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "#verify_ordered_scenario where the passed in scenario is at the front of the queue" do
|
131
|
+
it_should_behave_like "RR::Space#verify_ordered_scenario"
|
132
|
+
|
133
|
+
it "keeps the scenario when times called is not verified" do
|
134
|
+
scenario = @space.scenario(@double_insertion)
|
135
|
+
@space.register_ordered_scenario(scenario)
|
136
|
+
|
137
|
+
scenario.twice
|
138
|
+
scenario.should be_attempt
|
139
|
+
|
140
|
+
@space.verify_ordered_scenario(scenario)
|
141
|
+
@space.ordered_scenarios.should include(scenario)
|
142
|
+
end
|
143
|
+
|
144
|
+
it "removes the scenario when times called expectation should no longer be attempted" do
|
145
|
+
scenario = @space.scenario(@double_insertion)
|
146
|
+
@space.register_ordered_scenario(scenario)
|
147
|
+
|
148
|
+
scenario.with(1).once
|
149
|
+
@object.foobar(1)
|
150
|
+
scenario.should_not be_attempt
|
151
|
+
|
152
|
+
@space.verify_ordered_scenario(scenario)
|
153
|
+
@space.ordered_scenarios.should_not include(scenario)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
describe "#verify_ordered_scenario where the passed in scenario is not at the front of the queue" do
|
158
|
+
it_should_behave_like "RR::Space#verify_ordered_scenario"
|
159
|
+
|
160
|
+
it "raises error" do
|
161
|
+
first_scenario = scenario
|
162
|
+
second_scenario = scenario
|
163
|
+
|
164
|
+
proc do
|
165
|
+
@space.verify_ordered_scenario(second_scenario)
|
166
|
+
end.should raise_error(
|
167
|
+
Errors::DoubleOrderError,
|
168
|
+
"foobar() called out of order in list\n" <<
|
169
|
+
"- foobar()\n" <<
|
170
|
+
"- foobar()"
|
171
|
+
)
|
172
|
+
end
|
173
|
+
|
174
|
+
def scenario
|
175
|
+
scenario_definition = @space.scenario(@double_insertion).once
|
176
|
+
@space.register_ordered_scenario(scenario_definition.scenario)
|
177
|
+
scenario_definition.scenario
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
File without changes
|
@@ -21,21 +21,21 @@ class TestUnitIntegrationTest < Test::Unit::TestCase
|
|
21
21
|
assert_equal :baz, @subject.foobar("any", "thing")
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def test_using_a_mock_proxy
|
25
25
|
def @subject.foobar
|
26
26
|
:baz
|
27
27
|
end
|
28
28
|
|
29
|
-
mock.
|
29
|
+
mock.proxy(@subject).foobar
|
30
30
|
assert_equal :baz, @subject.foobar
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def test_using_a_stub_proxy
|
34
34
|
def @subject.foobar
|
35
35
|
:baz
|
36
36
|
end
|
37
37
|
|
38
|
-
stub.
|
38
|
+
stub.proxy(@subject).foobar
|
39
39
|
assert_equal :baz, @subject.foobar
|
40
40
|
end
|
41
41
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "spec/spec_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module TimesCalledMatchers
|
5
|
+
describe AnyTimesMatcher do
|
6
|
+
attr_reader :matcher
|
7
|
+
before do
|
8
|
+
@matcher = AnyTimesMatcher.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe AnyTimesMatcher, "#possible_match?" do
|
12
|
+
it "always returns true" do
|
13
|
+
matcher.should be_possible_match(0)
|
14
|
+
matcher.should be_possible_match(99999)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe AnyTimesMatcher, "#matches?" do
|
19
|
+
it "always returns true" do
|
20
|
+
matcher.should be_matches(0)
|
21
|
+
matcher.should be_matches(99999)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe AnyTimesMatcher, "#attempt?" do
|
26
|
+
it "always returns true" do
|
27
|
+
matcher.should be_attempt(0)
|
28
|
+
matcher.should be_attempt(99999)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe AnyTimesMatcher, "#terminal?" do
|
33
|
+
it "returns false" do
|
34
|
+
matcher.should_not be_terminal
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe AnyTimesMatcher, "#error_message" do
|
39
|
+
it "has an error message" do
|
40
|
+
matcher.error_message(2).should == (
|
41
|
+
"Called 2 times.\nExpected any number of times."
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|