mocha-macruby 0.9.8.20100129120100

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 (172) hide show
  1. data/COPYING +3 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +39 -0
  4. data/RELEASE +294 -0
  5. data/Rakefile +214 -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.rb +3 -0
  10. data/lib/mocha/any_instance_method.rb +59 -0
  11. data/lib/mocha/api.rb +173 -0
  12. data/lib/mocha/argument_iterator.rb +21 -0
  13. data/lib/mocha/backtrace_filter.rb +17 -0
  14. data/lib/mocha/cardinality.rb +95 -0
  15. data/lib/mocha/central.rb +27 -0
  16. data/lib/mocha/change_state_side_effect.rb +19 -0
  17. data/lib/mocha/class_method.rb +117 -0
  18. data/lib/mocha/configuration.rb +79 -0
  19. data/lib/mocha/deprecation.rb +22 -0
  20. data/lib/mocha/exception_raiser.rb +17 -0
  21. data/lib/mocha/expectation.rb +476 -0
  22. data/lib/mocha/expectation_error.rb +15 -0
  23. data/lib/mocha/expectation_list.rb +50 -0
  24. data/lib/mocha/in_state_ordering_constraint.rb +19 -0
  25. data/lib/mocha/inspect.rb +67 -0
  26. data/lib/mocha/instance_method.rb +16 -0
  27. data/lib/mocha/integration.rb +38 -0
  28. data/lib/mocha/integration/mini_test.rb +21 -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 +50 -0
  31. data/lib/mocha/integration/test_unit.rb +40 -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/is_a.rb +9 -0
  38. data/lib/mocha/logger.rb +15 -0
  39. data/lib/mocha/metaclass.rb +13 -0
  40. data/lib/mocha/method_matcher.rb +21 -0
  41. data/lib/mocha/mock.rb +200 -0
  42. data/lib/mocha/mockery.rb +181 -0
  43. data/lib/mocha/module_method.rb +16 -0
  44. data/lib/mocha/multiple_yields.rb +20 -0
  45. data/lib/mocha/names.rb +53 -0
  46. data/lib/mocha/no_yields.rb +11 -0
  47. data/lib/mocha/object.rb +187 -0
  48. data/lib/mocha/parameter_matchers.rb +27 -0
  49. data/lib/mocha/parameter_matchers/all_of.rb +42 -0
  50. data/lib/mocha/parameter_matchers/any_of.rb +47 -0
  51. data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  52. data/lib/mocha/parameter_matchers/anything.rb +33 -0
  53. data/lib/mocha/parameter_matchers/base.rb +15 -0
  54. data/lib/mocha/parameter_matchers/equals.rb +42 -0
  55. data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  56. data/lib/mocha/parameter_matchers/has_entry.rb +57 -0
  57. data/lib/mocha/parameter_matchers/has_key.rb +43 -0
  58. data/lib/mocha/parameter_matchers/has_value.rb +43 -0
  59. data/lib/mocha/parameter_matchers/includes.rb +41 -0
  60. data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  61. data/lib/mocha/parameter_matchers/is_a.rb +42 -0
  62. data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  63. data/lib/mocha/parameter_matchers/not.rb +42 -0
  64. data/lib/mocha/parameter_matchers/object.rb +15 -0
  65. data/lib/mocha/parameter_matchers/optionally.rb +55 -0
  66. data/lib/mocha/parameter_matchers/regexp_matches.rb +44 -0
  67. data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  68. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  69. data/lib/mocha/parameters_matcher.rb +37 -0
  70. data/lib/mocha/pretty_parameters.rb +28 -0
  71. data/lib/mocha/return_values.rb +31 -0
  72. data/lib/mocha/sequence.rb +42 -0
  73. data/lib/mocha/single_return_value.rb +17 -0
  74. data/lib/mocha/single_yield.rb +18 -0
  75. data/lib/mocha/standalone.rb +1 -0
  76. data/lib/mocha/state_machine.rb +91 -0
  77. data/lib/mocha/stubbing_error.rb +16 -0
  78. data/lib/mocha/unexpected_invocation.rb +18 -0
  79. data/lib/mocha/yield_parameters.rb +31 -0
  80. data/lib/mocha_standalone.rb +2 -0
  81. data/lib/stubba.rb +4 -0
  82. data/test/acceptance/acceptance_test_helper.rb +38 -0
  83. data/test/acceptance/api_test.rb +139 -0
  84. data/test/acceptance/bug_18914_test.rb +43 -0
  85. data/test/acceptance/bug_21465_test.rb +34 -0
  86. data/test/acceptance/bug_21563_test.rb +25 -0
  87. data/test/acceptance/expected_invocation_count_test.rb +196 -0
  88. data/test/acceptance/failure_messages_test.rb +64 -0
  89. data/test/acceptance/minitest_test.rb +153 -0
  90. data/test/acceptance/mocha_example_test.rb +98 -0
  91. data/test/acceptance/mocha_test_result_test.rb +84 -0
  92. data/test/acceptance/mock_test.rb +100 -0
  93. data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  94. data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  95. data/test/acceptance/optional_parameters_test.rb +70 -0
  96. data/test/acceptance/parameter_matcher_test.rb +209 -0
  97. data/test/acceptance/partial_mocks_test.rb +47 -0
  98. data/test/acceptance/return_value_test.rb +52 -0
  99. data/test/acceptance/sequence_test.rb +186 -0
  100. data/test/acceptance/states_test.rb +70 -0
  101. data/test/acceptance/stub_any_instance_method_test.rb +195 -0
  102. data/test/acceptance/stub_class_method_test.rb +203 -0
  103. data/test/acceptance/stub_everything_test.rb +56 -0
  104. data/test/acceptance/stub_instance_method_test.rb +203 -0
  105. data/test/acceptance/stub_module_method_test.rb +163 -0
  106. data/test/acceptance/stub_test.rb +52 -0
  107. data/test/acceptance/stubba_example_test.rb +102 -0
  108. data/test/acceptance/stubba_test.rb +15 -0
  109. data/test/acceptance/stubba_test_result_test.rb +66 -0
  110. data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  111. data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  112. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  113. data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
  114. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
  115. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  116. data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
  117. data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
  118. data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  119. data/test/deprecation_disabler.rb +15 -0
  120. data/test/execution_point.rb +36 -0
  121. data/test/method_definer.rb +24 -0
  122. data/test/simple_counter.rb +13 -0
  123. data/test/test_helper.rb +25 -0
  124. data/test/test_runner.rb +33 -0
  125. data/test/unit/any_instance_method_test.rb +126 -0
  126. data/test/unit/array_inspect_test.rb +16 -0
  127. data/test/unit/backtrace_filter_test.rb +19 -0
  128. data/test/unit/cardinality_test.rb +56 -0
  129. data/test/unit/central_test.rb +65 -0
  130. data/test/unit/change_state_side_effect_test.rb +41 -0
  131. data/test/unit/class_method_test.rb +295 -0
  132. data/test/unit/configuration_test.rb +38 -0
  133. data/test/unit/date_time_inspect_test.rb +21 -0
  134. data/test/unit/exception_raiser_test.rb +42 -0
  135. data/test/unit/expectation_list_test.rb +57 -0
  136. data/test/unit/expectation_test.rb +480 -0
  137. data/test/unit/hash_inspect_test.rb +16 -0
  138. data/test/unit/in_state_ordering_constraint_test.rb +43 -0
  139. data/test/unit/metaclass_test.rb +22 -0
  140. data/test/unit/method_matcher_test.rb +23 -0
  141. data/test/unit/mock_test.rb +302 -0
  142. data/test/unit/mockery_test.rb +149 -0
  143. data/test/unit/multiple_yields_test.rb +18 -0
  144. data/test/unit/no_yields_test.rb +18 -0
  145. data/test/unit/object_inspect_test.rb +37 -0
  146. data/test/unit/object_test.rb +82 -0
  147. data/test/unit/parameter_matchers/all_of_test.rb +26 -0
  148. data/test/unit/parameter_matchers/any_of_test.rb +26 -0
  149. data/test/unit/parameter_matchers/anything_test.rb +21 -0
  150. data/test/unit/parameter_matchers/equals_test.rb +25 -0
  151. data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  152. data/test/unit/parameter_matchers/has_entry_test.rb +82 -0
  153. data/test/unit/parameter_matchers/has_key_test.rb +55 -0
  154. data/test/unit/parameter_matchers/has_value_test.rb +57 -0
  155. data/test/unit/parameter_matchers/includes_test.rb +44 -0
  156. data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  157. data/test/unit/parameter_matchers/is_a_test.rb +25 -0
  158. data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  159. data/test/unit/parameter_matchers/not_test.rb +26 -0
  160. data/test/unit/parameter_matchers/regexp_matches_test.rb +46 -0
  161. data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  162. data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  163. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  164. data/test/unit/parameters_matcher_test.rb +121 -0
  165. data/test/unit/return_values_test.rb +63 -0
  166. data/test/unit/sequence_test.rb +104 -0
  167. data/test/unit/single_return_value_test.rb +14 -0
  168. data/test/unit/single_yield_test.rb +18 -0
  169. data/test/unit/state_machine_test.rb +98 -0
  170. data/test/unit/string_inspect_test.rb +11 -0
  171. data/test/unit/yield_parameters_test.rb +93 -0
  172. metadata +240 -0
