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.
- data/COPYING +3 -0
- data/MIT-LICENSE +7 -0
- data/README +39 -0
- data/RELEASE +294 -0
- data/Rakefile +214 -0
- data/examples/misc.rb +43 -0
- data/examples/mocha.rb +25 -0
- data/examples/stubba.rb +64 -0
- data/lib/mocha.rb +3 -0
- data/lib/mocha/any_instance_method.rb +59 -0
- data/lib/mocha/api.rb +173 -0
- data/lib/mocha/argument_iterator.rb +21 -0
- data/lib/mocha/backtrace_filter.rb +17 -0
- data/lib/mocha/cardinality.rb +95 -0
- data/lib/mocha/central.rb +27 -0
- data/lib/mocha/change_state_side_effect.rb +19 -0
- data/lib/mocha/class_method.rb +117 -0
- data/lib/mocha/configuration.rb +79 -0
- data/lib/mocha/deprecation.rb +22 -0
- data/lib/mocha/exception_raiser.rb +17 -0
- data/lib/mocha/expectation.rb +476 -0
- data/lib/mocha/expectation_error.rb +15 -0
- data/lib/mocha/expectation_list.rb +50 -0
- data/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/lib/mocha/inspect.rb +67 -0
- data/lib/mocha/instance_method.rb +16 -0
- data/lib/mocha/integration.rb +38 -0
- data/lib/mocha/integration/mini_test.rb +21 -0
- data/lib/mocha/integration/mini_test/assertion_counter.rb +23 -0
- data/lib/mocha/integration/mini_test/version_131_and_above.rb +50 -0
- data/lib/mocha/integration/test_unit.rb +40 -0
- data/lib/mocha/integration/test_unit/assertion_counter.rb +23 -0
- data/lib/mocha/integration/test_unit/gem_version_200.rb +49 -0
- data/lib/mocha/integration/test_unit/gem_version_201_and_above.rb +49 -0
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +48 -0
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +50 -0
- data/lib/mocha/is_a.rb +9 -0
- data/lib/mocha/logger.rb +15 -0
- data/lib/mocha/metaclass.rb +13 -0
- data/lib/mocha/method_matcher.rb +21 -0
- data/lib/mocha/mock.rb +200 -0
- data/lib/mocha/mockery.rb +181 -0
- data/lib/mocha/module_method.rb +16 -0
- data/lib/mocha/multiple_yields.rb +20 -0
- data/lib/mocha/names.rb +53 -0
- data/lib/mocha/no_yields.rb +11 -0
- data/lib/mocha/object.rb +187 -0
- data/lib/mocha/parameter_matchers.rb +27 -0
- data/lib/mocha/parameter_matchers/all_of.rb +42 -0
- data/lib/mocha/parameter_matchers/any_of.rb +47 -0
- data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
- data/lib/mocha/parameter_matchers/anything.rb +33 -0
- data/lib/mocha/parameter_matchers/base.rb +15 -0
- data/lib/mocha/parameter_matchers/equals.rb +42 -0
- data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
- data/lib/mocha/parameter_matchers/has_entry.rb +57 -0
- data/lib/mocha/parameter_matchers/has_key.rb +43 -0
- data/lib/mocha/parameter_matchers/has_value.rb +43 -0
- data/lib/mocha/parameter_matchers/includes.rb +41 -0
- data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
- data/lib/mocha/parameter_matchers/is_a.rb +42 -0
- data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
- data/lib/mocha/parameter_matchers/not.rb +42 -0
- data/lib/mocha/parameter_matchers/object.rb +15 -0
- data/lib/mocha/parameter_matchers/optionally.rb +55 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +44 -0
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/parameters_matcher.rb +37 -0
- data/lib/mocha/pretty_parameters.rb +28 -0
- data/lib/mocha/return_values.rb +31 -0
- data/lib/mocha/sequence.rb +42 -0
- data/lib/mocha/single_return_value.rb +17 -0
- data/lib/mocha/single_yield.rb +18 -0
- data/lib/mocha/standalone.rb +1 -0
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/unexpected_invocation.rb +18 -0
- data/lib/mocha/yield_parameters.rb +31 -0
- data/lib/mocha_standalone.rb +2 -0
- data/lib/stubba.rb +4 -0
- data/test/acceptance/acceptance_test_helper.rb +38 -0
- data/test/acceptance/api_test.rb +139 -0
- data/test/acceptance/bug_18914_test.rb +43 -0
- data/test/acceptance/bug_21465_test.rb +34 -0
- data/test/acceptance/bug_21563_test.rb +25 -0
- data/test/acceptance/expected_invocation_count_test.rb +196 -0
- data/test/acceptance/failure_messages_test.rb +64 -0
- data/test/acceptance/minitest_test.rb +153 -0
- data/test/acceptance/mocha_example_test.rb +98 -0
- data/test/acceptance/mocha_test_result_test.rb +84 -0
- data/test/acceptance/mock_test.rb +100 -0
- data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
- data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
- data/test/acceptance/optional_parameters_test.rb +70 -0
- data/test/acceptance/parameter_matcher_test.rb +209 -0
- data/test/acceptance/partial_mocks_test.rb +47 -0
- data/test/acceptance/return_value_test.rb +52 -0
- data/test/acceptance/sequence_test.rb +186 -0
- data/test/acceptance/states_test.rb +70 -0
- data/test/acceptance/stub_any_instance_method_test.rb +195 -0
- data/test/acceptance/stub_class_method_test.rb +203 -0
- data/test/acceptance/stub_everything_test.rb +56 -0
- data/test/acceptance/stub_instance_method_test.rb +203 -0
- data/test/acceptance/stub_module_method_test.rb +163 -0
- data/test/acceptance/stub_test.rb +52 -0
- data/test/acceptance/stubba_example_test.rb +102 -0
- data/test/acceptance/stubba_test.rb +15 -0
- data/test/acceptance/stubba_test_result_test.rb +66 -0
- data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
- data/test/deprecation_disabler.rb +15 -0
- data/test/execution_point.rb +36 -0
- data/test/method_definer.rb +24 -0
- data/test/simple_counter.rb +13 -0
- data/test/test_helper.rb +25 -0
- data/test/test_runner.rb +33 -0
- data/test/unit/any_instance_method_test.rb +126 -0
- data/test/unit/array_inspect_test.rb +16 -0
- data/test/unit/backtrace_filter_test.rb +19 -0
- data/test/unit/cardinality_test.rb +56 -0
- data/test/unit/central_test.rb +65 -0
- data/test/unit/change_state_side_effect_test.rb +41 -0
- data/test/unit/class_method_test.rb +295 -0
- data/test/unit/configuration_test.rb +38 -0
- data/test/unit/date_time_inspect_test.rb +21 -0
- data/test/unit/exception_raiser_test.rb +42 -0
- data/test/unit/expectation_list_test.rb +57 -0
- data/test/unit/expectation_test.rb +480 -0
- data/test/unit/hash_inspect_test.rb +16 -0
- data/test/unit/in_state_ordering_constraint_test.rb +43 -0
- data/test/unit/metaclass_test.rb +22 -0
- data/test/unit/method_matcher_test.rb +23 -0
- data/test/unit/mock_test.rb +302 -0
- data/test/unit/mockery_test.rb +149 -0
- data/test/unit/multiple_yields_test.rb +18 -0
- data/test/unit/no_yields_test.rb +18 -0
- data/test/unit/object_inspect_test.rb +37 -0
- data/test/unit/object_test.rb +82 -0
- data/test/unit/parameter_matchers/all_of_test.rb +26 -0
- data/test/unit/parameter_matchers/any_of_test.rb +26 -0
- data/test/unit/parameter_matchers/anything_test.rb +21 -0
- data/test/unit/parameter_matchers/equals_test.rb +25 -0
- data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
- data/test/unit/parameter_matchers/has_entry_test.rb +82 -0
- data/test/unit/parameter_matchers/has_key_test.rb +55 -0
- data/test/unit/parameter_matchers/has_value_test.rb +57 -0
- data/test/unit/parameter_matchers/includes_test.rb +44 -0
- data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
- data/test/unit/parameter_matchers/is_a_test.rb +25 -0
- data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
- data/test/unit/parameter_matchers/not_test.rb +26 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +46 -0
- data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
- data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
- data/test/unit/parameters_matcher_test.rb +121 -0
- data/test/unit/return_values_test.rb +63 -0
- data/test/unit/sequence_test.rb +104 -0
- data/test/unit/single_return_value_test.rb +14 -0
- data/test/unit/single_yield_test.rb +18 -0
- data/test/unit/state_machine_test.rb +98 -0
- data/test/unit/string_inspect_test.rb +11 -0
- data/test/unit/yield_parameters_test.rb +93 -0
- 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
|