jferris-mocha 0.9.5.0.1240002286

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 (180) hide show
  1. data/COPYING +3 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +37 -0
  4. data/RELEASE +269 -0
  5. data/Rakefile +217 -0
  6. data/examples/misc.rb +43 -0
  7. data/examples/mocha.rb +25 -0
  8. data/examples/stubba.rb +64 -0
  9. data/lib/mocha/any_instance_method.rb +55 -0
  10. data/lib/mocha/api.rb +232 -0
  11. data/lib/mocha/argument_iterator.rb +21 -0
  12. data/lib/mocha/backtrace_filter.rb +17 -0
  13. data/lib/mocha/cardinality.rb +95 -0
  14. data/lib/mocha/central.rb +27 -0
  15. data/lib/mocha/change_state_side_effect.rb +19 -0
  16. data/lib/mocha/class_method.rb +87 -0
  17. data/lib/mocha/configuration.rb +60 -0
  18. data/lib/mocha/deprecation.rb +22 -0
  19. data/lib/mocha/exception_raiser.rb +17 -0
  20. data/lib/mocha/expectation.rb +484 -0
  21. data/lib/mocha/expectation_error.rb +15 -0
  22. data/lib/mocha/expectation_list.rb +50 -0
  23. data/lib/mocha/in_state_ordering_constraint.rb +19 -0
  24. data/lib/mocha/inspect.rb +67 -0
  25. data/lib/mocha/instance_method.rb +16 -0
  26. data/lib/mocha/integration/bacon/assertion_counter.rb +23 -0
  27. data/lib/mocha/integration/bacon/version_11_and_above.rb +34 -0
  28. data/lib/mocha/integration/bacon.rb +1 -0
  29. data/lib/mocha/integration/mini_test/assertion_counter.rb +23 -0
  30. data/lib/mocha/integration/mini_test/version_131_and_above.rb +49 -0
  31. data/lib/mocha/integration/mini_test.rb +1 -0
  32. data/lib/mocha/integration/test_unit/assertion_counter.rb +23 -0
  33. data/lib/mocha/integration/test_unit/gem_version_200.rb +49 -0
  34. data/lib/mocha/integration/test_unit/gem_version_201_and_above.rb +49 -0
  35. data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +48 -0
  36. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +50 -0
  37. data/lib/mocha/integration/test_unit.rb +4 -0
  38. data/lib/mocha/invocation.rb +10 -0
  39. data/lib/mocha/is_a.rb +9 -0
  40. data/lib/mocha/logger.rb +15 -0
  41. data/lib/mocha/metaclass.rb +13 -0
  42. data/lib/mocha/method_matcher.rb +21 -0
  43. data/lib/mocha/mock.rb +200 -0
  44. data/lib/mocha/mockery.rb +189 -0
  45. data/lib/mocha/module_method.rb +16 -0
  46. data/lib/mocha/multiple_yields.rb +20 -0
  47. data/lib/mocha/names.rb +53 -0
  48. data/lib/mocha/no_yields.rb +11 -0
  49. data/lib/mocha/object.rb +187 -0
  50. data/lib/mocha/parameter_matchers/all_of.rb +42 -0
  51. data/lib/mocha/parameter_matchers/any_of.rb +47 -0
  52. data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  53. data/lib/mocha/parameter_matchers/anything.rb +33 -0
  54. data/lib/mocha/parameter_matchers/base.rb +15 -0
  55. data/lib/mocha/parameter_matchers/equals.rb +42 -0
  56. data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  57. data/lib/mocha/parameter_matchers/has_entry.rb +57 -0
  58. data/lib/mocha/parameter_matchers/has_key.rb +42 -0
  59. data/lib/mocha/parameter_matchers/has_value.rb +42 -0
  60. data/lib/mocha/parameter_matchers/includes.rb +40 -0
  61. data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  62. data/lib/mocha/parameter_matchers/is_a.rb +42 -0
  63. data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  64. data/lib/mocha/parameter_matchers/not.rb +42 -0
  65. data/lib/mocha/parameter_matchers/object.rb +15 -0
  66. data/lib/mocha/parameter_matchers/optionally.rb +55 -0
  67. data/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  68. data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  69. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  70. data/lib/mocha/parameter_matchers.rb +27 -0
  71. data/lib/mocha/parameters_matcher.rb +37 -0
  72. data/lib/mocha/pretty_parameters.rb +28 -0
  73. data/lib/mocha/return_values.rb +31 -0
  74. data/lib/mocha/sequence.rb +42 -0
  75. data/lib/mocha/single_return_value.rb +17 -0
  76. data/lib/mocha/single_yield.rb +18 -0
  77. data/lib/mocha/state_machine.rb +91 -0
  78. data/lib/mocha/stubbing_error.rb +16 -0
  79. data/lib/mocha/unexpected_invocation.rb +18 -0
  80. data/lib/mocha/yield_parameters.rb +31 -0
  81. data/lib/mocha.rb +69 -0
  82. data/lib/mocha_standalone.rb +2 -0
  83. data/lib/stubba.rb +4 -0
  84. data/test/acceptance/acceptance_test_helper.rb +38 -0
  85. data/test/acceptance/api_test.rb +139 -0
  86. data/test/acceptance/bacon_spec.rb +67 -0
  87. data/test/acceptance/bacon_test.rb +110 -0
  88. data/test/acceptance/bug_18914_test.rb +43 -0
  89. data/test/acceptance/bug_21465_test.rb +34 -0
  90. data/test/acceptance/bug_21563_test.rb +25 -0
  91. data/test/acceptance/expected_invocation_count_test.rb +196 -0
  92. data/test/acceptance/failure_messages_test.rb +64 -0
  93. data/test/acceptance/minitest_test.rb +146 -0
  94. data/test/acceptance/mocha_example_test.rb +98 -0
  95. data/test/acceptance/mocha_test_result_test.rb +84 -0
  96. data/test/acceptance/mock_test.rb +100 -0
  97. data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  98. data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  99. data/test/acceptance/optional_parameters_test.rb +70 -0
  100. data/test/acceptance/parameter_matcher_test.rb +209 -0
  101. data/test/acceptance/partial_mocks_test.rb +47 -0
  102. data/test/acceptance/return_value_test.rb +52 -0
  103. data/test/acceptance/sequence_test.rb +186 -0
  104. data/test/acceptance/spy_test.rb +109 -0
  105. data/test/acceptance/states_test.rb +70 -0
  106. data/test/acceptance/stub_any_instance_method_test.rb +195 -0
  107. data/test/acceptance/stub_class_method_test.rb +203 -0
  108. data/test/acceptance/stub_everything_test.rb +56 -0
  109. data/test/acceptance/stub_instance_method_test.rb +203 -0
  110. data/test/acceptance/stub_module_method_test.rb +163 -0
  111. data/test/acceptance/stub_test.rb +52 -0
  112. data/test/acceptance/stubba_example_test.rb +102 -0
  113. data/test/acceptance/stubba_test.rb +15 -0
  114. data/test/acceptance/stubba_test_result_test.rb +66 -0
  115. data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  116. data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  117. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  118. data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
  119. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
  120. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  121. data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
  122. data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
  123. data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  124. data/test/deprecation_disabler.rb +15 -0
  125. data/test/execution_point.rb +36 -0
  126. data/test/matcher_helpers.rb +5 -0
  127. data/test/method_definer.rb +24 -0
  128. data/test/simple_counter.rb +13 -0
  129. data/test/test_helper.rb +16 -0
  130. data/test/test_runner.rb +33 -0
  131. data/test/unit/any_instance_method_test.rb +126 -0
  132. data/test/unit/array_inspect_test.rb +16 -0
  133. data/test/unit/assert_received_test.rb +136 -0
  134. data/test/unit/backtrace_filter_test.rb +19 -0
  135. data/test/unit/cardinality_test.rb +56 -0
  136. data/test/unit/central_test.rb +65 -0
  137. data/test/unit/change_state_side_effect_test.rb +41 -0
  138. data/test/unit/class_method_test.rb +237 -0
  139. data/test/unit/date_time_inspect_test.rb +21 -0
  140. data/test/unit/exception_raiser_test.rb +42 -0
  141. data/test/unit/expectation_list_test.rb +57 -0
  142. data/test/unit/expectation_test.rb +526 -0
  143. data/test/unit/hash_inspect_test.rb +16 -0
  144. data/test/unit/have_received_test.rb +137 -0
  145. data/test/unit/in_state_ordering_constraint_test.rb +43 -0
  146. data/test/unit/invocation_test.rb +17 -0
  147. data/test/unit/metaclass_test.rb +22 -0
  148. data/test/unit/method_matcher_test.rb +23 -0
  149. data/test/unit/mock_test.rb +329 -0
  150. data/test/unit/mockery_test.rb +163 -0
  151. data/test/unit/multiple_yields_test.rb +18 -0
  152. data/test/unit/no_yields_test.rb +18 -0
  153. data/test/unit/object_inspect_test.rb +37 -0
  154. data/test/unit/object_test.rb +82 -0
  155. data/test/unit/parameter_matchers/all_of_test.rb +26 -0
  156. data/test/unit/parameter_matchers/any_of_test.rb +26 -0
  157. data/test/unit/parameter_matchers/anything_test.rb +21 -0
  158. data/test/unit/parameter_matchers/equals_test.rb +25 -0
  159. data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  160. data/test/unit/parameter_matchers/has_entry_test.rb +82 -0
  161. data/test/unit/parameter_matchers/has_key_test.rb +36 -0
  162. data/test/unit/parameter_matchers/has_value_test.rb +37 -0
  163. data/test/unit/parameter_matchers/includes_test.rb +25 -0
  164. data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  165. data/test/unit/parameter_matchers/is_a_test.rb +25 -0
  166. data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  167. data/test/unit/parameter_matchers/not_test.rb +26 -0
  168. data/test/unit/parameter_matchers/regexp_matches_test.rb +25 -0
  169. data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  170. data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  171. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  172. data/test/unit/parameters_matcher_test.rb +121 -0
  173. data/test/unit/return_values_test.rb +63 -0
  174. data/test/unit/sequence_test.rb +104 -0
  175. data/test/unit/single_return_value_test.rb +14 -0
  176. data/test/unit/single_yield_test.rb +18 -0
  177. data/test/unit/state_machine_test.rb +98 -0
  178. data/test/unit/string_inspect_test.rb +11 -0
  179. data/test/unit/yield_parameters_test.rb +93 -0
  180. metadata +245 -0
