rr 0.1.6 → 0.1.7
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 +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
|