floehopper-mocha 0.9.3.20081220175348

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 (162) hide show
  1. data/COPYING +3 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +35 -0
  4. data/RELEASE +257 -0
  5. data/Rakefile +199 -0
  6. data/examples/misc.rb +44 -0
  7. data/examples/mocha.rb +26 -0
  8. data/examples/stubba.rb +65 -0
  9. data/lib/mocha/any_instance_method.rb +54 -0
  10. data/lib/mocha/argument_iterator.rb +21 -0
  11. data/lib/mocha/backtrace_filter.rb +17 -0
  12. data/lib/mocha/cardinality.rb +95 -0
  13. data/lib/mocha/central.rb +27 -0
  14. data/lib/mocha/change_state_side_effect.rb +19 -0
  15. data/lib/mocha/class_method.rb +86 -0
  16. data/lib/mocha/configuration.rb +60 -0
  17. data/lib/mocha/deprecation.rb +22 -0
  18. data/lib/mocha/exception_raiser.rb +17 -0
  19. data/lib/mocha/expectation.rb +451 -0
  20. data/lib/mocha/expectation_error.rb +15 -0
  21. data/lib/mocha/expectation_list.rb +50 -0
  22. data/lib/mocha/in_state_ordering_constraint.rb +19 -0
  23. data/lib/mocha/inspect.rb +67 -0
  24. data/lib/mocha/instance_method.rb +16 -0
  25. data/lib/mocha/is_a.rb +9 -0
  26. data/lib/mocha/logger.rb +15 -0
  27. data/lib/mocha/metaclass.rb +13 -0
  28. data/lib/mocha/method_matcher.rb +21 -0
  29. data/lib/mocha/mini_test_adapter.rb +50 -0
  30. data/lib/mocha/mock.rb +200 -0
  31. data/lib/mocha/mockery.rb +181 -0
  32. data/lib/mocha/module_method.rb +16 -0
  33. data/lib/mocha/multiple_yields.rb +20 -0
  34. data/lib/mocha/names.rb +53 -0
  35. data/lib/mocha/no_yields.rb +11 -0
  36. data/lib/mocha/object.rb +187 -0
  37. data/lib/mocha/parameter_matchers/all_of.rb +42 -0
  38. data/lib/mocha/parameter_matchers/any_of.rb +47 -0
  39. data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  40. data/lib/mocha/parameter_matchers/anything.rb +33 -0
  41. data/lib/mocha/parameter_matchers/base.rb +15 -0
  42. data/lib/mocha/parameter_matchers/equals.rb +42 -0
  43. data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  44. data/lib/mocha/parameter_matchers/has_entry.rb +56 -0
  45. data/lib/mocha/parameter_matchers/has_key.rb +42 -0
  46. data/lib/mocha/parameter_matchers/has_value.rb +42 -0
  47. data/lib/mocha/parameter_matchers/includes.rb +40 -0
  48. data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  49. data/lib/mocha/parameter_matchers/is_a.rb +42 -0
  50. data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  51. data/lib/mocha/parameter_matchers/not.rb +42 -0
  52. data/lib/mocha/parameter_matchers/object.rb +15 -0
  53. data/lib/mocha/parameter_matchers/optionally.rb +55 -0
  54. data/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  55. data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  56. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  57. data/lib/mocha/parameter_matchers.rb +27 -0
  58. data/lib/mocha/parameters_matcher.rb +37 -0
  59. data/lib/mocha/pretty_parameters.rb +28 -0
  60. data/lib/mocha/return_values.rb +31 -0
  61. data/lib/mocha/sequence.rb +42 -0
  62. data/lib/mocha/single_return_value.rb +17 -0
  63. data/lib/mocha/single_yield.rb +18 -0
  64. data/lib/mocha/standalone.rb +166 -0
  65. data/lib/mocha/state_machine.rb +91 -0
  66. data/lib/mocha/stubbing_error.rb +16 -0
  67. data/lib/mocha/test_case_adapter.rb +103 -0
  68. data/lib/mocha/unexpected_invocation.rb +18 -0
  69. data/lib/mocha/yield_parameters.rb +31 -0
  70. data/lib/mocha.rb +47 -0
  71. data/lib/mocha_standalone.rb +2 -0
  72. data/lib/stubba.rb +4 -0
  73. data/test/acceptance/acceptance_test_helper.rb +38 -0
  74. data/test/acceptance/bug_18914_test.rb +43 -0
  75. data/test/acceptance/bug_21465_test.rb +34 -0
  76. data/test/acceptance/bug_21563_test.rb +25 -0
  77. data/test/acceptance/expected_invocation_count_test.rb +196 -0
  78. data/test/acceptance/failure_messages_test.rb +64 -0
  79. data/test/acceptance/minitest_test.rb +130 -0
  80. data/test/acceptance/mocha_example_test.rb +98 -0
  81. data/test/acceptance/mocha_test_result_test.rb +84 -0
  82. data/test/acceptance/mock_test.rb +100 -0
  83. data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  84. data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  85. data/test/acceptance/optional_parameters_test.rb +70 -0
  86. data/test/acceptance/parameter_matcher_test.rb +209 -0
  87. data/test/acceptance/partial_mocks_test.rb +47 -0
  88. data/test/acceptance/return_value_test.rb +52 -0
  89. data/test/acceptance/sequence_test.rb +186 -0
  90. data/test/acceptance/standalone_test.rb +139 -0
  91. data/test/acceptance/states_test.rb +70 -0
  92. data/test/acceptance/stub_any_instance_method_test.rb +195 -0
  93. data/test/acceptance/stub_class_method_test.rb +203 -0
  94. data/test/acceptance/stub_everything_test.rb +56 -0
  95. data/test/acceptance/stub_instance_method_test.rb +203 -0
  96. data/test/acceptance/stub_module_method_test.rb +163 -0
  97. data/test/acceptance/stub_test.rb +52 -0
  98. data/test/acceptance/stubba_example_test.rb +102 -0
  99. data/test/acceptance/stubba_test.rb +15 -0
  100. data/test/acceptance/stubba_test_result_test.rb +66 -0
  101. data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  102. data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  103. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  104. data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
  105. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
  106. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  107. data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
  108. data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
  109. data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  110. data/test/deprecation_disabler.rb +15 -0
  111. data/test/execution_point.rb +36 -0
  112. data/test/method_definer.rb +24 -0
  113. data/test/simple_counter.rb +13 -0
  114. data/test/test_helper.rb +11 -0
  115. data/test/test_runner.rb +33 -0
  116. data/test/unit/any_instance_method_test.rb +126 -0
  117. data/test/unit/array_inspect_test.rb +16 -0
  118. data/test/unit/backtrace_filter_test.rb +19 -0
  119. data/test/unit/cardinality_test.rb +56 -0
  120. data/test/unit/central_test.rb +65 -0
  121. data/test/unit/change_state_side_effect_test.rb +41 -0
  122. data/test/unit/class_method_test.rb +237 -0
  123. data/test/unit/date_time_inspect_test.rb +21 -0
  124. data/test/unit/exception_raiser_test.rb +42 -0
  125. data/test/unit/expectation_list_test.rb +57 -0
  126. data/test/unit/expectation_test.rb +459 -0
  127. data/test/unit/hash_inspect_test.rb +16 -0
  128. data/test/unit/in_state_ordering_constraint_test.rb +43 -0
  129. data/test/unit/metaclass_test.rb +22 -0
  130. data/test/unit/method_matcher_test.rb +23 -0
  131. data/test/unit/mock_test.rb +295 -0
  132. data/test/unit/mockery_test.rb +149 -0
  133. data/test/unit/multiple_yields_test.rb +18 -0
  134. data/test/unit/no_yields_test.rb +18 -0
  135. data/test/unit/object_inspect_test.rb +37 -0
  136. data/test/unit/object_test.rb +82 -0
  137. data/test/unit/parameter_matchers/all_of_test.rb +26 -0
  138. data/test/unit/parameter_matchers/any_of_test.rb +26 -0
  139. data/test/unit/parameter_matchers/anything_test.rb +21 -0
  140. data/test/unit/parameter_matchers/equals_test.rb +25 -0
  141. data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  142. data/test/unit/parameter_matchers/has_entry_test.rb +62 -0
  143. data/test/unit/parameter_matchers/has_key_test.rb +36 -0
  144. data/test/unit/parameter_matchers/has_value_test.rb +37 -0
  145. data/test/unit/parameter_matchers/includes_test.rb +25 -0
  146. data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  147. data/test/unit/parameter_matchers/is_a_test.rb +25 -0
  148. data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  149. data/test/unit/parameter_matchers/not_test.rb +26 -0
  150. data/test/unit/parameter_matchers/regexp_matches_test.rb +25 -0
  151. data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  152. data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  153. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  154. data/test/unit/parameters_matcher_test.rb +121 -0
  155. data/test/unit/return_values_test.rb +63 -0
  156. data/test/unit/sequence_test.rb +104 -0
  157. data/test/unit/single_return_value_test.rb +14 -0
  158. data/test/unit/single_yield_test.rb +18 -0
  159. data/test/unit/state_machine_test.rb +98 -0
  160. data/test/unit/string_inspect_test.rb +11 -0
  161. data/test/unit/yield_parameters_test.rb +93 -0
  162. metadata +226 -0
