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.
- data/COPYING +3 -0
- data/MIT-LICENSE +7 -0
- data/README +35 -0
- data/RELEASE +257 -0
- data/Rakefile +199 -0
- data/examples/misc.rb +44 -0
- data/examples/mocha.rb +26 -0
- data/examples/stubba.rb +65 -0
- data/lib/mocha/any_instance_method.rb +54 -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 +86 -0
- data/lib/mocha/configuration.rb +60 -0
- data/lib/mocha/deprecation.rb +22 -0
- data/lib/mocha/exception_raiser.rb +17 -0
- data/lib/mocha/expectation.rb +451 -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/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/mini_test_adapter.rb +50 -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/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 +56 -0
- data/lib/mocha/parameter_matchers/has_key.rb +42 -0
- data/lib/mocha/parameter_matchers/has_value.rb +42 -0
- data/lib/mocha/parameter_matchers/includes.rb +40 -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 +43 -0
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/parameter_matchers.rb +27 -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 +166 -0
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/test_case_adapter.rb +103 -0
- data/lib/mocha/unexpected_invocation.rb +18 -0
- data/lib/mocha/yield_parameters.rb +31 -0
- data/lib/mocha.rb +47 -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/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 +130 -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/standalone_test.rb +139 -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 +11 -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 +237 -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 +459 -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 +295 -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 +62 -0
- data/test/unit/parameter_matchers/has_key_test.rb +36 -0
- data/test/unit/parameter_matchers/has_value_test.rb +37 -0
- data/test/unit/parameter_matchers/includes_test.rb +25 -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 +25 -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 +226 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "acceptance_test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
class ExpectedInvocationCountTest < 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_pass_if_method_is_never_expected_and_is_never_called
|
17
|
+
test_result = run_test do
|
18
|
+
mock = mock('mock')
|
19
|
+
mock.expects(:method).never
|
20
|
+
0.times { mock.method }
|
21
|
+
end
|
22
|
+
assert_passed(test_result)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_fail_fast_if_method_is_never_expected_but_is_called_once
|
26
|
+
test_result = run_test do
|
27
|
+
mock = mock('mock')
|
28
|
+
mock.expects(:method).never
|
29
|
+
1.times { mock.method }
|
30
|
+
end
|
31
|
+
assert_failed(test_result)
|
32
|
+
assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected never, not yet invoked: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_pass_if_method_is_expected_twice_and_is_called_twice
|
36
|
+
test_result = run_test do
|
37
|
+
mock = mock('mock')
|
38
|
+
mock.expects(:method).times(2)
|
39
|
+
2.times { mock.method }
|
40
|
+
end
|
41
|
+
assert_passed(test_result)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_fail_if_method_is_expected_twice_but_is_called_once
|
45
|
+
test_result = run_test do
|
46
|
+
mock = mock('mock')
|
47
|
+
mock.expects(:method).times(2)
|
48
|
+
1.times { mock.method }
|
49
|
+
end
|
50
|
+
assert_failed(test_result)
|
51
|
+
assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected exactly twice, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_should_fail_fast_if_method_is_expected_twice_but_is_called_three_times
|
55
|
+
test_result = run_test do
|
56
|
+
mock = mock('mock')
|
57
|
+
mock.expects(:method).times(2)
|
58
|
+
3.times { mock.method }
|
59
|
+
end
|
60
|
+
assert_failed(test_result)
|
61
|
+
assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected exactly twice, already invoked twice: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_twice
|
65
|
+
test_result = run_test do
|
66
|
+
mock = mock('mock')
|
67
|
+
mock.expects(:method).times(2..4)
|
68
|
+
2.times { mock.method }
|
69
|
+
end
|
70
|
+
assert_passed(test_result)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_three_times
|
74
|
+
test_result = run_test do
|
75
|
+
mock = mock('mock')
|
76
|
+
mock.expects(:method).times(2..4)
|
77
|
+
3.times { mock.method }
|
78
|
+
end
|
79
|
+
assert_passed(test_result)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_four_times
|
83
|
+
test_result = run_test do
|
84
|
+
mock = mock('mock')
|
85
|
+
mock.expects(:method).times(2..4)
|
86
|
+
4.times { mock.method }
|
87
|
+
end
|
88
|
+
assert_passed(test_result)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_fail_if_method_is_expected_between_two_and_four_times_and_is_called_once
|
92
|
+
test_result = run_test do
|
93
|
+
mock = mock('mock')
|
94
|
+
mock.expects(:method).times(2..4)
|
95
|
+
1.times { mock.method }
|
96
|
+
end
|
97
|
+
assert_failed(test_result)
|
98
|
+
assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected between 2 and 4 times, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_fail_fast_if_method_is_expected_between_two_and_four_times_and_is_called_five_times
|
102
|
+
test_result = run_test do
|
103
|
+
mock = mock('mock')
|
104
|
+
mock.expects(:method).times(2..4)
|
105
|
+
5.times { mock.method }
|
106
|
+
end
|
107
|
+
assert_failed(test_result)
|
108
|
+
assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected between 2 and 4 times, already invoked 4 times: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_should_pass_if_method_is_expected_at_least_once_and_is_called_once
|
112
|
+
test_result = run_test do
|
113
|
+
mock = mock('mock')
|
114
|
+
mock.expects(:method).at_least_once
|
115
|
+
1.times { mock.method }
|
116
|
+
end
|
117
|
+
assert_passed(test_result)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_should_pass_if_method_is_expected_at_least_once_and_is_called_twice
|
121
|
+
test_result = run_test do
|
122
|
+
mock = mock('mock')
|
123
|
+
mock.expects(:method).at_least_once
|
124
|
+
2.times { mock.method }
|
125
|
+
end
|
126
|
+
assert_passed(test_result)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_should_fail_if_method_is_expected_at_least_once_but_is_never_called
|
130
|
+
test_result = run_test do
|
131
|
+
mock = mock('mock')
|
132
|
+
mock.expects(:method).at_least_once
|
133
|
+
0.times { mock.method }
|
134
|
+
end
|
135
|
+
assert_failed(test_result)
|
136
|
+
assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected at least once, not yet invoked: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_should_pass_if_method_is_expected_at_most_once_and_is_never_called
|
140
|
+
test_result = run_test do
|
141
|
+
mock = mock('mock')
|
142
|
+
mock.expects(:method).at_most_once
|
143
|
+
0.times { mock.method }
|
144
|
+
end
|
145
|
+
assert_passed(test_result)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_should_pass_if_method_is_expected_at_most_once_and_called_once
|
149
|
+
test_result = run_test do
|
150
|
+
mock = mock('mock')
|
151
|
+
mock.expects(:method).at_most_once
|
152
|
+
1.times { mock.method }
|
153
|
+
end
|
154
|
+
assert_passed(test_result)
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_should_fail_fast_if_method_is_expected_at_most_once_but_is_called_twice
|
158
|
+
test_result = run_test do
|
159
|
+
mock = mock('mock')
|
160
|
+
mock.expects(:method).at_most_once
|
161
|
+
2.times { mock.method }
|
162
|
+
end
|
163
|
+
assert_failed(test_result)
|
164
|
+
assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected at most once, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_should_pass_if_method_is_never_expected_and_is_never_called_even_if_everything_is_stubbed
|
168
|
+
test_result = run_test do
|
169
|
+
stub = stub_everything('stub')
|
170
|
+
stub.expects(:method).never
|
171
|
+
0.times { stub.method }
|
172
|
+
end
|
173
|
+
assert_passed(test_result)
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_should_fail_fast_if_method_is_never_expected_but_is_called_once_even_if_everything_is_stubbed
|
177
|
+
test_result = run_test do
|
178
|
+
stub = stub_everything('stub')
|
179
|
+
stub.expects(:method).never
|
180
|
+
1.times { stub.method }
|
181
|
+
end
|
182
|
+
assert_failed(test_result)
|
183
|
+
assert_equal ["unexpected invocation: #<Mock:stub>.method()\nsatisfied expectations:\n- expected never, not yet invoked: #<Mock:stub>.method(any_parameters)\n"], test_result.failure_messages
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_should_fail_fast_if_there_is_no_matching_expectation
|
187
|
+
test_result = run_test do
|
188
|
+
mock = mock('mock')
|
189
|
+
mock.expects(:method).with(1)
|
190
|
+
1.times { mock.method }
|
191
|
+
end
|
192
|
+
assert_failed(test_result)
|
193
|
+
assert_equal ["unexpected invocation: #<Mock:mock>.method()\nunsatisfied expectations:\n- expected exactly once, not yet invoked: #<Mock:mock>.method(1)\n"], test_result.failure_messages
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "acceptance_test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
class FailureMessagesTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
OBJECT_ADDRESS_PATTERN = '0x[0-9A-Fa-f]{1,12}'
|
7
|
+
|
8
|
+
include AcceptanceTest
|
9
|
+
|
10
|
+
def setup
|
11
|
+
setup_acceptance_test
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
teardown_acceptance_test
|
16
|
+
end
|
17
|
+
|
18
|
+
class Foo; end
|
19
|
+
|
20
|
+
def test_should_display_class_name_when_expectation_was_on_class
|
21
|
+
test_result = run_test do
|
22
|
+
Foo.expects(:bar)
|
23
|
+
end
|
24
|
+
assert_match Regexp.new('FailureMessagesTest::Foo'), test_result.failures[0].message
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_display_class_name_and_address_when_expectation_was_on_instance
|
28
|
+
test_result = run_test do
|
29
|
+
Foo.new.expects(:bar)
|
30
|
+
end
|
31
|
+
assert_match Regexp.new("#<FailureMessagesTest::Foo:#{OBJECT_ADDRESS_PATTERN}>"), test_result.failures[0].message
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_display_class_name_and_any_instance_prefix_when_expectation_was_on_any_instance
|
35
|
+
test_result = run_test do
|
36
|
+
Foo.any_instance.expects(:bar)
|
37
|
+
end
|
38
|
+
assert_match Regexp.new('#<AnyInstance:FailureMessagesTest::Foo>'), test_result.failures[0].message
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_display_mock_name_when_expectation_was_on_named_mock
|
42
|
+
test_result = run_test do
|
43
|
+
foo = mock('foo')
|
44
|
+
foo.expects(:bar)
|
45
|
+
end
|
46
|
+
assert_match Regexp.new('#<Mock:foo>'), test_result.failures[0].message
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_display_mock_address_when_expectation_was_on_unnamed_mock
|
50
|
+
test_result = run_test do
|
51
|
+
foo = mock()
|
52
|
+
foo.expects(:bar)
|
53
|
+
end
|
54
|
+
assert_match Regexp.new("#<Mock:#{OBJECT_ADDRESS_PATTERN}>"), test_result.failures[0].message
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_should_display_string_when_expectation_was_on_string
|
58
|
+
test_result = run_test do
|
59
|
+
'Foo'.expects(:bar)
|
60
|
+
end
|
61
|
+
assert_match Regexp.new("'Foo'"), test_result.failures[0].message
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "acceptance_test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
if defined?(MiniTest)
|
5
|
+
|
6
|
+
class MiniTestSampleTest < MiniTest::Unit::TestCase
|
7
|
+
|
8
|
+
def test_mocha_with_fulfilled_expectation
|
9
|
+
mockee = mock()
|
10
|
+
mockee.expects(:blah)
|
11
|
+
mockee.blah
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_mocha_with_unfulfilled_expectation
|
15
|
+
mockee = mock()
|
16
|
+
mockee.expects(:blah)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_mocha_with_unexpected_invocation
|
20
|
+
mockee = mock()
|
21
|
+
mockee.blah
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_stubba_with_fulfilled_expectation
|
25
|
+
stubbee = Class.new { define_method(:blah) {} }.new
|
26
|
+
stubbee.expects(:blah)
|
27
|
+
stubbee.blah
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_stubba_with_unfulfilled_expectation
|
31
|
+
stubbee = Class.new { define_method(:blah) {} }.new
|
32
|
+
stubbee.expects(:blah)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_mocha_with_matching_parameter
|
36
|
+
mockee = mock()
|
37
|
+
mockee.expects(:blah).with(has_key(:wibble))
|
38
|
+
mockee.blah(:wibble => 1)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_mocha_with_non_matching_parameter
|
42
|
+
mockee = mock()
|
43
|
+
mockee.expects(:blah).with(has_key(:wibble))
|
44
|
+
mockee.blah(:wobble => 2)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class MiniTestAdapterTest < Test::Unit::TestCase
|
50
|
+
|
51
|
+
def setup
|
52
|
+
@output = StringIO.new
|
53
|
+
MiniTest::Unit.output = @output
|
54
|
+
@runner = MiniTest::Unit.new
|
55
|
+
end
|
56
|
+
|
57
|
+
attr_reader :runner
|
58
|
+
|
59
|
+
def test_should_pass_mocha_test
|
60
|
+
runner.run(%w(-n test_mocha_with_fulfilled_expectation))
|
61
|
+
|
62
|
+
assert_equal 0, runner.errors
|
63
|
+
assert_equal 1, runner.assertion_count
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_fail_mocha_test_due_to_unfulfilled_expectation
|
67
|
+
runner.run(%w(-n test_mocha_with_unfulfilled_expectation))
|
68
|
+
|
69
|
+
assert_equal 1, runner.errors
|
70
|
+
assert_equal 1, runner.assertion_count
|
71
|
+
assert_not_all_expectation_were_satisfied
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_should_fail_mocha_test_due_to_unexpected_invocation
|
75
|
+
runner.run(%w(-n test_mocha_with_unexpected_invocation))
|
76
|
+
|
77
|
+
assert_equal 1, runner.errors
|
78
|
+
assert_equal 0, runner.assertion_count
|
79
|
+
assert_unexpected_invocation
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_should_pass_stubba_test
|
83
|
+
runner.run(%w(-n test_stubba_with_fulfilled_expectation))
|
84
|
+
|
85
|
+
assert_equal 0, runner.errors
|
86
|
+
assert_equal 1, runner.assertion_count
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_should_fail_stubba_test_due_to_unfulfilled_expectation
|
90
|
+
runner.run(%w(-n test_stubba_with_unfulfilled_expectation))
|
91
|
+
|
92
|
+
assert_equal 1, runner.errors
|
93
|
+
assert_equal 1, runner.assertion_count
|
94
|
+
assert_match Regexp.new('not all expectations were satisfied'), output
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_should_pass_mocha_test_with_matching_parameter
|
98
|
+
runner.run(%w(-n test_mocha_with_matching_parameter))
|
99
|
+
|
100
|
+
assert_equal 0, runner.errors
|
101
|
+
assert_equal 1, runner.assertion_count
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_should_fail_mocha_test_with_non_matching_parameter
|
105
|
+
runner.run(%w(-n test_mocha_with_non_matching_parameter))
|
106
|
+
|
107
|
+
assert_equal 1, runner.errors
|
108
|
+
assert_unexpected_invocation
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def output
|
114
|
+
@output.rewind
|
115
|
+
@output.read
|
116
|
+
end
|
117
|
+
|
118
|
+
def assert_unexpected_invocation
|
119
|
+
assert_match Regexp.new('unexpected invocation'), output, "MiniTest output:\n#{output}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def assert_not_all_expectation_were_satisfied
|
123
|
+
assert_match Regexp.new('not all expectations were satisfied'), output, "MiniTest output:\n#{output}"
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
else
|
129
|
+
warn "MiniTest is not available, so MiniTestAdapterTest has not been run."
|
130
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
class MochaExampleTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
class Rover
|
7
|
+
|
8
|
+
def initialize(left_track, right_track, steps_per_metre, steps_per_degree)
|
9
|
+
@left_track, @right_track, @steps_per_metre, @steps_per_degree = left_track, right_track, steps_per_metre, steps_per_degree
|
10
|
+
end
|
11
|
+
|
12
|
+
def forward(metres)
|
13
|
+
@left_track.step(metres * @steps_per_metre)
|
14
|
+
@right_track.step(metres * @steps_per_metre)
|
15
|
+
wait
|
16
|
+
end
|
17
|
+
|
18
|
+
def backward(metres)
|
19
|
+
forward(-metres)
|
20
|
+
end
|
21
|
+
|
22
|
+
def left(degrees)
|
23
|
+
@left_track.step(-degrees * @steps_per_degree)
|
24
|
+
@right_track.step(+degrees * @steps_per_degree)
|
25
|
+
wait
|
26
|
+
end
|
27
|
+
|
28
|
+
def right(degrees)
|
29
|
+
left(-degrees)
|
30
|
+
end
|
31
|
+
|
32
|
+
def wait
|
33
|
+
while (@left_track.moving? or @right_track.moving?); end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_step_both_tracks_forward_ten_steps
|
39
|
+
left_track = mock('left_track')
|
40
|
+
right_track = mock('right_track')
|
41
|
+
steps_per_metre = 5
|
42
|
+
rover = Rover.new(left_track, right_track, steps_per_metre, nil)
|
43
|
+
|
44
|
+
left_track.expects(:step).with(10)
|
45
|
+
right_track.expects(:step).with(10)
|
46
|
+
|
47
|
+
left_track.stubs(:moving?).returns(false)
|
48
|
+
right_track.stubs(:moving?).returns(false)
|
49
|
+
|
50
|
+
rover.forward(2)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_step_both_tracks_backward_ten_steps
|
54
|
+
left_track = mock('left_track')
|
55
|
+
right_track = mock('right_track')
|
56
|
+
steps_per_metre = 5
|
57
|
+
rover = Rover.new(left_track, right_track, steps_per_metre, nil)
|
58
|
+
|
59
|
+
left_track.expects(:step).with(-10)
|
60
|
+
right_track.expects(:step).with(-10)
|
61
|
+
|
62
|
+
left_track.stubs(:moving?).returns(false)
|
63
|
+
right_track.stubs(:moving?).returns(false)
|
64
|
+
|
65
|
+
rover.backward(2)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_should_step_left_track_forwards_five_steps_and_right_track_backwards_five_steps
|
69
|
+
left_track = mock('left_track')
|
70
|
+
right_track = mock('right_track')
|
71
|
+
steps_per_degree = 5.0 / 90.0
|
72
|
+
rover = Rover.new(left_track, right_track, nil, steps_per_degree)
|
73
|
+
|
74
|
+
left_track.expects(:step).with(+5)
|
75
|
+
right_track.expects(:step).with(-5)
|
76
|
+
|
77
|
+
left_track.stubs(:moving?).returns(false)
|
78
|
+
right_track.stubs(:moving?).returns(false)
|
79
|
+
|
80
|
+
rover.right(90)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_should_step_left_track_backwards_five_steps_and_right_track_forwards_five_steps
|
84
|
+
left_track = mock('left_track')
|
85
|
+
right_track = mock('right_track')
|
86
|
+
steps_per_degree = 5.0 / 90.0
|
87
|
+
rover = Rover.new(left_track, right_track, nil, steps_per_degree)
|
88
|
+
|
89
|
+
left_track.expects(:step).with(-5)
|
90
|
+
right_track.expects(:step).with(+5)
|
91
|
+
|
92
|
+
left_track.stubs(:moving?).returns(false)
|
93
|
+
right_track.stubs(:moving?).returns(false)
|
94
|
+
|
95
|
+
rover.left(90)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "acceptance_test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
require 'execution_point'
|
4
|
+
|
5
|
+
class MochaTestResultTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include AcceptanceTest
|
8
|
+
|
9
|
+
def setup
|
10
|
+
setup_acceptance_test
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
teardown_acceptance_test
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_include_expectation_verification_in_assertion_count
|
18
|
+
test_result = run_test do
|
19
|
+
object = mock()
|
20
|
+
object.expects(:message)
|
21
|
+
object.message
|
22
|
+
end
|
23
|
+
assert_equal 1, test_result.assertion_count
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_include_assertions_in_assertion_count
|
27
|
+
test_result = run_test do
|
28
|
+
assert true
|
29
|
+
end
|
30
|
+
assert_equal 1, test_result.assertion_count
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_not_include_stubbing_expectation_verification_in_assertion_count
|
34
|
+
test_result = run_test do
|
35
|
+
object = mock()
|
36
|
+
object.stubs(:message)
|
37
|
+
object.message
|
38
|
+
end
|
39
|
+
assert_equal 0, test_result.assertion_count
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_include_expectation_verification_failure_in_failure_count
|
43
|
+
test_result = run_test do
|
44
|
+
object = mock()
|
45
|
+
object.expects(:message)
|
46
|
+
end
|
47
|
+
assert_equal 1, test_result.failure_count
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_include_unexpected_verification_failure_in_failure_count
|
51
|
+
test_result = run_test do
|
52
|
+
object = mock()
|
53
|
+
object.message
|
54
|
+
end
|
55
|
+
assert_equal 1, test_result.failure_count
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_should_include_assertion_failure_in_failure_count
|
59
|
+
test_result = run_test do
|
60
|
+
flunk
|
61
|
+
end
|
62
|
+
assert_equal 1, test_result.failure_count
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_display_backtrace_indicating_line_number_where_unexpected_method_was_called
|
66
|
+
execution_point = nil
|
67
|
+
test_result = run_test do
|
68
|
+
object = mock()
|
69
|
+
execution_point = ExecutionPoint.current; object.message
|
70
|
+
end
|
71
|
+
assert_equal 1, test_result.failure_count
|
72
|
+
assert_equal execution_point, ExecutionPoint.new(test_result.failures[0].location)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_display_backtrace_indicating_line_number_where_failing_assertion_was_called
|
76
|
+
execution_point = nil
|
77
|
+
test_result = run_test do
|
78
|
+
execution_point = ExecutionPoint.current; flunk
|
79
|
+
end
|
80
|
+
assert_equal 1, test_result.failure_count
|
81
|
+
assert_equal execution_point, ExecutionPoint.new(test_result.failures[0].location)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "acceptance_test_helper")
|
2
|
+
require 'mocha'
|
3
|
+
|
4
|
+
class MockTest < 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_mock_and_explicitly_add_an_expectation_which_is_satisfied
|
17
|
+
test_result = run_test do
|
18
|
+
foo = mock()
|
19
|
+
foo.expects(:bar)
|
20
|
+
foo.bar
|
21
|
+
end
|
22
|
+
assert_passed(test_result)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_build_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
|
26
|
+
test_result = run_test do
|
27
|
+
foo = mock()
|
28
|
+
foo.expects(:bar)
|
29
|
+
end
|
30
|
+
assert_failed(test_result)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_satisfied
|
34
|
+
test_result = run_test do
|
35
|
+
foo = mock('foo')
|
36
|
+
foo.expects(:bar)
|
37
|
+
foo.bar
|
38
|
+
end
|
39
|
+
assert_passed(test_result)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
|
43
|
+
test_result = run_test do
|
44
|
+
foo = mock('foo')
|
45
|
+
foo.expects(:bar)
|
46
|
+
end
|
47
|
+
assert_failed(test_result)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_build_mock_incorporating_two_expectations_which_are_satisifed
|
51
|
+
test_result = run_test do
|
52
|
+
foo = mock(:bar => 'bar', :baz => 'baz')
|
53
|
+
foo.bar
|
54
|
+
foo.baz
|
55
|
+
end
|
56
|
+
assert_passed(test_result)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_should_build_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
|
60
|
+
test_result = run_test do
|
61
|
+
foo = mock(:bar => 'bar', :baz => 'baz')
|
62
|
+
foo.baz
|
63
|
+
end
|
64
|
+
assert_failed(test_result)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_should_build_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
|
68
|
+
test_result = run_test do
|
69
|
+
foo = mock(:bar => 'bar', :baz => 'baz')
|
70
|
+
foo.bar
|
71
|
+
end
|
72
|
+
assert_failed(test_result)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_build_named_mock_incorporating_two_expectations_which_are_satisifed
|
76
|
+
test_result = run_test do
|
77
|
+
foo = mock('foo', :bar => 'bar', :baz => 'baz')
|
78
|
+
foo.bar
|
79
|
+
foo.baz
|
80
|
+
end
|
81
|
+
assert_passed(test_result)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_should_build_named_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
|
85
|
+
test_result = run_test do
|
86
|
+
foo = mock('foo', :bar => 'bar', :baz => 'baz')
|
87
|
+
foo.baz
|
88
|
+
end
|
89
|
+
assert_failed(test_result)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_should_build_named_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
|
93
|
+
test_result = run_test do
|
94
|
+
foo = mock('foo', :bar => 'bar', :baz => 'baz')
|
95
|
+
foo.bar
|
96
|
+
end
|
97
|
+
assert_failed(test_result)
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|