@@ -0,0 +1,203 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubClassMethodTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_method_within_test
17
+ klass = Class.new do
18
+ class << self
19
+ def my_class_method
20
+ :original_return_value
21
+ end
22
+ end
23
+ end
24
+ test_result = run_as_test do
25
+ klass.stubs(:my_class_method).returns(:new_return_value)
26
+ assert_equal :new_return_value, klass.my_class_method
27
+ end
28
+ assert_passed(test_result)
29
+ end
30
+
31
+ def test_should_leave_stubbed_public_method_unchanged_after_test
32
+ klass = Class.new do
33
+ class << self
34
+ def my_class_method
35
+ :original_return_value
36
+ end
37
+ end
38
+ end
39
+ run_as_test do
40
+ klass.stubs(:my_class_method).returns(:new_return_value)
41
+ end
42
+ assert klass.public_methods(false).any? { |m| m.to_s == 'my_class_method' }
43
+ assert_equal :original_return_value, klass.my_class_method
44
+ end
45
+
46
+ def test_should_leave_stubbed_protected_method_unchanged_after_test
47
+ klass = Class.new do
48
+ class << self
49
+ def my_class_method
50
+ :original_return_value
51
+ end
52
+ protected :my_class_method
53
+ end
54
+ end
55
+ run_as_test do
56
+ klass.stubs(:my_class_method).returns(:new_return_value)
57
+ end
58
+ assert klass.protected_methods(false).any? { |m| m.to_s == 'my_class_method' }
59
+ assert_equal :original_return_value, klass.send(:my_class_method)
60
+ end
61
+
62
+ def test_should_leave_stubbed_private_method_unchanged_after_test
63
+ klass = Class.new do
64
+ class << self
65
+ def my_class_method
66
+ :original_return_value
67
+ end
68
+ private :my_class_method
69
+ end
70
+ end
71
+ run_as_test do
72
+ klass.stubs(:my_class_method).returns(:new_return_value)
73
+ end
74
+ assert klass.private_methods(false).any? { |m| m.to_s == 'my_class_method' }
75
+ assert_equal :original_return_value, klass.send(:my_class_method)
76
+ end
77
+
78
+ def test_should_reset_class_expectations_after_test
79
+ klass = Class.new do
80
+ class << self
81
+ def my_class_method
82
+ :original_return_value
83
+ end
84
+ end
85
+ end
86
+ run_as_test do
87
+ klass.stubs(:my_class_method)
88
+ end
89
+ assert_equal 0, klass.mocha.expectations.length
90
+ end
91
+
92
+ def test_should_be_able_to_stub_a_superclass_method
93
+ superklass = Class.new do
94
+ class << self
95
+ def my_superclass_method
96
+ :original_return_value
97
+ end
98
+ end
99
+ end
100
+ klass = Class.new(superklass)
101
+ test_result = run_as_test do
102
+ klass.stubs(:my_superclass_method).returns(:new_return_value)
103
+ assert_equal :new_return_value, klass.my_superclass_method
104
+ end
105
+ assert_passed(test_result)
106
+ superklass_public_methods = superklass.public_methods - superklass.superclass.public_methods
107
+ assert superklass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
108
+ klass_public_methods = klass.public_methods - klass.superclass.public_methods
109
+ assert !klass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
110
+ assert_equal :original_return_value, superklass.my_superclass_method
111
+ end
112
+
113
+ def test_should_be_able_to_stub_method_if_ruby18_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
114
+ ruby18_klass = Class.new do
115
+ class << self
116
+ def public_methods(include_superclass = true)
117
+ ['my_class_method']
118
+ end
119
+ end
120
+ end
121
+ test_result = run_as_test do
122
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
123
+ assert_equal :new_return_value, ruby18_klass.my_class_method
124
+ end
125
+ assert_passed(test_result)
126
+ end
127
+
128
+ def test_should_be_able_to_stub_method_if_ruby19_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
129
+ ruby19_klass = Class.new do
130
+ class << self
131
+ def public_methods(include_superclass = true)
132
+ [:my_class_method]
133
+ end
134
+ end
135
+ end
136
+ test_result = run_as_test do
137
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
138
+ assert_equal :new_return_value, ruby19_klass.my_class_method
139
+ end
140
+ assert_passed(test_result)
141
+ end
142
+
143
+ def test_should_be_able_to_stub_method_if_ruby18_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
144
+ ruby18_klass = Class.new do
145
+ class << self
146
+ def protected_methods(include_superclass = true)
147
+ ['my_class_method']
148
+ end
149
+ end
150
+ end
151
+ test_result = run_as_test do
152
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
153
+ assert_equal :new_return_value, ruby18_klass.my_class_method
154
+ end
155
+ assert_passed(test_result)
156
+ end
157
+
158
+ def test_should_be_able_to_stub_method_if_ruby19_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
159
+ ruby19_klass = Class.new do
160
+ class << self
161
+ def protected_methods(include_superclass = true)
162
+ [:my_class_method]
163
+ end
164
+ end
165
+ end
166
+ test_result = run_as_test do
167
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
168
+ assert_equal :new_return_value, ruby19_klass.my_class_method
169
+ end
170
+ assert_passed(test_result)
171
+ end
172
+
173
+ def test_should_be_able_to_stub_method_if_ruby18_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
174
+ ruby18_klass = Class.new do
175
+ class << self
176
+ def private_methods(include_superclass = true)
177
+ ['my_class_method']
178
+ end
179
+ end
180
+ end
181
+ test_result = run_as_test do
182
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
183
+ assert_equal :new_return_value, ruby18_klass.my_class_method
184
+ end
185
+ assert_passed(test_result)
186
+ end
187
+
188
+ def test_should_be_able_to_stub_method_if_ruby19_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
189
+ ruby19_klass = Class.new do
190
+ class << self
191
+ def private_methods(include_superclass = true)
192
+ [:my_class_method]
193
+ end
194
+ end
195
+ end
196
+ test_result = run_as_test do
197
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
198
+ assert_equal :new_return_value, ruby19_klass.my_class_method
199
+ end
200
+ assert_passed(test_result)
201
+ end
202
+
203
+ end
@@ -0,0 +1,56 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubEverythingTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_build_stub_and_explicitly_add_an_expectation
17
+ test_result = run_as_test do
18
+ foo = stub_everything()
19
+ foo.stubs(:bar)
20
+ foo.bar
21
+ foo.unexpected_invocation
22
+ end
23
+ assert_passed(test_result)
24
+ end
25
+
26
+ def test_should_build_named_stub_and_explicitly_add_an_expectation
27
+ test_result = run_as_test do
28
+ foo = stub_everything('foo')
29
+ foo.stubs(:bar)
30
+ foo.bar
31
+ foo.unexpected_invocation
32
+ end
33
+ assert_passed(test_result)
34
+ end
35
+
36
+ def test_should_build_stub_incorporating_two_expectations
37
+ test_result = run_as_test do
38
+ foo = stub_everything(:bar => 'bar', :baz => 'baz')
39
+ foo.bar
40
+ foo.baz
41
+ foo.unexpected_invocation
42
+ end
43
+ assert_passed(test_result)
44
+ end
45
+
46
+ def test_should_build_named_stub_incorporating_two_expectations
47
+ test_result = run_as_test do
48
+ foo = stub_everything('foo', :bar => 'bar', :baz => 'baz')
49
+ foo.bar
50
+ foo.baz
51
+ foo.unexpected_invocation
52
+ end
53
+ assert_passed(test_result)
54
+ end
55
+
56
+ end
@@ -0,0 +1,203 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubInstanceMethodTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_leave_stubbed_public_method_unchanged_after_test
17
+ instance = Class.new do
18
+ def my_instance_method
19
+ :original_return_value
20
+ end
21
+ end.new
22
+ run_as_test do
23
+ instance.stubs(:my_instance_method).returns(:new_return_value)
24
+ end
25
+ assert instance.public_methods(false).any? { |m| m.to_s == 'my_instance_method' }
26
+ assert_equal :original_return_value, instance.my_instance_method
27
+ end
28
+
29
+ def test_should_leave_stubbed_protected_method_unchanged_after_test
30
+ instance = Class.new do
31
+ def my_instance_method
32
+ :original_return_value
33
+ end
34
+ protected :my_instance_method
35
+ end.new
36
+ run_as_test do
37
+ instance.stubs(:my_instance_method).returns(:new_return_value)
38
+ end
39
+ assert instance.protected_methods(false).any? { |m| m.to_s == 'my_instance_method' }
40
+ assert_equal :original_return_value, instance.send(:my_instance_method)
41
+ end
42
+
43
+ def test_should_leave_stubbed_private_method_unchanged_after_test
44
+ instance = Class.new do
45
+ def my_instance_method
46
+ :original_return_value
47
+ end
48
+ private :my_instance_method
49
+ end.new
50
+ run_as_test do
51
+ instance.stubs(:my_instance_method).returns(:new_return_value)
52
+ end
53
+ assert instance.private_methods(false).any? { |m| m.to_s == 'my_instance_method' }
54
+ assert_equal :original_return_value, instance.send(:my_instance_method)
55
+ end
56
+
57
+ def test_should_reset_expectations_after_test
58
+ instance = Class.new do
59
+ def my_instance_method
60
+ :original_return_value
61
+ end
62
+ end.new
63
+ run_as_test do
64
+ instance.stubs(:my_instance_method).returns(:new_return_value)
65
+ end
66
+ assert_equal 0, instance.mocha.expectations.length
67
+ end
68
+
69
+ def test_should_be_able_to_stub_a_superclass_method
70
+ superklass = Class.new do
71
+ def my_superclass_method
72
+ :original_return_value
73
+ end
74
+ end
75
+ klass = Class.new(superklass)
76
+ instance = klass.new
77
+ test_result = run_as_test do
78
+ instance.stubs(:my_superclass_method).returns(:new_return_value)
79
+ assert_equal :new_return_value, instance.my_superclass_method
80
+ end
81
+ assert_passed(test_result)
82
+ assert instance.public_methods(true).any? { |m| m.to_s == 'my_superclass_method' }
83
+ assert !instance.public_methods(false).any? { |m| m.to_s == 'my_superclass_method' }
84
+ assert_equal :original_return_value, instance.my_superclass_method
85
+ end
86
+
87
+ def test_should_be_able_to_stub_method_if_ruby18_public_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
88
+ ruby18_instance = Class.new do
89
+ def public_methods(include_superclass = true)
90
+ ['my_instance_method']
91
+ end
92
+ end.new
93
+ test_result = run_as_test do
94
+ ruby18_instance.stubs(:my_instance_method).returns(:new_return_value)
95
+ assert_equal :new_return_value, ruby18_instance.my_instance_method
96
+ end
97
+ assert_passed(test_result)
98
+ end
99
+
100
+ def test_should_be_able_to_stub_method_if_ruby19_public_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
101
+ ruby19_instance = Class.new do
102
+ def public_methods(include_superclass = true)
103
+ [:my_instance_method]
104
+ end
105
+ end.new
106
+ test_result = run_as_test do
107
+ ruby19_instance.stubs(:my_instance_method).returns(:new_return_value)
108
+ assert_equal :new_return_value, ruby19_instance.my_instance_method
109
+ end
110
+ assert_passed(test_result)
111
+ end
112
+
113
+ def test_should_be_able_to_stub_method_if_ruby18_protected_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
114
+ ruby18_instance = Class.new do
115
+ def protected_methods(include_superclass = true)
116
+ ['my_instance_method']
117
+ end
118
+ end.new
119
+ test_result = run_as_test do
120
+ ruby18_instance.stubs(:my_instance_method).returns(:new_return_value)
121
+ assert_equal :new_return_value, ruby18_instance.my_instance_method
122
+ end
123
+ assert_passed(test_result)
124
+ end
125
+
126
+ def test_should_be_able_to_stub_method_if_ruby19_protected_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
127
+ ruby19_instance = Class.new do
128
+ def protected_methods(include_superclass = true)
129
+ [:my_instance_method]
130
+ end
131
+ end.new
132
+ test_result = run_as_test do
133
+ ruby19_instance.stubs(:my_instance_method).returns(:new_return_value)
134
+ assert_equal :new_return_value, ruby19_instance.my_instance_method
135
+ end
136
+ assert_passed(test_result)
137
+ end
138
+
139
+ def test_should_be_able_to_stub_method_if_ruby18_private_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
140
+ ruby18_instance = Class.new do
141
+ def private_methods(include_superclass = true)
142
+ ['my_instance_method']
143
+ end
144
+ end.new
145
+ test_result = run_as_test do
146
+ ruby18_instance.stubs(:my_instance_method).returns(:new_return_value)
147
+ assert_equal :new_return_value, ruby18_instance.my_instance_method
148
+ end
149
+ assert_passed(test_result)
150
+ end
151
+
152
+ def test_should_be_able_to_stub_method_if_ruby19_private_methods_include_method_but_method_does_not_exist_like_active_record_association_proxy
153
+ ruby19_instance = Class.new do
154
+ def private_methods(include_superclass = true)
155
+ [:my_instance_method]
156
+ end
157
+ end.new
158
+ test_result = run_as_test do
159
+ ruby19_instance.stubs(:my_instance_method).returns(:new_return_value)
160
+ assert_equal :new_return_value, ruby19_instance.my_instance_method
161
+ end
162
+ assert_passed(test_result)
163
+ end
164
+
165
+ def test_should_be_able_to_specify_expectations_on_multiple_methods_in_a_single_call_to_expects
166
+ instance = Class.new do
167
+ def my_instance_method_1
168
+ :original_return_value_1
169
+ end
170
+ def my_instance_method_2
171
+ :original_return_value_2
172
+ end
173
+ end.new
174
+ run_as_test do
175
+ instance.expects(
176
+ :my_instance_method_1 => :new_return_value_1,
177
+ :my_instance_method_2 => :new_return_value_2
178
+ )
179
+ assert_equal :new_return_value_1, instance.my_instance_method_1
180
+ assert_equal :new_return_value_2, instance.my_instance_method_2
181
+ end
182
+ end
183
+
184
+ def test_should_be_able_to_specify_expectations_on_multiple_methods_in_a_single_call_to_stubs
185
+ instance = Class.new do
186
+ def my_instance_method_1
187
+ :original_return_value_1
188
+ end
189
+ def my_instance_method_2
190
+ :original_return_value_2
191
+ end
192
+ end.new
193
+ run_as_test do
194
+ instance.stubs(
195
+ :my_instance_method_1 => :new_return_value_1,
196
+ :my_instance_method_2 => :new_return_value_2
197
+ )
198
+ assert_equal :new_return_value_1, instance.my_instance_method_1
199
+ assert_equal :new_return_value_2, instance.my_instance_method_2
200
+ end
201
+ end
202
+
203
+ end
@@ -0,0 +1,163 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubModuleMethodTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_method_within_test
17
+ mod = Module.new { def self.my_module_method; :original_return_value; end }
18
+ test_result = run_as_test do
19
+ mod.stubs(:my_module_method).returns(:new_return_value)
20
+ assert_equal :new_return_value, mod.my_module_method
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_leave_stubbed_public_method_unchanged_after_test
26
+ mod = Module.new { class << self; def my_module_method; :original_return_value; end; public :my_module_method; end }
27
+ run_as_test do
28
+ mod.stubs(:my_module_method).returns(:new_return_value)
29
+ end
30
+ assert mod.public_methods(false).any? { |m| m.to_s == 'my_module_method' }
31
+ assert_equal :original_return_value, mod.my_module_method
32
+ end
33
+
34
+ def test_should_leave_stubbed_protected_method_unchanged_after_test
35
+ mod = Module.new { class << self; def my_module_method; :original_return_value; end; protected :my_module_method; end }
36
+ run_as_test do
37
+ mod.stubs(:my_module_method).returns(:new_return_value)
38
+ end
39
+ assert mod.protected_methods(false).any? { |m| m.to_s == 'my_module_method' }
40
+ assert_equal :original_return_value, mod.send(:my_module_method)
41
+ end
42
+
43
+ def test_should_leave_stubbed_private_method_unchanged_after_test
44
+ mod = Module.new { class << self; def my_module_method; :original_return_value; end; private :my_module_method; end }
45
+ run_as_test do
46
+ mod.stubs(:my_module_method).returns(:new_return_value)
47
+ end
48
+ assert mod.private_methods(false).any? { |m| m.to_s == 'my_module_method' }
49
+ assert_equal :original_return_value, mod.send(:my_module_method)
50
+ end
51
+
52
+ def test_should_reset_expectations_after_test
53
+ mod = Module.new { def self.my_module_method; :original_return_value; end }
54
+ run_as_test do
55
+ mod.stubs(:my_module_method)
56
+ end
57
+ assert_equal 0, mod.mocha.expectations.length
58
+ end
59
+
60
+ def test_should_be_able_to_stub_a_superclass_method
61
+ supermod = Module.new { def self.my_superclass_method; :original_return_value; end }
62
+ mod = Module.new { include supermod }
63
+ test_result = run_as_test do
64
+ mod.stubs(:my_superclass_method).returns(:new_return_value)
65
+ assert_equal :new_return_value, mod.my_superclass_method
66
+ end
67
+ assert_passed(test_result)
68
+ assert supermod.public_methods.any? { |m| m.to_s == 'my_superclass_method' }
69
+ assert !mod.public_methods(false).any? { |m| m.to_s == 'my_superclass_method' }
70
+ assert_equal :original_return_value, supermod.my_superclass_method
71
+ end
72
+
73
+ def test_should_be_able_to_stub_method_if_ruby18_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
74
+ ruby18_mod = Module.new do
75
+ class << self
76
+ def public_methods(include_superclass = true)
77
+ ['my_module_method']
78
+ end
79
+ end
80
+ end
81
+ test_result = run_as_test do
82
+ ruby18_mod.stubs(:my_module_method).returns(:new_return_value)
83
+ assert_equal :new_return_value, ruby18_mod.my_module_method
84
+ end
85
+ assert_passed(test_result)
86
+ end
87
+
88
+ def test_should_be_able_to_stub_method_if_ruby19_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
89
+ ruby19_mod = Module.new do
90
+ class << self
91
+ def public_methods(include_superclass = true)
92
+ [:my_module_method]
93
+ end
94
+ end
95
+ end
96
+ test_result = run_as_test do
97
+ ruby19_mod.stubs(:my_module_method).returns(:new_return_value)
98
+ assert_equal :new_return_value, ruby19_mod.my_module_method
99
+ end
100
+ assert_passed(test_result)
101
+ end
102
+
103
+ def test_should_be_able_to_stub_method_if_ruby_18_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
104
+ ruby18_mod = Module.new do
105
+ class << self
106
+ def protected_methods(include_superclass = true)
107
+ ['my_module_method']
108
+ end
109
+ end
110
+ end
111
+ test_result = run_as_test do
112
+ ruby18_mod.stubs(:my_module_method).returns(:new_return_value)
113
+ assert_equal :new_return_value, ruby18_mod.my_module_method
114
+ end
115
+ assert_passed(test_result)
116
+ end
117
+
118
+ def test_should_be_able_to_stub_method_if_ruby19_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
119
+ ruby19_mod = Module.new do
120
+ class << self
121
+ def protected_methods(include_superclass = true)
122
+ [:my_module_method]
123
+ end
124
+ end
125
+ end
126
+ test_result = run_as_test do
127
+ ruby19_mod.stubs(:my_module_method).returns(:new_return_value)
128
+ assert_equal :new_return_value, ruby19_mod.my_module_method
129
+ end
130
+ assert_passed(test_result)
131
+ end
132
+
133
+ def test_should_be_able_to_stub_method_if_ruby18_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
134
+ ruby18_mod = Module.new do
135
+ class << self
136
+ def private_methods(include_superclass = true)
137
+ ['my_module_method']
138
+ end
139
+ end
140
+ end
141
+ test_result = run_as_test do
142
+ ruby18_mod.stubs(:my_module_method).returns(:new_return_value)
143
+ assert_equal :new_return_value, ruby18_mod.my_module_method
144
+ end
145
+ assert_passed(test_result)
146
+ end
147
+
148
+ def test_should_be_able_to_stub_method_if_ruby19_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
149
+ ruby19_mod = Module.new do
150
+ class << self
151
+ def private_methods(include_superclass = true)
152
+ [:my_module_method]
153
+ end
154
+ end
155
+ end
156
+ test_result = run_as_test do
157
+ ruby19_mod.stubs(:my_module_method).returns(:new_return_value)
158
+ assert_equal :new_return_value, ruby19_mod.my_module_method
159
+ end
160
+ assert_passed(test_result)
161
+ end
162
+
163
+ end
@@ -0,0 +1,52 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_build_stub_and_explicitly_add_an_expectation
17
+ test_result = run_as_test do
18
+ foo = stub()
19
+ foo.stubs(:bar)
20
+ foo.bar
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_build_named_stub_and_explicitly_add_an_expectation
26
+ test_result = run_as_test do
27
+ foo = stub('foo')
28
+ foo.stubs(:bar)
29
+ foo.bar
30
+ end
31
+ assert_passed(test_result)
32
+ end
33
+
34
+ def test_should_build_stub_incorporating_two_expectations
35
+ test_result = run_as_test do
36
+ foo = stub(:bar => 'bar', :baz => 'baz')
37
+ foo.bar
38
+ foo.baz
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_build_named_stub_incorporating_two_expectations
44
+ test_result = run_as_test do
45
+ foo = stub('foo', :bar => 'bar', :baz => 'baz')
46
+ foo.bar
47
+ foo.baz
48
+ end
49
+ assert_passed(test_result)
50
+ end
51
+
52
+ end