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.
Files changed (150) hide show
  1. data/CHANGES +8 -3
  2. data/README +130 -39
  3. data/Rakefile +6 -5
  4. data/lib/rr.rb +8 -8
  5. data/lib/rr/adapters/rr_methods.rb +228 -0
  6. data/lib/rr/adapters/rspec.rb +1 -1
  7. data/lib/rr/adapters/test_unit.rb +1 -1
  8. data/lib/rr/double.rb +294 -89
  9. data/lib/rr/{scenario_creator.rb → double_creator.rb} +65 -66
  10. data/lib/rr/{scenario_definition.rb → double_definition.rb} +36 -36
  11. data/lib/rr/{scenario_definition_builder.rb → double_definition_builder.rb} +3 -3
  12. data/lib/rr/double_insertion.rb +132 -0
  13. data/lib/rr/{scenario_matches.rb → double_matches.rb} +2 -2
  14. data/lib/rr/{scenario_method_proxy.rb → double_method_proxy.rb} +2 -2
  15. data/lib/rr/errors/argument_equality_error.rb +3 -3
  16. data/lib/rr/errors/rr_error.rb +13 -13
  17. data/lib/rr/errors/scenario_definition_error.rb +3 -3
  18. data/lib/rr/errors/scenario_not_found_error.rb +3 -3
  19. data/lib/rr/errors/scenario_order_error.rb +3 -3
  20. data/lib/rr/errors/times_called_error.rb +3 -3
  21. data/lib/rr/expectations/any_argument_expectation.rb +1 -1
  22. data/lib/rr/expectations/argument_equality_expectation.rb +1 -1
  23. data/lib/rr/expectations/times_called_expectation.rb +1 -1
  24. data/lib/rr/hash_with_object_id_key.rb +1 -1
  25. data/lib/rr/space.rb +40 -40
  26. data/lib/rr/times_called_matchers/any_times_matcher.rb +13 -13
  27. data/lib/rr/times_called_matchers/at_least_matcher.rb +11 -11
  28. data/lib/rr/times_called_matchers/at_most_matcher.rb +16 -16
  29. data/lib/rr/times_called_matchers/integer_matcher.rb +13 -13
  30. data/lib/rr/times_called_matchers/non_terminal.rb +21 -21
  31. data/lib/rr/times_called_matchers/proc_matcher.rb +7 -7
  32. data/lib/rr/times_called_matchers/range_matcher.rb +14 -14
  33. data/lib/rr/times_called_matchers/terminal.rb +16 -16
  34. data/lib/rr/times_called_matchers/times_called_matcher.rb +32 -32
  35. data/spec/core_spec_suite.rb +18 -0
  36. data/{examples → spec}/environment_fixture_setup.rb +0 -1
  37. data/{examples/high_level_example.rb → spec/high_level_spec.rb} +11 -11
  38. data/spec/rr/adapters/rr_methods_argument_matcher_spec.rb +67 -0
  39. data/spec/rr/adapters/rr_methods_creator_spec.rb +365 -0
  40. data/spec/rr/adapters/rr_methods_space_spec.rb +134 -0
  41. data/spec/rr/adapters/rr_methods_spec_helper.rb +11 -0
  42. data/{examples/rr/extensions/instance_methods_times_matcher_example.rb → spec/rr/adapters/rr_methods_times_matcher_spec.rb} +4 -4
  43. data/spec/rr/double/double_insertion_bind_spec.rb +78 -0
  44. data/spec/rr/double/double_insertion_dispatching_spec.rb +221 -0
  45. data/spec/rr/double/double_insertion_has_original_method_spec.rb +56 -0
  46. data/spec/rr/double/double_insertion_register_scenario_spec.rb +24 -0
  47. data/spec/rr/double/double_insertion_reset_spec.rb +89 -0
  48. data/spec/rr/double/double_insertion_spec.rb +66 -0
  49. data/spec/rr/double/double_insertion_verify_spec.rb +23 -0
  50. data/spec/rr/double_creator_spec.rb +454 -0
  51. data/{examples/rr/scenario_definition_example.rb → spec/rr/double_definition_spec.rb} +143 -143
  52. data/spec/rr/double_method_proxy_spec.rb +71 -0
  53. data/spec/rr/double_spec.rb +654 -0
  54. data/spec/rr/errors/rr_error_spec.rb +65 -0
  55. data/spec/rr/expectations/any_argument_expectation_spec.rb +47 -0
  56. data/spec/rr/expectations/anything_argument_equality_expectation_spec.rb +38 -0
  57. data/spec/rr/expectations/argument_equality_expectation_spec.rb +58 -0
  58. data/spec/rr/expectations/boolean_argument_equality_expectation_spec.rb +53 -0
  59. data/spec/rr/expectations/duck_type_argument_equality_expectation_spec.rb +71 -0
  60. data/spec/rr/expectations/is_a_argument_equality_expectation_spec.rb +51 -0
  61. data/spec/rr/expectations/numeric_argument_equality_expectation_spec.rb +47 -0
  62. data/spec/rr/expectations/range_argument_equality_expectation_spec.rb +59 -0
  63. data/spec/rr/expectations/regexp_argument_equality_expectation_spec.rb +72 -0
  64. data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +43 -0
  65. data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +67 -0
  66. data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +71 -0
  67. data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +21 -0
  68. data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +103 -0
  69. data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +79 -0
  70. data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +81 -0
  71. data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +40 -0
  72. data/spec/rr/rspec/rspec_adapter_spec.rb +65 -0
  73. data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +52 -0
  74. data/spec/rr/rspec/rspec_usage_spec.rb +67 -0
  75. data/spec/rr/space/hash_with_object_id_key_spec.rb +88 -0
  76. data/spec/rr/space/space_create_spec.rb +278 -0
  77. data/spec/rr/space/space_helper.rb +7 -0
  78. data/spec/rr/space/space_register_spec.rb +32 -0
  79. data/spec/rr/space/space_reset_spec.rb +131 -0
  80. data/spec/rr/space/space_spec.rb +32 -0
  81. data/spec/rr/space/space_verify_spec.rb +181 -0
  82. data/{examples → spec}/rr/test_unit/test_helper.rb +1 -1
  83. data/{examples → spec}/rr/test_unit/test_unit_backtrace_test.rb +0 -0
  84. data/{examples → spec}/rr/test_unit/test_unit_integration_test.rb +4 -4
  85. data/spec/rr/times_called_matchers/any_times_matcher_spec.rb +47 -0
  86. data/spec/rr/times_called_matchers/at_least_matcher_spec.rb +55 -0
  87. data/spec/rr/times_called_matchers/at_most_matcher_spec.rb +70 -0
  88. data/spec/rr/times_called_matchers/integer_matcher_spec.rb +70 -0
  89. data/spec/rr/times_called_matchers/proc_matcher_spec.rb +55 -0
  90. data/spec/rr/times_called_matchers/range_matcher_spec.rb +76 -0
  91. data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +118 -0
  92. data/spec/rspec_spec_suite.rb +16 -0
  93. data/spec/spec_helper.rb +9 -0
  94. data/{examples/example_suite.rb → spec/spec_suite.rb} +3 -3
  95. data/{examples/test_unit_example_suite.rb → spec/test_unit_spec_suite.rb} +0 -0
  96. metadata +93 -93
  97. data/examples/core_example_suite.rb +0 -31
  98. data/examples/example_helper.rb +0 -9
  99. data/examples/rr/double/double_bind_example.rb +0 -70
  100. data/examples/rr/double/double_dispatching_example.rb +0 -236
  101. data/examples/rr/double/double_example.rb +0 -66
  102. data/examples/rr/double/double_has_original_method_example.rb +0 -56
  103. data/examples/rr/double/double_register_scenario_example.rb +0 -24
  104. data/examples/rr/double/double_reset_example.rb +0 -89
  105. data/examples/rr/double/double_verify_example.rb +0 -23
  106. data/examples/rr/errors/rr_error_example.rb +0 -65
  107. data/examples/rr/expectations/any_argument_expectation_example.rb +0 -52
  108. data/examples/rr/expectations/anything_argument_equality_expectation_example.rb +0 -38
  109. data/examples/rr/expectations/argument_equality_expectation_example.rb +0 -62
  110. data/examples/rr/expectations/boolean_argument_equality_expectation_example.rb +0 -48
  111. data/examples/rr/expectations/duck_type_argument_equality_expectation_example.rb +0 -67
  112. data/examples/rr/expectations/is_a_argument_equality_expectation_example.rb +0 -50
  113. data/examples/rr/expectations/numeric_argument_equality_expectation_example.rb +0 -46
  114. data/examples/rr/expectations/range_argument_equality_expectation_example.rb +0 -59
  115. data/examples/rr/expectations/regexp_argument_equality_expectation_example.rb +0 -67
  116. data/examples/rr/expectations/times_called_expectation/times_called_expectation_any_times_example.rb +0 -50
  117. data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_least_example.rb +0 -73
  118. data/examples/rr/expectations/times_called_expectation/times_called_expectation_at_most_example.rb +0 -77
  119. data/examples/rr/expectations/times_called_expectation/times_called_expectation_example.rb +0 -42
  120. data/examples/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +0 -20
  121. data/examples/rr/expectations/times_called_expectation/times_called_expectation_integer_example.rb +0 -111
  122. data/examples/rr/expectations/times_called_expectation/times_called_expectation_proc_example.rb +0 -88
  123. data/examples/rr/expectations/times_called_expectation/times_called_expectation_range_example.rb +0 -90
  124. data/examples/rr/extensions/instance_methods_argument_matcher_example.rb +0 -65
  125. data/examples/rr/extensions/instance_methods_creator_example.rb +0 -363
  126. data/examples/rr/extensions/instance_methods_example_helper.rb +0 -11
  127. data/examples/rr/extensions/instance_methods_space_example.rb +0 -122
  128. data/examples/rr/rspec/rspec_adapter_example.rb +0 -63
  129. data/examples/rr/rspec/rspec_backtrace_tweaking_example.rb +0 -36
  130. data/examples/rr/rspec/rspec_usage_example.rb +0 -65
  131. data/examples/rr/scenario_creator_example.rb +0 -459
  132. data/examples/rr/scenario_example.rb +0 -701
  133. data/examples/rr/scenario_method_proxy_example.rb +0 -71
  134. data/examples/rr/space/hash_with_object_id_key_example.rb +0 -86
  135. data/examples/rr/space/space_create_example.rb +0 -278
  136. data/examples/rr/space/space_example.rb +0 -29
  137. data/examples/rr/space/space_helper.rb +0 -7
  138. data/examples/rr/space/space_register_example.rb +0 -32
  139. data/examples/rr/space/space_reset_example.rb +0 -120
  140. data/examples/rr/space/space_verify_example.rb +0 -169
  141. data/examples/rr/times_called_matchers/any_times_matcher_example.rb +0 -63
  142. data/examples/rr/times_called_matchers/at_least_matcher_example.rb +0 -70
  143. data/examples/rr/times_called_matchers/at_most_matcher_example.rb +0 -85
  144. data/examples/rr/times_called_matchers/integer_matcher_example.rb +0 -91
  145. data/examples/rr/times_called_matchers/proc_matcher_example.rb +0 -77
  146. data/examples/rr/times_called_matchers/range_matcher_example.rb +0 -97
  147. data/examples/rr/times_called_matchers/times_called_matcher_example.rb +0 -53
  148. data/examples/rspec_example_suite.rb +0 -25
  149. data/lib/rr/extensions/instance_methods.rb +0 -228
  150. data/lib/rr/scenario.rb +0 -337