@@ -0,0 +1,459 @@
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_verify_successfully_if_expected_call_was_made_at_least_once
257
+ expectation = new_expectation.at_least_once
258
+ 3.times {expectation.invoke}
259
+ assert expectation.verified?
260
+ end
261
+
262
+ def test_should_not_verify_successfully_if_expected_call_was_not_made_at_least_once
263
+ expectation = new_expectation.with(1, 2, 3).at_least_once
264
+ assert !expectation.verified?
265
+ assert_match(/expected at least once, not yet invoked/i, expectation.mocha_inspect)
266
+ end
267
+
268
+ def test_should_verify_successfully_if_expected_call_was_made_expected_number_of_times
269
+ expectation = new_expectation.times(2)
270
+ 2.times {expectation.invoke}
271
+ assert expectation.verified?
272
+ end
273
+
274
+ def test_should_not_verify_successfully_if_expected_call_was_made_too_few_times
275
+ expectation = new_expectation.times(2)
276
+ 1.times {expectation.invoke}
277
+ assert !expectation.verified?
278
+ assert_match(/expected exactly twice, already invoked once/i, expectation.mocha_inspect)
279
+ end
280
+
281
+ def test_should_not_verify_successfully_if_expected_call_was_made_too_many_times
282
+ expectation = new_expectation.times(2)
283
+ 3.times {expectation.invoke}
284
+ assert !expectation.verified?
285
+ end
286
+
287
+ def test_should_increment_assertion_counter_for_expectation_because_it_does_need_verifyng
288
+ expectation = new_expectation
289
+ expectation.invoke
290
+ assertion_counter = SimpleCounter.new
291
+ expectation.verified?(assertion_counter)
292
+ assert_equal 1, assertion_counter.count
293
+ end
294
+
295
+ def test_should_not_increment_assertion_counter_for_stub_because_it_does_not_need_verifying
296
+ stub = Expectation.new(nil, :expected_method).at_least(0)
297
+ assertion_counter = SimpleCounter.new
298
+ stub.verified?(assertion_counter)
299
+ assert_equal 0, assertion_counter.count
300
+ end
301
+
302
+ def test_should_store_backtrace_from_point_where_expectation_was_created
303
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
304
+ assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
305
+ end
306
+
307
+ class FakeMock
308
+
309
+ def initialize(name)
310
+ @name = name
311
+ end
312
+
313
+ def mocha_inspect
314
+ @name
315
+ end
316
+
317
+ end
318
+
319
+ 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
320
+ mock = FakeMock.new('mock')
321
+ sequence_one = Sequence.new('one')
322
+ sequence_two = Sequence.new('two')
323
+ expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
324
+ assert !expectation.verified?
325
+ assert_match "mock.expected_method(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", expectation.mocha_inspect
326
+ end
327
+
328
+ class FakeConstraint
329
+
330
+ def initialize(allows_invocation_now)
331
+ @allows_invocation_now = allows_invocation_now
332
+ end
333
+
334
+ def allows_invocation_now?
335
+ @allows_invocation_now
336
+ end
337
+
338
+ end
339
+
340
+ def test_should_be_in_correct_order_if_all_ordering_constraints_allow_invocation_now
341
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
342
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
343
+ expectation = Expectation.new(nil, :method_one)
344
+ expectation.add_ordering_constraint(constraint_one)
345
+ expectation.add_ordering_constraint(constraint_two)
346
+ assert expectation.in_correct_order?
347
+ end
348
+
349
+ def test_should_not_be_in_correct_order_if_one_ordering_constraint_does_not_allow_invocation_now
350
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
351
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
352
+ expectation = Expectation.new(nil, :method_one)
353
+ expectation.add_ordering_constraint(constraint_one)
354
+ expectation.add_ordering_constraint(constraint_two)
355
+ assert !expectation.in_correct_order?
356
+ end
357
+
358
+ def test_should_match_if_all_ordering_constraints_allow_invocation_now
359
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
360
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
361
+ expectation = Expectation.new(nil, :method_one)
362
+ expectation.add_ordering_constraint(constraint_one)
363
+ expectation.add_ordering_constraint(constraint_two)
364
+ assert expectation.match?(:method_one)
365
+ end
366
+
367
+ def test_should_not_match_if_one_ordering_constraints_does_not_allow_invocation_now
368
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
369
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
370
+ expectation = Expectation.new(nil, :method_one)
371
+ expectation.add_ordering_constraint(constraint_one)
372
+ expectation.add_ordering_constraint(constraint_two)
373
+ assert !expectation.match?(:method_one)
374
+ end
375
+
376
+ def test_should_not_be_satisfied_when_required_invocation_has_not_been_made
377
+ expectation = Expectation.new(nil, :method_one).times(1)
378
+ assert !expectation.satisfied?
379
+ end
380
+
381
+ def test_should_be_satisfied_when_required_invocation_has_been_made
382
+ expectation = Expectation.new(nil, :method_one).times(1)
383
+ expectation.invoke
384
+ assert expectation.satisfied?
385
+ end
386
+
387
+ def test_should_not_be_satisfied_when_minimum_number_of_invocations_has_not_been_made
388
+ expectation = Expectation.new(nil, :method_one).at_least(2)
389
+ expectation.invoke
390
+ assert !expectation.satisfied?
391
+ end
392
+
393
+ def test_should_be_satisfied_when_minimum_number_of_invocations_has_been_made
394
+ expectation = Expectation.new(nil, :method_one).at_least(2)
395
+ 2.times { expectation.invoke }
396
+ assert expectation.satisfied?
397
+ end
398
+
399
+ class FakeSequence
400
+
401
+ attr_reader :expectations
402
+
403
+ def initialize
404
+ @expectations = []
405
+ end
406
+
407
+ def constrain_as_next_in_sequence(expectation)
408
+ @expectations << expectation
409
+ end
410
+
411
+ end
412
+
413
+ def test_should_tell_sequences_to_constrain_expectation_as_next_in_sequence
414
+ sequence_one = FakeSequence.new
415
+ sequence_two = FakeSequence.new
416
+ expectation = Expectation.new(nil, :method_one)
417
+ assert_equal expectation, expectation.in_sequence(sequence_one, sequence_two)
418
+ assert_equal [expectation], sequence_one.expectations
419
+ assert_equal [expectation], sequence_two.expectations
420
+ end
421
+
422
+ class FakeState
423
+
424
+ def initialize
425
+ @active = false
426
+ end
427
+
428
+ def activate
429
+ @active = true
430
+ end
431
+
432
+ def active?
433
+ @active
434
+ end
435
+
436
+ end
437
+
438
+ def test_should_change_state_when_expectation_is_invoked
439
+ state = FakeState.new
440
+ expectation = Expectation.new(nil, :method_one)
441
+
442
+ expectation.then(state)
443
+
444
+ expectation.invoke
445
+ assert state.active?
446
+ end
447
+
448
+ def test_should_match_when_state_is_active
449
+ state = FakeState.new
450
+ expectation = Expectation.new(nil, :method_one)
451
+
452
+ expectation.when(state)
453
+ assert !expectation.match?(:method_one)
454
+
455
+ state.activate
456
+ assert expectation.match?(:method_one)
457
+ end
458
+
459
+ end
@@ -0,0 +1,16 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/inspect'
3
+
4
+ class HashInspectTest < Test::Unit::TestCase
5
+
6
+ def test_should_keep_spacing_between_key_value
7
+ hash = {:a => true}
8
+ assert_equal '{:a => true}', hash.mocha_inspect
9
+ end
10
+
11
+ def test_should_use_mocha_inspect_on_each_item
12
+ hash = {:a => 'mocha'}
13
+ assert_equal "{:a => 'mocha'}", hash.mocha_inspect
14
+ end
15
+
16
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+
3
+ require 'mocha/in_state_ordering_constraint'
4
+
5
+ class InStateOrderingConstraintTest < Test::Unit::TestCase
6
+
7
+ include Mocha
8
+
9
+ class FakeStatePredicate
10
+
11
+ attr_writer :active, :description
12
+
13
+ def active?
14
+ @active
15
+ end
16
+
17
+ def mocha_inspect
18
+ @description
19
+ end
20
+
21
+ end
22
+
23
+ def test_should_allow_invocation_when_state_is_active
24
+ state_predicate = FakeStatePredicate.new
25
+ ordering_constraint = InStateOrderingConstraint.new(state_predicate)
26
+
27
+ state_predicate.active = true
28
+ assert ordering_constraint.allows_invocation_now?
29
+
30
+ state_predicate.active = false
31
+ assert !ordering_constraint.allows_invocation_now?
32
+ end
33
+
34
+ def test_should_describe_itself_in_terms_of_the_state_predicates_description
35
+ state_predicate = FakeStatePredicate.new
36
+ ordering_constraint = InStateOrderingConstraint.new(state_predicate)
37
+
38
+ state_predicate.description = 'the-state-predicate'
39
+
40
+ assert_equal 'when the-state-predicate', ordering_constraint.mocha_inspect
41
+ end
42
+
43
+ end
@@ -0,0 +1,22 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/metaclass'
3
+
4
+ class MetaclassTest < Test::Unit::TestCase
5
+
6
+ def test_should_return_objects_singleton_class
7
+ object = Object.new
8
+ assert_raises(NoMethodError) { object.success? }
9
+
10
+ object = Object.new
11
+ assert object.__metaclass__.ancestors.include?(Object)
12
+ assert object.__metaclass__.ancestors.include?(Kernel)
13
+ assert object.__metaclass__.is_a?(Class)
14
+
15
+ object.__metaclass__.class_eval { def success?; true; end }
16
+ assert object.success?
17
+
18
+ object = Object.new
19
+ assert_raises(NoMethodError) { object.success? }
20
+ end
21
+
22
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/method_matcher'
3
+
4
+ class MethodMatcherTest < Test::Unit::TestCase
5
+
6
+ include Mocha
7
+
8
+ def test_should_match_if_actual_method_name_is_same_as_expected_method_name
9
+ method_matcher = MethodMatcher.new(:method_name)
10
+ assert method_matcher.match?(:method_name)
11
+ end
12
+
13
+ def test_should_not_match_if_actual_method_name_is_not_same_as_expected_method_name
14
+ method_matcher = MethodMatcher.new(:method_name)
15
+ assert !method_matcher.match?(:different_method_name)
16
+ end
17
+
18
+ def test_should_describe_what_method_is_expected
19
+ method_matcher = MethodMatcher.new(:method_name)
20
+ assert_equal "method_name", method_matcher.mocha_inspect
21
+ end
22
+
23
+ end