rr 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/Rakefile +1 -1
- data/examples/environment_fixture_setup.rb +1 -1
- data/examples/example_helper.rb +1 -0
- data/examples/high_level_example.rb +1 -2
- data/examples/rr/do_not_allow_creator_example.rb +1 -2
- data/examples/rr/double_bind_example.rb +1 -2
- data/examples/rr/double_dispatching_example.rb +2 -3
- data/examples/rr/double_example.rb +1 -2
- data/examples/rr/double_register_scenario_example.rb +1 -2
- data/examples/rr/double_reset_example.rb +1 -2
- data/examples/rr/double_verify_example.rb +1 -2
- data/examples/rr/errors/rr_error_example.rb +1 -2
- data/examples/rr/expectations/any_argument_expectation_example.rb +1 -2
- data/examples/rr/expectations/anything_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/boolean_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/duck_type_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/is_a_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/numeric_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/range_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/regexp_argument_equality_expectation_example.rb +1 -2
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_least_example.rb +74 -0
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_most_example.rb +69 -0
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +18 -0
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_integer_example.rb +102 -0
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_proc_example.rb +80 -0
- data/examples/rr/expectations/times_called_expectation/times_called_expectation_range_example.rb +81 -0
- data/examples/rr/expectations/times_called_expectation_example.rb +1 -185
- data/examples/rr/extensions/double_methods_example.rb +3 -4
- data/examples/rr/mock_creator_example.rb +1 -2
- data/examples/rr/probe_creator_example.rb +1 -2
- data/examples/rr/rspec/rspec_adapter_example.rb +1 -2
- data/examples/rr/rspec/rspec_backtrace_tweaking_example.rb +1 -2
- data/examples/rr/rspec/rspec_usage_example.rb +1 -2
- data/examples/rr/scenario_example.rb +60 -15
- data/examples/rr/space_create_example.rb +1 -2
- data/examples/rr/space_example.rb +1 -2
- data/examples/rr/space_register_example.rb +1 -2
- data/examples/rr/space_reset_example.rb +51 -4
- data/examples/rr/space_verify_example.rb +4 -5
- data/examples/rr/stub_creator_example.rb +1 -2
- data/examples/rr/test_unit/test_helper.rb +1 -1
- data/examples/rr/times_called_matchers/at_least_matcher_example.rb +74 -0
- data/examples/rr/times_called_matchers/at_most_matcher_example.rb +82 -0
- data/examples/rr/times_called_matchers/integer_matcher_example.rb +88 -0
- data/examples/rr/times_called_matchers/proc_matcher_example.rb +74 -0
- data/examples/rr/times_called_matchers/range_matcher_example.rb +94 -0
- data/examples/rr/times_called_matchers/times_called_matcher_example.rb +53 -0
- data/lib/rr.rb +15 -7
- data/lib/rr/adapters/rspec.rb +2 -2
- data/lib/rr/adapters/test_unit.rb +1 -1
- data/lib/rr/double.rb +2 -2
- data/lib/rr/expectations/times_called_expectation.rb +14 -13
- data/lib/rr/extensions/double_methods.rb +5 -5
- data/lib/rr/scenario.rb +35 -7
- data/lib/rr/space.rb +20 -8
- data/lib/rr/times_called_matchers/at_least_matcher.rb +22 -0
- data/lib/rr/times_called_matchers/at_most_matcher.rb +22 -0
- data/lib/rr/times_called_matchers/integer_matcher.rb +17 -0
- data/lib/rr/times_called_matchers/proc_matcher.rb +17 -0
- data/lib/rr/times_called_matchers/range_matcher.rb +19 -0
- data/lib/rr/times_called_matchers/times_called_matcher.rb +44 -0
- data/lib/rr/wildcard_matchers/anything.rb +13 -0
- data/lib/rr/wildcard_matchers/boolean.rb +18 -0
- data/lib/rr/wildcard_matchers/duck_type.rb +24 -0
- data/lib/rr/wildcard_matchers/is_a.rb +20 -0
- data/lib/rr/wildcard_matchers/numeric.rb +9 -0
- data/lib/rr/{expectations/wildcard_matchers → wildcard_matchers}/range.rb +0 -0
- data/lib/rr/{expectations/wildcard_matchers → wildcard_matchers}/regexp.rb +0 -0
- metadata +27 -9
- data/lib/rr/expectations/wildcard_matchers/anything.rb +0 -15
- data/lib/rr/expectations/wildcard_matchers/boolean.rb +0 -20
- data/lib/rr/expectations/wildcard_matchers/duck_type.rb +0 -26
- data/lib/rr/expectations/wildcard_matchers/is_a.rb +0 -22
- data/lib/rr/expectations/wildcard_matchers/numeric.rb +0 -11
@@ -1,7 +1,54 @@
|
|
1
|
-
|
2
|
-
require "#{dir}/../example_helper"
|
1
|
+
require "examples/example_helper"
|
3
2
|
|
4
3
|
module RR
|
4
|
+
describe Space, "#reset" do
|
5
|
+
it_should_behave_like "RR::Space"
|
6
|
+
|
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.create_double(@object1, :foobar1)
|
16
|
+
double2 = @space.create_double(@object1, :foobar2)
|
17
|
+
|
18
|
+
scenario1 = @space.create_scenario(double1)
|
19
|
+
scenario2 = @space.create_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 doubles" do
|
31
|
+
double1 = @space.create_double(@object1, @method_name)
|
32
|
+
double1_reset_calls = 0
|
33
|
+
(class << double1; self; end).class_eval do
|
34
|
+
define_method(:reset) do ||
|
35
|
+
double1_reset_calls += 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
double2 = @space.create_double(@object2, @method_name)
|
39
|
+
double2_reset_calls = 0
|
40
|
+
(class << double2; self; end).class_eval do
|
41
|
+
define_method(:reset) do ||
|
42
|
+
double2_reset_calls += 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
@space.reset
|
47
|
+
double1_reset_calls.should == 1
|
48
|
+
double2_reset_calls.should == 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
5
52
|
describe Space, "#reset_double" do
|
6
53
|
it_should_behave_like "RR::Space"
|
7
54
|
|
@@ -65,9 +112,9 @@ describe Space, "#reset_doubles" do
|
|
65
112
|
end
|
66
113
|
end
|
67
114
|
|
68
|
-
@space.reset_doubles
|
69
|
-
double1_reset_calls.should == 1
|
115
|
+
@space.send(:reset_doubles)
|
70
116
|
double1_reset_calls.should == 1
|
117
|
+
double2_reset_calls.should == 1
|
71
118
|
end
|
72
119
|
end
|
73
120
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require "#{dir}/../example_helper"
|
1
|
+
require "examples/example_helper"
|
3
2
|
|
4
3
|
module RR
|
5
4
|
describe Space, "#verify_doubles" do
|
@@ -110,19 +109,19 @@ describe Space, "#verify_ordered_scenario where the passed in scenario is at the
|
|
110
109
|
@space.register_ordered_scenario(scenario)
|
111
110
|
|
112
111
|
scenario.twice
|
113
|
-
scenario.
|
112
|
+
scenario.should be_attempt
|
114
113
|
|
115
114
|
@space.verify_ordered_scenario(scenario)
|
116
115
|
@space.ordered_scenarios.should include(scenario)
|
117
116
|
end
|
118
117
|
|
119
|
-
it "removes the scenario when times called
|
118
|
+
it "removes the scenario when times called expectation should no longer be attempted" do
|
120
119
|
scenario = @space.create_scenario(@double)
|
121
120
|
@space.register_ordered_scenario(scenario)
|
122
121
|
|
123
122
|
scenario.with(1).once
|
124
123
|
@object.foobar(1)
|
125
|
-
scenario.
|
124
|
+
scenario.should_not be_attempt
|
126
125
|
|
127
126
|
@space.verify_ordered_scenario(scenario)
|
128
127
|
@space.ordered_scenarios.should_not include(scenario)
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "examples/example_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module TimesCalledMatchers
|
5
|
+
describe TimesCalledMatcher, ".create when passed a AtLeastMatcher" do
|
6
|
+
it "returns the passed in argument" do
|
7
|
+
matcher = AtLeastMatcher.new(5)
|
8
|
+
TimesCalledMatcher.create(matcher).should === matcher
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe AtLeastMatcher, "#possible_match?" do
|
13
|
+
before do
|
14
|
+
@times = 3
|
15
|
+
@matcher = AtLeastMatcher.new(@times)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "always returns true" do
|
19
|
+
@matcher.should be_possible_match(99999)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe AtLeastMatcher, "#matches?" do
|
24
|
+
before do
|
25
|
+
@times = 3
|
26
|
+
@matcher = AtLeastMatcher.new(@times)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns false when times_called less than times" do
|
30
|
+
@matcher.should_not be_matches(2)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns true when times_called == times" do
|
34
|
+
@matcher.should be_matches(3)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns true when times_called > times" do
|
38
|
+
@matcher.should be_matches(4)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe AtLeastMatcher, "#attempt?" do
|
43
|
+
before do
|
44
|
+
@times = 3
|
45
|
+
@matcher = AtLeastMatcher.new(@times)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns true when less than expected times" do
|
49
|
+
@matcher.should be_attempt(2)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns false when == expected times" do
|
53
|
+
@matcher.should_not be_attempt(3)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "returns false when > expected times" do
|
57
|
+
@matcher.should_not be_attempt(4)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe AtLeastMatcher, "#error_message" do
|
62
|
+
before do
|
63
|
+
@times = 3
|
64
|
+
@matcher = AtLeastMatcher.new(@times)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "has an error message" do
|
68
|
+
@matcher.error_message(2).should == (
|
69
|
+
"Called 2 times. Expected at least 3 times."
|
70
|
+
)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require "examples/example_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module TimesCalledMatchers
|
5
|
+
describe TimesCalledMatcher, ".create when passed a AtMostMatcher" do
|
6
|
+
it "returns the passed in argument" do
|
7
|
+
matcher = AtMostMatcher.new(5)
|
8
|
+
TimesCalledMatcher.create(matcher).should === matcher
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe AtMostMatcher, "#possible_match?" do
|
13
|
+
before do
|
14
|
+
@times = 3
|
15
|
+
@matcher = AtMostMatcher.new(@times)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns true when times called < times" do
|
19
|
+
@matcher.should be_possible_match(2)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns true when times called == times" do
|
23
|
+
@matcher.should be_possible_match(3)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns false when times called > times" do
|
27
|
+
@matcher.should_not be_possible_match(4)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe AtMostMatcher, "#matches?" do
|
32
|
+
before do
|
33
|
+
@times = 3
|
34
|
+
@matcher = AtMostMatcher.new(@times)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns true when times_called less than times" do
|
38
|
+
@matcher.should be_matches(2)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns true when times_called == times" do
|
42
|
+
@matcher.should be_matches(3)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns false when times_called > times" do
|
46
|
+
@matcher.should_not be_matches(4)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe AtMostMatcher, "#attempt?" do
|
51
|
+
before do
|
52
|
+
@times = 3
|
53
|
+
@matcher = AtMostMatcher.new(@times)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "returns true when less than expected times" do
|
57
|
+
@matcher.should be_attempt(2)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns false when == expected times" do
|
61
|
+
@matcher.should_not be_attempt(3)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns false when > expected times" do
|
65
|
+
@matcher.should_not be_attempt(4)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe AtMostMatcher, "#error_message" do
|
70
|
+
before do
|
71
|
+
@times = 3
|
72
|
+
@matcher = AtMostMatcher.new(@times)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "has an error message" do
|
76
|
+
@matcher.error_message(5).should == (
|
77
|
+
"Called 5 times. Expected at most 3 times."
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require "examples/example_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module TimesCalledMatchers
|
5
|
+
describe TimesCalledMatcher, ".create when passed a IntegerMatcher" do
|
6
|
+
it "returns the passed in argument" do
|
7
|
+
matcher = IntegerMatcher.new(5)
|
8
|
+
TimesCalledMatcher.create(matcher).should === matcher
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe TimesCalledMatcher, ".create when passed a Integer" do
|
13
|
+
it "returns IntegerMatcher" do
|
14
|
+
TimesCalledMatcher.create(5).should == IntegerMatcher.new(5)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe IntegerMatcher, "#possible_match?" do
|
19
|
+
before do
|
20
|
+
@times = 3
|
21
|
+
@matcher = IntegerMatcher.new(@times)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns true when times called < times" do
|
25
|
+
@matcher.should be_possible_match(2)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns true when times called == times" do
|
29
|
+
@matcher.should be_possible_match(3)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns false when times called > times" do
|
33
|
+
@matcher.should_not be_possible_match(4)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe IntegerMatcher, "#matches?" do
|
38
|
+
before do
|
39
|
+
@times = 3
|
40
|
+
@matcher = IntegerMatcher.new(@times)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns false when times_called less than times" do
|
44
|
+
@matcher.should_not be_matches(2)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns true when times_called == times" do
|
48
|
+
@matcher.should be_matches(3)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns false when times_called > times" do
|
52
|
+
@matcher.should_not be_matches(4)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe IntegerMatcher, "#attempt?" do
|
57
|
+
before do
|
58
|
+
@times = 3
|
59
|
+
@matcher = IntegerMatcher.new(@times)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns true when less than expected times" do
|
63
|
+
@matcher.should be_attempt(2)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "returns false when == expected times" do
|
67
|
+
@matcher.should_not be_attempt(3)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns false when > expected times" do
|
71
|
+
@matcher.should_not be_attempt(4)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe IntegerMatcher, "#error_message" do
|
76
|
+
before do
|
77
|
+
@times = 3
|
78
|
+
@matcher = IntegerMatcher.new(@times)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "has an error message" do
|
82
|
+
@matcher.error_message(2).should == (
|
83
|
+
"Called 2 times. Expected 3 times."
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "examples/example_helper"
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module TimesCalledMatchers
|
5
|
+
describe TimesCalledMatcher, ".create when passed a ProcMatcher" do
|
6
|
+
it "returns the passed in argument" do
|
7
|
+
matcher = ProcMatcher.new(proc {|other| other == 5})
|
8
|
+
TimesCalledMatcher.create(matcher).should === matcher
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe TimesCalledMatcher, ".create when passed a Integer" do
|
13
|
+
it "returns ProcMatcher" do
|
14
|
+
value = proc {|other| other == 5}
|
15
|
+
TimesCalledMatcher.create(value).should == ProcMatcher.new(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ProcMatcher, "#possible_match?" do
|
20
|
+
before do
|
21
|
+
@times = proc {|other| other == 3}
|
22
|
+
@matcher = ProcMatcher.new(@times)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "always returns true" do
|
26
|
+
@matcher.should be_possible_match(2)
|
27
|
+
@matcher.should be_possible_match(3)
|
28
|
+
@matcher.should be_possible_match(10)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ProcMatcher, "#matches?" do
|
33
|
+
before do
|
34
|
+
@times = proc {|other| other == 3}
|
35
|
+
@matcher = ProcMatcher.new(@times)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns false when proc returns false" do
|
39
|
+
@times.call(2).should be_false
|
40
|
+
@matcher.should_not be_matches(2)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns true when proc returns true" do
|
44
|
+
@times.call(3).should be_true
|
45
|
+
@matcher.should be_matches(3)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe ProcMatcher, "#attempt?" do
|
50
|
+
before do
|
51
|
+
@times = proc {|other| other == 3}
|
52
|
+
@matcher = ProcMatcher.new(@times)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "always returns true" do
|
56
|
+
@matcher.should be_attempt(2)
|
57
|
+
@matcher.should be_attempt(3)
|
58
|
+
@matcher.should be_attempt(10)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ProcMatcher, "#error_message" do
|
63
|
+
before do
|
64
|
+
@times = proc {|other| other == 3}
|
65
|
+
@matcher = ProcMatcher.new(@times)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "has an error message" do
|
69
|
+
@matcher.error_message(1).should =~
|
70
|
+
/Called 1 time. Expected #<Proc.*> times./
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|