@@ -1,85 +0,0 @@
1
- require "examples/example_helper"
2
-
3
- module RR
4
- module TimesCalledMatchers
5
- describe AtMostMatcher, :shared => true do
6
- before do
7
- @times = 3
8
- @matcher = AtMostMatcher.new(@times)
9
- end
10
- end
11
-
12
- describe TimesCalledMatcher, ".create when passed a AtMostMatcher" do
13
- it "returns the passed in argument" do
14
- matcher = AtMostMatcher.new(5)
15
- TimesCalledMatcher.create(matcher).should === matcher
16
- end
17
- end
18
-
19
- describe AtMostMatcher, "#possible_match?" do
20
- it_should_behave_like "RR::TimesCalledMatchers::AtMostMatcher"
21
-
22
- it "returns true when times called < times" do
23
- @matcher.should be_possible_match(2)
24
- end
25
-
26
- it "returns true when times called == times" do
27
- @matcher.should be_possible_match(3)
28
- end
29
-
30
- it "returns false when times called > times" do
31
- @matcher.should_not be_possible_match(4)
32
- end
33
- end
34
-
35
- describe AtMostMatcher, "#matches?" do
36
- it_should_behave_like "RR::TimesCalledMatchers::AtMostMatcher"
37
-
38
- it "returns true when times_called less than times" do
39
- @matcher.should be_matches(2)
40
- end
41
-
42
- it "returns true when times_called == times" do
43
- @matcher.should be_matches(3)
44
- end
45
-
46
- it "returns false when times_called > times" do
47
- @matcher.should_not be_matches(4)
48
- end
49
- end
50
-
51
- describe AtMostMatcher, "#attempt?" do
52
- it_should_behave_like "RR::TimesCalledMatchers::AtMostMatcher"
53
-
54
- it "returns true when less than expected times" do
55
- @matcher.should be_attempt(2)
56
- end
57
-
58
- it "returns false when == expected times" do
59
- @matcher.should_not be_attempt(3)
60
- end
61
-
62
- it "returns false when > expected times" do
63
- @matcher.should_not be_attempt(4)
64
- end
65
- end
66
-
67
- describe AnyTimesMatcher, "#terminal?" do
68
- it_should_behave_like "RR::TimesCalledMatchers::AtMostMatcher"
69
-
70
- it "returns true" do
71
- @matcher.should be_terminal
72
- end
73
- end
74
-
75
- describe AtMostMatcher, "#error_message" do
76
- it_should_behave_like "RR::TimesCalledMatchers::AtMostMatcher"
77
-
78
- it "has an error message" do
79
- @matcher.error_message(5).should == (
80
- "Called 5 times.\nExpected at most 3 times."
81
- )
82
- end
83
- end
84
- end
85
- end
@@ -1,91 +0,0 @@
1
- require "examples/example_helper"
2
-
3
- module RR
4
- module TimesCalledMatchers
5
- describe IntegerMatcher, :shared => true do
6
- before do
7
- @times = 3
8
- @matcher = IntegerMatcher.new(@times)
9
- end
10
- end
11
-
12
- describe TimesCalledMatcher, ".create when passed a IntegerMatcher" do
13
- it "returns the passed in argument" do
14
- matcher = IntegerMatcher.new(5)
15
- TimesCalledMatcher.create(matcher).should === matcher
16
- end
17
- end
18
-
19
- describe TimesCalledMatcher, ".create when passed a Integer" do
20
- it "returns IntegerMatcher" do
21
- TimesCalledMatcher.create(5).should == IntegerMatcher.new(5)
22
- end
23
- end
24
-
25
- describe IntegerMatcher, "#possible_match?" do
26
- it_should_behave_like "RR::TimesCalledMatchers::IntegerMatcher"
27
-
28
- it "returns true when times called < times" do
29
- @matcher.should be_possible_match(2)
30
- end
31
-
32
- it "returns true when times called == times" do
33
- @matcher.should be_possible_match(3)
34
- end
35
-
36
- it "returns false when times called > times" do
37
- @matcher.should_not be_possible_match(4)
38
- end
39
- end
40
-
41
- describe IntegerMatcher, "#matches?" do
42
- it_should_behave_like "RR::TimesCalledMatchers::IntegerMatcher"
43
-
44
- it "returns false when times_called less than times" do
45
- @matcher.should_not be_matches(2)
46
- end
47
-
48
- it "returns true when times_called == times" do
49
- @matcher.should be_matches(3)
50
- end
51
-
52
- it "returns false when times_called > times" do
53
- @matcher.should_not be_matches(4)
54
- end
55
- end
56
-
57
- describe IntegerMatcher, "#attempt?" do
58
- it_should_behave_like "RR::TimesCalledMatchers::IntegerMatcher"
59
-
60
- it "returns true when less than expected times" do
61
- @matcher.should be_attempt(2)
62
- end
63
-
64
- it "returns false when == expected times" do
65
- @matcher.should_not be_attempt(3)
66
- end
67
-
68
- it "returns false when > expected times" do
69
- @matcher.should_not be_attempt(4)
70
- end
71
- end
72
-
73
- describe AnyTimesMatcher, "#terminal?" do
74
- it_should_behave_like "RR::TimesCalledMatchers::IntegerMatcher"
75
-
76
- it "returns true" do
77
- @matcher.should be_terminal
78
- end
79
- end
80
-
81
- describe IntegerMatcher, "#error_message" do
82
- it_should_behave_like "RR::TimesCalledMatchers::IntegerMatcher"
83
-
84
- it "has an error message" do
85
- @matcher.error_message(2).should == (
86
- "Called 2 times.\nExpected 3 times."
87
- )
88
- end
89
- end
90
- end
91
- end
@@ -1,77 +0,0 @@
1
- require "examples/example_helper"
2
-
3
- module RR
4
- module TimesCalledMatchers
5
- describe ProcMatcher, :shared => true do
6
- before do
7
- @times = proc {|other| other == 3}
8
- @matcher = ProcMatcher.new(@times)
9
- end
10
- end
11
-
12
- describe TimesCalledMatcher, ".create when passed a ProcMatcher" do
13
- it "returns the passed in argument" do
14
- matcher = ProcMatcher.new(proc {|other| other == 5})
15
- TimesCalledMatcher.create(matcher).should === matcher
16
- end
17
- end
18
-
19
- describe TimesCalledMatcher, ".create when passed a Integer" do
20
- it "returns ProcMatcher" do
21
- value = proc {|other| other == 5}
22
- TimesCalledMatcher.create(value).should == ProcMatcher.new(value)
23
- end
24
- end
25
-
26
- describe ProcMatcher, "#possible_match?" do
27
- it_should_behave_like "RR::TimesCalledMatchers::ProcMatcher"
28
-
29
- it "always returns true" do
30
- @matcher.should be_possible_match(2)
31
- @matcher.should be_possible_match(3)
32
- @matcher.should be_possible_match(10)
33
- end
34
- end
35
-
36
- describe ProcMatcher, "#matches?" do
37
- it_should_behave_like "RR::TimesCalledMatchers::ProcMatcher"
38
-
39
- it "returns false when proc returns false" do
40
- @times.call(2).should be_false
41
- @matcher.should_not be_matches(2)
42
- end
43
-
44
- it "returns true when proc returns true" do
45
- @times.call(3).should be_true
46
- @matcher.should be_matches(3)
47
- end
48
- end
49
-
50
- describe ProcMatcher, "#attempt?" do
51
- it_should_behave_like "RR::TimesCalledMatchers::ProcMatcher"
52
-
53
- it "always returns true" do
54
- @matcher.should be_attempt(2)
55
- @matcher.should be_attempt(3)
56
- @matcher.should be_attempt(10)
57
- end
58
- end
59
-
60
- describe ProcMatcher, "#terminal?" do
61
- it_should_behave_like "RR::TimesCalledMatchers::ProcMatcher"
62
-
63
- it "returns false" do
64
- @matcher.should_not be_terminal
65
- end
66
- end
67
-
68
- describe ProcMatcher, "#error_message" do
69
- it_should_behave_like "RR::TimesCalledMatchers::ProcMatcher"
70
-
71
- it "has an error message" do
72
- @matcher.error_message(1).should =~
73
- /Called 1 time.\nExpected #<Proc.*> times./
74
- end
75
- end
76
- end
77
- end
@@ -1,97 +0,0 @@
1
- require "examples/example_helper"
2
-
3
- module RR
4
- module TimesCalledMatchers
5
- describe RangeMatcher, :shared => true do
6
- before do
7
- @times = 2..4
8
- @matcher = RangeMatcher.new(@times)
9
- end
10
- end
11
-
12
- describe TimesCalledMatcher, ".create when passed a IntegerMatcher" do
13
- it "returns the passed in argument" do
14
- matcher = RangeMatcher.new(2..4)
15
- TimesCalledMatcher.create(matcher).should === matcher
16
- end
17
- end
18
-
19
- describe TimesCalledMatcher, ".create when passed a Integer" do
20
- it "returns RangeMatcher" do
21
- TimesCalledMatcher.create(2..4).should == RangeMatcher.new(2..4)
22
- end
23
- end
24
-
25
- describe RangeMatcher, "#possible_match?" do
26
- it_should_behave_like "RR::TimesCalledMatchers::RangeMatcher"
27
-
28
- it "returns true when times called < start of range" do
29
- @matcher.should be_possible_match(1)
30
- end
31
-
32
- it "returns true when times called in range" do
33
- @matcher.should be_possible_match(2)
34
- @matcher.should be_possible_match(3)
35
- @matcher.should be_possible_match(4)
36
- end
37
-
38
- it "returns false when times called > end of range" do
39
- @matcher.should_not be_possible_match(5)
40
- end
41
- end
42
-
43
- describe RangeMatcher, "#matches?" do
44
- it_should_behave_like "RR::TimesCalledMatchers::RangeMatcher"
45
-
46
- it "returns false when times_called less than start of range" do
47
- @matcher.should_not be_matches(1)
48
- end
49
-
50
- it "returns true when times_called in range" do
51
- @matcher.should be_matches(2)
52
- @matcher.should be_matches(3)
53
- @matcher.should be_matches(4)
54
- end
55
-
56
- it "returns false when times_called > end of range" do
57
- @matcher.should_not be_matches(5)
58
- end
59
- end
60
-
61
- describe RangeMatcher, "#attempt?" do
62
- it_should_behave_like "RR::TimesCalledMatchers::RangeMatcher"
63
-
64
- it "returns true when less than start of range" do
65
- @matcher.should be_attempt(1)
66
- end
67
-
68
- it "returns true when in range" do
69
- @matcher.should be_attempt(2)
70
- @matcher.should be_attempt(3)
71
- @matcher.should be_attempt(4)
72
- end
73
-
74
- it "returns false when > end of range" do
75
- @matcher.should_not be_attempt(5)
76
- end
77
- end
78
-
79
- describe RangeMatcher, "#terminal?" do
80
- it_should_behave_like "RR::TimesCalledMatchers::RangeMatcher"
81
-
82
- it "returns true" do
83
- @matcher.should be_terminal
84
- end
85
- end
86
-
87
- describe RangeMatcher, "#error_message" do
88
- it_should_behave_like "RR::TimesCalledMatchers::RangeMatcher"
89
-
90
- it "has an error message" do
91
- @matcher.error_message(1).should == (
92
- "Called 1 time.\nExpected 2..4 times."
93
- )
94
- end
95
- end
96
- end
97
- end
@@ -1,53 +0,0 @@
1
- require "examples/example_helper"
2
-
3
- module RR
4
- module TimesCalledMatchers
5
- describe TimesCalledMatcher, ".create when passed a TimesCalledMatcher" do
6
- it "returns the passed in argument" do
7
- matcher = TimesCalledMatcher.new(5)
8
- TimesCalledMatcher.create(matcher).should === matcher
9
- end
10
- end
11
-
12
- describe TimesCalledMatcher, ".create when passed an unsupported type" do
13
- it "raises an ArgumentError" do
14
- matcher = Object.new
15
- proc do
16
- TimesCalledMatcher.create(matcher)
17
- end.should raise_error(ArgumentError, "There is no TimesCalledMatcher for #{matcher.inspect}.")
18
- end
19
- end
20
-
21
- describe TimesCalledMatcher, "#error_message" do
22
- before do
23
- @times = 3
24
- @matcher = TimesCalledMatcher.new(@times)
25
- end
26
-
27
- it "has an error message" do
28
- @matcher.error_message(5).should == (
29
- "Called 5 times.\nExpected 3 times."
30
- )
31
- end
32
- end
33
-
34
- describe TimesCalledMatcher, "#==" do
35
- before do
36
- @times = 3
37
- @matcher = TimesCalledMatcher.new(@times)
38
- end
39
-
40
- it "returns true when other is the same class and times are ==" do
41
- @matcher.should == TimesCalledMatcher.new(@times)
42
- end
43
-
44
- it "returns false when other is a different class and times are ==" do
45
- @matcher.should_not == IntegerMatcher.new(@times)
46
- end
47
-
48
- it "returns false when is the same class and times are not ==" do
49
- @matcher.should_not == TimesCalledMatcher.new(1)
50
- end
51
- end
52
- end
53
- end
@@ -1,25 +0,0 @@
1
- require "rubygems"
2
- require "spec"
3
-
4
- class RspecExampleSuite
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
- puts "Running Rspec Example Suite"
12
- $behaviour_runner.run(ARGV, false)
13
- end
14
-
15
- def require_specs
16
- dir = File.dirname(__FILE__)
17
- Dir["#{dir}/rr/rspec/**/*_example.rb"].each do |file|
18
- require file
19
- end
20
- end
21
- end
22
-
23
- if $0 == __FILE__
24
- RspecExampleSuite.new.run
25
- end
@@ -1,228 +0,0 @@
1
- module RR
2
- module Extensions
3
- module InstanceMethods
4
- # Verifies all the Double objects have met their
5
- # TimesCalledExpectations.
6
- def verify
7
- RR::Space.instance.verify_doubles
8
- end
9
-
10
- # Resets the registered Doubles and ordered Scenarios
11
- def reset
12
- RR::Space.instance.reset
13
- end
14
-
15
- # This method sets the Scenario to have a mock strategy. A mock strategy
16
- # sets the default state of the Scenario to expect the method call
17
- # with arguments exactly one time. The Scenario's expectations can be
18
- # changed.
19
- #
20
- # This method can be chained with probe.
21
- # mock.probe(subject).method_name_1
22
- # or
23
- # probe.mock(subject).method_name_1
24
- #
25
- # When passed the subject, a ScenarioMethodProxy is returned. Passing
26
- # a method with arguments to the proxy will set up expectations that
27
- # the a call to the subject's method with the arguments will happen,
28
- # and return the prescribed value.
29
- # mock(subject).method_name_1 {return_value_1}
30
- # mock(subject).method_name_2(arg1, arg2) {return_value_2}
31
- #
32
- # When passed the subject and the method_name, this method returns
33
- # a mock Scenario with the method already set.
34
- #
35
- # mock(subject, :method_name_1) {return_value_1}
36
- # mock(subject, :method_name_2).with(arg1, arg2) {return_value_2}
37
- #
38
- # mock also takes a block for definitions.
39
- # mock(subject) do
40
- # method_name_1 {return_value_1}
41
- # method_name_2(arg_1, arg_2) {return_value_2}
42
- # end
43
- def mock(subject=ScenarioCreator::NO_SUBJECT_ARG, method_name=nil, &definition)
44
- creator = RR::Space.scenario_creator
45
- creator.mock(subject, method_name, &definition)
46
- end
47
-
48
-
49
- # This method sets the Scenario to have a stub strategy. A stub strategy
50
- # sets the default state of the Scenario to expect the method call
51
- # with any arguments any number of times. The Scenario's
52
- # expectations can be changed.
53
- #
54
- # This method can be chained with probe.
55
- # stub.probe(subject).method_name_1
56
- # or
57
- # probe.stub(subject).method_name_1
58
- #
59
- # When passed the subject, a ScenarioMethodProxy is returned. Passing
60
- # a method with arguments to the proxy will set up expectations that
61
- # the a call to the subject's method with the arguments will happen,
62
- # and return the prescribed value.
63
- # stub(subject).method_name_1 {return_value_1}
64
- # stub(subject).method_name_2(arg_1, arg_2) {return_value_2}
65
- #
66
- # When passed the subject and the method_name, this method returns
67
- # a stub Scenario with the method already set.
68
- #
69
- # mock(subject, :method_name_1) {return_value_1}
70
- # mock(subject, :method_name_2).with(arg1, arg2) {return_value_2}
71
- #
72
- # stub also takes a block for definitions.
73
- # stub(subject) do
74
- # method_name_1 {return_value_1}
75
- # method_name_2(arg_1, arg_2) {return_value_2}
76
- # end
77
- def stub(subject=ScenarioCreator::NO_SUBJECT_ARG, method_name=nil, &definition)
78
- creator = RR::Space.scenario_creator
79
- creator.stub(subject, method_name, &definition)
80
- end
81
-
82
- # This method add probe capabilities to the Scenario. probe can be called
83
- # with mock or stub.
84
- #
85
- # mock.probe(controller.template).render(:partial => "my/socks")
86
- #
87
- # stub.probe(controller.template).render(:partial => "my/socks") do |html|
88
- # html.should include("My socks are wet")
89
- # html
90
- # end
91
- #
92
- # mock.probe(controller.template).render(:partial => "my/socks") do |html|
93
- # html.should include("My socks are wet")
94
- # "My new return value"
95
- # end
96
- #
97
- # mock.probe also takes a block for definitions.
98
- # mock.probe(subject) do
99
- # render(:partial => "my/socks")
100
- #
101
- # render(:partial => "my/socks") do |html|
102
- # html.should include("My socks are wet")
103
- # html
104
- # end
105
- #
106
- # render(:partial => "my/socks") do |html|
107
- # html.should include("My socks are wet")
108
- # html
109
- # end
110
- #
111
- # render(:partial => "my/socks") do |html|
112
- # html.should include("My socks are wet")
113
- # "My new return value"
114
- # end
115
- # end
116
- #
117
- # Passing a block to the Scenario (after the method name and arguments)
118
- # allows you to intercept the return value.
119
- # The return value can be modified, validated, and/or overridden by
120
- # passing in a block. The return value of the block will replace
121
- # the actual return value.
122
- #
123
- # mock.probe(controller.template).render(:partial => "my/socks") do |html|
124
- # html.should include("My socks are wet")
125
- # "My new return value"
126
- # end
127
- def probe(subject=ScenarioCreator::NO_SUBJECT_ARG, method_name=nil, &definition)
128
- creator = RR::Space.scenario_creator
129
- creator.probe(subject, method_name, &definition)
130
- end
131
-
132
- # This method sets the Scenario to have a do_not_call strategy.
133
- # A do_not_call strategy sets the default state of the Scenario
134
- # to expect never to be called. The Scenario's expectations can be
135
- # changed.
136
- #
137
- # The following example sets the expectation that subject.method_name
138
- # will never be called with arg1 and arg2.
139
- #
140
- # do_not_allow(subject).method_name(arg1, arg2)
141
- #
142
- # do_not_call also supports a block sytnax.
143
- # do_not_call(subject) do |m|
144
- # m.method1 # Do not allow method1 with any arguments
145
- # m.method2(arg1, arg2) # Do not allow method2 with arguments arg1 and arg2
146
- # m.method3.with_no_args # Do not allow method3 with no arguments
147
- # end
148
- def do_not_call(subject=ScenarioCreator::NO_SUBJECT_ARG, method_name=nil, &definition)
149
- creator = RR::Space.scenario_creator
150
- creator.do_not_call(subject, method_name, &definition)
151
- end
152
- alias_method :dont_call, :do_not_call
153
- alias_method :do_not_allow, :do_not_call
154
- alias_method :dont_allow, :do_not_call
155
-
156
- # Calling instance_of will cause all instances of the passed in Class
157
- # to have the Scenario defined.
158
- #
159
- # The following example mocks all User's valid? method and return false.
160
- # mock.instance_of(User).valid? {false}
161
- #
162
- # The following example mocks and probes User#projects and returns the
163
- # first 3 projects.
164
- # mock.instance_of(User).projects do |projects|
165
- # projects[0..2]
166
- # end
167
- def instance_of(subject=ScenarioCreator::NO_SUBJECT_ARG, method_name=nil, &definition)
168
- creator = RR::Space.scenario_creator
169
- creator.instance_of(subject, method_name, &definition)
170
- end
171
-
172
- # Returns a AnyTimesMatcher. This is meant to be passed in as an argument
173
- # to Scenario#times.
174
- #
175
- # mock(object).method_name(anything).times(any_times) {return_value}
176
- def any_times
177
- TimesCalledMatchers::AnyTimesMatcher.new
178
- end
179
-
180
- # Sets up an Anything wildcard ArgumentEqualityExpectation
181
- # that succeeds when passed any argument.
182
- # mock(object).method_name(anything) {return_value}
183
- # object.method_name("an arbitrary value") # passes
184
- def anything
185
- RR::WildcardMatchers::Anything.new
186
- end
187
-
188
- # Sets up an IsA wildcard ArgumentEqualityExpectation
189
- # that succeeds when passed an argument of a certain type.
190
- # mock(object).method_name(is_a(String)) {return_value}
191
- # object.method_name("A String") # passes
192
- def is_a(klass)
193
- RR::WildcardMatchers::IsA.new(klass)
194
- end
195
-
196
- # Sets up an Numeric wildcard ArgumentEqualityExpectation
197
- # that succeeds when passed an argument that is ::Numeric.
198
- # mock(object).method_name(numeric) {return_value}
199
- # object.method_name(99) # passes
200
- def numeric
201
- RR::WildcardMatchers::Numeric.new
202
- end
203
-
204
- # Sets up an Boolean wildcard ArgumentEqualityExpectation
205
- # that succeeds when passed an argument that is a ::Boolean.
206
- # mock(object).method_name(boolean) {return_value}
207
- # object.method_name(false) # passes
208
- def boolean
209
- RR::WildcardMatchers::Boolean.new
210
- end
211
-
212
- # Sets up a DuckType wildcard ArgumentEqualityExpectation
213
- # that succeeds when passed the argument implements the methods.
214
- # arg = Object.new
215
- # def arg.foo; end
216
- # def arg.bar; end
217
- # mock(object).method_name(duck_type(:foo, :bar)) {return_value}
218
- # object.method_name(arg) # passes
219
- def duck_type(*args)
220
- RR::WildcardMatchers::DuckType.new(*args)
221
- end
222
-
223
- instance_methods.each do |name|
224
- alias_method "rr_#{name}", name
225
- end
226
- end
227
- end
228
- end