@@ -0,0 +1,480 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'method_definer'
3
+ require 'mocha/expectation'
4
+ require 'mocha/sequence'
5
+ require 'execution_point'
6
+ require 'simple_counter'
7
+
8
+ class ExpectationTest < Test::Unit::TestCase
9
+
10
+ include Mocha
11
+
12
+ def new_expectation
13
+ Expectation.new(nil, :expected_method)
14
+ end
15
+
16
+ def test_should_match_calls_to_same_method_with_any_parameters
17
+ assert new_expectation.match?(:expected_method, 1, 2, 3)
18
+ end
19
+
20
+ def test_should_match_calls_to_same_method_with_exactly_zero_parameters
21
+ expectation = new_expectation.with()
22
+ assert expectation.match?(:expected_method)
23
+ end
24
+
25
+ def test_should_not_match_calls_to_same_method_with_more_than_zero_parameters
26
+ expectation = new_expectation.with()
27
+ assert !expectation.match?(:expected_method, 1, 2, 3)
28
+ end
29
+
30
+ def test_should_match_calls_to_same_method_with_expected_parameter_values
31
+ expectation = new_expectation.with(1, 2, 3)
32
+ assert expectation.match?(:expected_method, 1, 2, 3)
33
+ end
34
+
35
+ def test_should_match_calls_to_same_method_with_parameters_constrained_as_expected
36
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
37
+ assert expectation.match?(:expected_method, 1, 2, 3)
38
+ end
39
+
40
+ def test_should_not_match_calls_to_different_method_with_parameters_constrained_as_expected
41
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
42
+ assert !expectation.match?(:different_method, 1, 2, 3)
43
+ end
44
+
45
+ def test_should_not_match_calls_to_different_methods_with_no_parameters
46
+ assert !new_expectation.match?(:unexpected_method)
47
+ end
48
+
49
+ def test_should_not_match_calls_to_same_method_with_too_few_parameters
50
+ expectation = new_expectation.with(1, 2, 3)
51
+ assert !expectation.match?(:unexpected_method, 1, 2)
52
+ end
53
+
54
+ def test_should_not_match_calls_to_same_method_with_too_many_parameters
55
+ expectation = new_expectation.with(1, 2)
56
+ assert !expectation.match?(:unexpected_method, 1, 2, 3)
57
+ end
58
+
59
+ def test_should_not_match_calls_to_same_method_with_unexpected_parameter_values
60
+ expectation = new_expectation.with(1, 2, 3)
61
+ assert !expectation.match?(:unexpected_method, 1, 0, 3)
62
+ end
63
+
64
+ def test_should_not_match_calls_to_same_method_with_parameters_not_constrained_as_expected
65
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
66
+ assert !expectation.match?(:expected_method, 1, 0, 3)
67
+ end
68
+
69
+ def test_should_allow_invocations_until_expected_invocation_count_is_one_and_actual_invocation_count_would_be_two
70
+ expectation = new_expectation.times(1)
71
+ assert expectation.invocations_allowed?
72
+ expectation.invoke
73
+ assert !expectation.invocations_allowed?
74
+ end
75
+
76
+ def test_should_allow_invocations_until_expected_invocation_count_is_two_and_actual_invocation_count_would_be_three
77
+ expectation = new_expectation.times(2)
78
+ assert expectation.invocations_allowed?
79
+ expectation.invoke
80
+ assert expectation.invocations_allowed?
81
+ expectation.invoke
82
+ assert !expectation.invocations_allowed?
83
+ end
84
+
85
+ def test_should_allow_invocations_until_expected_invocation_count_is_a_range_from_two_to_three_and_actual_invocation_count_would_be_four
86
+ expectation = new_expectation.times(2..3)
87
+ assert expectation.invocations_allowed?
88
+ expectation.invoke
89
+ assert expectation.invocations_allowed?
90
+ expectation.invoke
91
+ assert expectation.invocations_allowed?
92
+ expectation.invoke
93
+ assert !expectation.invocations_allowed?
94
+ end
95
+
96
+ def test_should_store_provided_backtrace
97
+ backtrace = Object.new
98
+ expectation = Expectation.new(nil, :expected_method, backtrace)
99
+ assert_equal backtrace, expectation.backtrace
100
+ end
101
+
102
+ def test_should_default_backtrace_to_caller
103
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
104
+ assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
105
+ end
106
+
107
+ def test_should_not_yield
108
+ yielded = false
109
+ new_expectation.invoke() { yielded = true }
110
+ assert_equal false, yielded
111
+ end
112
+
113
+ def test_should_yield_no_parameters
114
+ expectation = new_expectation().yields()
115
+ yielded_parameters = nil
116
+ expectation.invoke() { |*parameters| yielded_parameters = parameters }
117
+ assert_equal Array.new, yielded_parameters
118
+ end
119
+
120
+ def test_should_yield_with_specified_parameters
121
+ expectation = new_expectation().yields(1, 2, 3)
122
+ yielded_parameters = nil
123
+ expectation.invoke() { |*parameters| yielded_parameters = parameters }
124
+ assert_equal [1, 2, 3], yielded_parameters
125
+ end
126
+
127
+ def test_should_yield_different_parameters_on_consecutive_invocations
128
+ expectation = new_expectation().yields(1, 2, 3).yields(4, 5)
129
+ yielded_parameters = []
130
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
131
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
132
+ assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
133
+ end
134
+
135
+ def test_should_yield_multiple_times_for_single_invocation
136
+ expectation = new_expectation().multiple_yields([1, 2, 3], [4, 5])
137
+ yielded_parameters = []
138
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
139
+ assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
140
+ end
141
+
142
+ def test_should_yield_multiple_times_for_first_invocation_and_once_for_second_invocation
143
+ expectation = new_expectation().multiple_yields([1, 2, 3], [4, 5]).then.yields(6, 7)
144
+ yielded_parameters = []
145
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
146
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
147
+ assert_equal [[1, 2, 3], [4, 5], [6, 7]], yielded_parameters
148
+ end
149
+
150
+ def test_should_return_specified_value
151
+ expectation = new_expectation.returns(99)
152
+ assert_equal 99, expectation.invoke
153
+ end
154
+
155
+ def test_should_return_same_specified_value_multiple_times
156
+ expectation = new_expectation.returns(99)
157
+ assert_equal 99, expectation.invoke
158
+ assert_equal 99, expectation.invoke
159
+ end
160
+
161
+ def test_should_return_specified_values_on_consecutive_calls
162
+ expectation = new_expectation.returns(99, 100, 101)
163
+ assert_equal 99, expectation.invoke
164
+ assert_equal 100, expectation.invoke
165
+ assert_equal 101, expectation.invoke
166
+ end
167
+
168
+ def test_should_return_specified_values_on_consecutive_calls_even_if_values_are_modified
169
+ values = [99, 100, 101]
170
+ expectation = new_expectation.returns(*values)
171
+ values.shift
172
+ assert_equal 99, expectation.invoke
173
+ assert_equal 100, expectation.invoke
174
+ assert_equal 101, expectation.invoke
175
+ end
176
+
177
+ def test_should_return_nil_by_default
178
+ assert_nil new_expectation.invoke
179
+ end
180
+
181
+ def test_should_return_nil_if_no_value_specified
182
+ expectation = new_expectation.returns()
183
+ assert_nil expectation.invoke
184
+ end
185
+
186
+ def test_should_raise_runtime_exception
187
+ expectation = new_expectation.raises
188
+ assert_raise(RuntimeError) { expectation.invoke }
189
+ end
190
+
191
+ def test_should_raise_custom_exception
192
+ exception = Class.new(Exception)
193
+ expectation = new_expectation.raises(exception)
194
+ assert_raise(exception) { expectation.invoke }
195
+ end
196
+
197
+ def test_should_raise_same_instance_of_custom_exception
198
+ exception_klass = Class.new(StandardError)
199
+ expected_exception = exception_klass.new
200
+ expectation = new_expectation.raises(expected_exception)
201
+ actual_exception = assert_raise(exception_klass) { expectation.invoke }
202
+ assert_same expected_exception, actual_exception
203
+ end
204
+
205
+ def test_should_use_the_default_exception_message
206
+ expectation = new_expectation.raises(Exception)
207
+ exception = assert_raise(Exception) { expectation.invoke }
208
+ assert_equal Exception.new.message, exception.message
209
+ end
210
+
211
+ def test_should_raise_custom_exception_with_message
212
+ exception_msg = "exception message"
213
+ expectation = new_expectation.raises(Exception, exception_msg)
214
+ exception = assert_raise(Exception) { expectation.invoke }
215
+ assert_equal exception_msg, exception.message
216
+ end
217
+
218
+ def test_should_return_values_then_raise_exception
219
+ expectation = new_expectation.returns(1, 2).then.raises()
220
+ assert_equal 1, expectation.invoke
221
+ assert_equal 2, expectation.invoke
222
+ assert_raise(RuntimeError) { expectation.invoke }
223
+ end
224
+
225
+ def test_should_raise_exception_then_return_values
226
+ expectation = new_expectation.raises().then.returns(1, 2)
227
+ assert_raise(RuntimeError) { expectation.invoke }
228
+ assert_equal 1, expectation.invoke
229
+ assert_equal 2, expectation.invoke
230
+ end
231
+
232
+ def test_should_verify_successfully_if_expected_call_was_made
233
+ expectation = new_expectation
234
+ expectation.invoke
235
+ assert expectation.verified?
236
+ end
237
+
238
+ def test_should_not_verify_successfully_if_call_expected_once_but_invoked_twice
239
+ expectation = new_expectation.once
240
+ expectation.invoke
241
+ expectation.invoke
242
+ assert !expectation.verified?
243
+ end
244
+
245
+ def test_should_not_verify_successfully_if_call_expected_once_but_not_invoked
246
+ expectation = new_expectation.once
247
+ assert !expectation.verified?
248
+ end
249
+
250
+ def test_should_verify_successfully_if_call_expected_once_and_invoked_once
251
+ expectation = new_expectation.once
252
+ expectation.invoke
253
+ assert expectation.verified?
254
+ end
255
+
256
+ def test_should_not_verify_successfully_if_call_expected_twice_and_invoked_three_times
257
+ expectation = new_expectation.twice
258
+ expectation.invoke
259
+ expectation.invoke
260
+ expectation.invoke
261
+ assert !expectation.verified?
262
+ end
263
+
264
+ def test_should_not_verify_successfully_if_call_expected_twice_but_invoked_once
265
+ expectation = new_expectation.twice
266
+ expectation.invoke
267
+ assert !expectation.verified?
268
+ end
269
+
270
+ def test_should_verify_successfully_if_call_expected_twice_and_invoked_twice
271
+ expectation = new_expectation.twice
272
+ expectation.invoke
273
+ expectation.invoke
274
+ assert expectation.verified?
275
+ end
276
+
277
+ def test_should_verify_successfully_if_expected_call_was_made_at_least_once
278
+ expectation = new_expectation.at_least_once
279
+ 3.times {expectation.invoke}
280
+ assert expectation.verified?
281
+ end
282
+
283
+ def test_should_not_verify_successfully_if_expected_call_was_not_made_at_least_once
284
+ expectation = new_expectation.with(1, 2, 3).at_least_once
285
+ assert !expectation.verified?
286
+ assert_match(/expected at least once, not yet invoked/i, expectation.mocha_inspect)
287
+ end
288
+
289
+ def test_should_verify_successfully_if_expected_call_was_made_expected_number_of_times
290
+ expectation = new_expectation.times(2)
291
+ 2.times {expectation.invoke}
292
+ assert expectation.verified?
293
+ end
294
+
295
+ def test_should_not_verify_successfully_if_expected_call_was_made_too_few_times
296
+ expectation = new_expectation.times(2)
297
+ 1.times {expectation.invoke}
298
+ assert !expectation.verified?
299
+ assert_match(/expected exactly twice, already invoked once/i, expectation.mocha_inspect)
300
+ end
301
+
302
+ def test_should_not_verify_successfully_if_expected_call_was_made_too_many_times
303
+ expectation = new_expectation.times(2)
304
+ 3.times {expectation.invoke}
305
+ assert !expectation.verified?
306
+ end
307
+
308
+ def test_should_increment_assertion_counter_for_expectation_because_it_does_need_verifyng
309
+ expectation = new_expectation
310
+ expectation.invoke
311
+ assertion_counter = SimpleCounter.new
312
+ expectation.verified?(assertion_counter)
313
+ assert_equal 1, assertion_counter.count
314
+ end
315
+
316
+ def test_should_not_increment_assertion_counter_for_stub_because_it_does_not_need_verifying
317
+ stub = Expectation.new(nil, :expected_method).at_least(0)
318
+ assertion_counter = SimpleCounter.new
319
+ stub.verified?(assertion_counter)
320
+ assert_equal 0, assertion_counter.count
321
+ end
322
+
323
+ def test_should_store_backtrace_from_point_where_expectation_was_created
324
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
325
+ assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
326
+ end
327
+
328
+ class FakeMock
329
+
330
+ def initialize(name)
331
+ @name = name
332
+ end
333
+
334
+ def mocha_inspect
335
+ @name
336
+ end
337
+
338
+ end
339
+
340
+ def test_should_raise_error_with_message_indicating_which_method_was_expected_to_be_called_on_which_mock_object_with_which_parameters_and_in_what_sequences
341
+ mock = FakeMock.new('mock')
342
+ sequence_one = Sequence.new('one')
343
+ sequence_two = Sequence.new('two')
344
+ expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
345
+ assert !expectation.verified?
346
+ assert_match "mock.expected_method(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", expectation.mocha_inspect
347
+ end
348
+
349
+ class FakeConstraint
350
+
351
+ def initialize(allows_invocation_now)
352
+ @allows_invocation_now = allows_invocation_now
353
+ end
354
+
355
+ def allows_invocation_now?
356
+ @allows_invocation_now
357
+ end
358
+
359
+ end
360
+
361
+ def test_should_be_in_correct_order_if_all_ordering_constraints_allow_invocation_now
362
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
363
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
364
+ expectation = Expectation.new(nil, :method_one)
365
+ expectation.add_ordering_constraint(constraint_one)
366
+ expectation.add_ordering_constraint(constraint_two)
367
+ assert expectation.in_correct_order?
368
+ end
369
+
370
+ def test_should_not_be_in_correct_order_if_one_ordering_constraint_does_not_allow_invocation_now
371
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
372
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
373
+ expectation = Expectation.new(nil, :method_one)
374
+ expectation.add_ordering_constraint(constraint_one)
375
+ expectation.add_ordering_constraint(constraint_two)
376
+ assert !expectation.in_correct_order?
377
+ end
378
+
379
+ def test_should_match_if_all_ordering_constraints_allow_invocation_now
380
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
381
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
382
+ expectation = Expectation.new(nil, :method_one)
383
+ expectation.add_ordering_constraint(constraint_one)
384
+ expectation.add_ordering_constraint(constraint_two)
385
+ assert expectation.match?(:method_one)
386
+ end
387
+
388
+ def test_should_not_match_if_one_ordering_constraints_does_not_allow_invocation_now
389
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
390
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
391
+ expectation = Expectation.new(nil, :method_one)
392
+ expectation.add_ordering_constraint(constraint_one)
393
+ expectation.add_ordering_constraint(constraint_two)
394
+ assert !expectation.match?(:method_one)
395
+ end
396
+
397
+ def test_should_not_be_satisfied_when_required_invocation_has_not_been_made
398
+ expectation = Expectation.new(nil, :method_one).times(1)
399
+ assert !expectation.satisfied?
400
+ end
401
+
402
+ def test_should_be_satisfied_when_required_invocation_has_been_made
403
+ expectation = Expectation.new(nil, :method_one).times(1)
404
+ expectation.invoke
405
+ assert expectation.satisfied?
406
+ end
407
+
408
+ def test_should_not_be_satisfied_when_minimum_number_of_invocations_has_not_been_made
409
+ expectation = Expectation.new(nil, :method_one).at_least(2)
410
+ expectation.invoke
411
+ assert !expectation.satisfied?
412
+ end
413
+
414
+ def test_should_be_satisfied_when_minimum_number_of_invocations_has_been_made
415
+ expectation = Expectation.new(nil, :method_one).at_least(2)
416
+ 2.times { expectation.invoke }
417
+ assert expectation.satisfied?
418
+ end
419
+
420
+ class FakeSequence
421
+
422
+ attr_reader :expectations
423
+
424
+ def initialize
425
+ @expectations = []
426
+ end
427
+
428
+ def constrain_as_next_in_sequence(expectation)
429
+ @expectations << expectation
430
+ end
431
+
432
+ end
433
+
434
+ def test_should_tell_sequences_to_constrain_expectation_as_next_in_sequence
435
+ sequence_one = FakeSequence.new
436
+ sequence_two = FakeSequence.new
437
+ expectation = Expectation.new(nil, :method_one)
438
+ assert_equal expectation, expectation.in_sequence(sequence_one, sequence_two)
439
+ assert_equal [expectation], sequence_one.expectations
440
+ assert_equal [expectation], sequence_two.expectations
441
+ end
442
+
443
+ class FakeState
444
+
445
+ def initialize
446
+ @active = false
447
+ end
448
+
449
+ def activate
450
+ @active = true
451
+ end
452
+
453
+ def active?
454
+ @active
455
+ end
456
+
457
+ end
458
+
459
+ def test_should_change_state_when_expectation_is_invoked
460
+ state = FakeState.new
461
+ expectation = Expectation.new(nil, :method_one)
462
+
463
+ expectation.then(state)
464
+
465
+ expectation.invoke
466
+ assert state.active?
467
+ end
468
+
469
+ def test_should_match_when_state_is_active
470
+ state = FakeState.new
471
+ expectation = Expectation.new(nil, :method_one)
472
+
473
+ expectation.when(state)
474
+ assert !expectation.match?(:method_one)
475
+
476
+ state.activate
477
+ assert expectation.match?(:method_one)
478
+ end
479
+
480
+ end