flexmock 1.3.3 → 2.0.0.rc1
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.
- checksums.yaml +4 -4
- data/.autotest +3 -0
- data/.gitignore +14 -0
- data/.togglerc +7 -0
- data/.travis.yml +5 -0
- data/.yardopts +2 -0
- data/CHANGES +11 -0
- data/Gemfile +1 -4
- data/README.md +39 -11
- data/Rakefile +6 -217
- data/doc/examples/rspec_examples_spec.rb +244 -0
- data/doc/examples/test_unit_examples_test.rb +240 -0
- data/doc/jamis.rb +591 -0
- data/flexmock.gemspec +33 -0
- data/lib/flexmock.rb +0 -1
- data/lib/flexmock/composite_expectation.rb +1 -1
- data/lib/flexmock/core.rb +3 -7
- data/lib/flexmock/core_class_methods.rb +5 -1
- data/lib/flexmock/default_framework_adapter.rb +2 -2
- data/lib/flexmock/expectation.rb +29 -3
- data/lib/flexmock/expectation_director.rb +1 -1
- data/lib/flexmock/minitest.rb +13 -0
- data/lib/flexmock/minitest_extensions.rb +26 -0
- data/lib/flexmock/minitest_integration.rb +111 -0
- data/lib/flexmock/mock_container.rb +1 -2
- data/lib/flexmock/partial_mock.rb +61 -104
- data/lib/flexmock/recorder.rb +1 -2
- data/lib/flexmock/rspec.rb +6 -3
- data/lib/flexmock/test_unit_integration.rb +14 -0
- data/lib/flexmock/validators.rb +5 -4
- data/lib/flexmock/version.rb +1 -9
- data/rakelib/metrics.rake +40 -0
- data/rakelib/preview.rake +4 -0
- data/rakelib/tags.rake +18 -0
- data/todo.txt +20 -0
- metadata +61 -86
- data/Gemfile.lock +0 -20
- data/doc/examples/rspec_examples_spec.rdoc +0 -245
- data/doc/examples/test_unit_examples_test.rdoc +0 -241
- data/test/aliasing_test.rb +0 -66
- data/test/assert_spy_called_test.rb +0 -119
- data/test/base_class_test.rb +0 -71
- data/test/based_partials_test.rb +0 -51
- data/test/container_methods_test.rb +0 -118
- data/test/default_framework_adapter_test.rb +0 -38
- data/test/demeter_mocking_test.rb +0 -191
- data/test/deprecated_methods_test.rb +0 -225
- data/test/examples_from_readme_test.rb +0 -157
- data/test/expectation_description_test.rb +0 -80
- data/test/extended_should_receive_test.rb +0 -69
- data/test/flexmodel_test.rb +0 -54
- data/test/mock_builder_test.rb +0 -68
- data/test/naming_test.rb +0 -84
- data/test/new_instances_test.rb +0 -215
- data/test/object_extensions_test.rb +0 -25
- data/test/partial_mock_test.rb +0 -458
- data/test/record_mode_test.rb +0 -158
- data/test/redirect_error.rb +0 -16
- data/test/rspec_integration/integration_spec.rb +0 -56
- data/test/rspec_integration/spy_example_spec.rb +0 -207
- data/test/samples_test.rb +0 -283
- data/test/should_ignore_missing_test.rb +0 -84
- data/test/should_receive_test.rb +0 -1155
- data/test/spys_test.rb +0 -215
- data/test/symbol_extensions_test.rb +0 -8
- data/test/test_class_extensions.rb +0 -34
- data/test/test_setup.rb +0 -92
- data/test/test_unit_integration/auto_test_unit_test.rb +0 -42
- data/test/test_unit_integration/minitest_teardown_test.rb +0 -14
- data/test/tu_integration_test.rb +0 -99
- data/test/undefined_test.rb +0 -87
@@ -1,84 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#---
|
4
|
-
# Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
|
5
|
-
# All rights reserved.
|
6
|
-
|
7
|
-
# Permission is granted for use, copying, modification, distribution,
|
8
|
-
# and distribution of modified versions of this work as long as the
|
9
|
-
# above copyright notice is included.
|
10
|
-
#+++
|
11
|
-
|
12
|
-
require 'test/test_setup'
|
13
|
-
|
14
|
-
class TestShouldIgnoreMissing < Test::Unit::TestCase
|
15
|
-
include FlexMock::TestCase
|
16
|
-
|
17
|
-
def setup
|
18
|
-
@mock = flexmock("mock")
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_mocks_do_not_respond_to_undefined_methods
|
22
|
-
assert !@mock.respond_to?(:unknown_foo)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_mocks_do_respond_to_defined_methods
|
26
|
-
@mock.should_receive(:known_foo => :bar)
|
27
|
-
assert @mock.respond_to?(:known_foo)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_mocks_do_respond_to_any_method_when_ignoring_missing
|
31
|
-
@mock.should_ignore_missing
|
32
|
-
assert @mock.respond_to?(:unknown_foo)
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_should_ignore_missing_returns_mock
|
36
|
-
result = @mock.should_ignore_missing
|
37
|
-
assert_equal result, @mock
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_ignored_methods_return_undefined
|
41
|
-
@mock.should_ignore_missing
|
42
|
-
assert_equal FlexMock.undefined, @mock.unknown_foo
|
43
|
-
@mock.unknown_foo.bar.baz.bleep
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_undefined_mocking_with_arguments
|
47
|
-
@mock.should_ignore_missing
|
48
|
-
assert_equal FlexMock.undefined, @mock.xyzzy(1,:two,"three")
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_method_chains_with_undefined_are_self_preserving
|
52
|
-
@mock.should_ignore_missing
|
53
|
-
assert_equal FlexMock.undefined, @mock.a.b.c.d.e.f(1).g.h.i.j
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_method_proc_raises_error_on_unknown
|
57
|
-
assert_raises(NameError) {
|
58
|
-
@mock.method(:unknown_foo)
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_method_returns_callable_proc
|
63
|
-
@mock.should_receive(:known_foo).once
|
64
|
-
method_proc = @mock.method(:known_foo)
|
65
|
-
assert_not_nil method_proc
|
66
|
-
method_proc.call([])
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_not_calling_method_proc_will_fail_count_constraints
|
70
|
-
@mock.should_receive(:known_foo).once
|
71
|
-
method_proc = @mock.method(:known_foo)
|
72
|
-
assert_not_nil method_proc
|
73
|
-
assert_raises assertion_failed_error do
|
74
|
-
flexmock_teardown
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_method_returns_do_nothing_proc_for_missing_methods
|
79
|
-
@mock.should_ignore_missing
|
80
|
-
method_proc = @mock.method(:plugh)
|
81
|
-
assert_not_nil method_proc
|
82
|
-
assert_equal FlexMock.undefined, method_proc.call
|
83
|
-
end
|
84
|
-
end
|
data/test/should_receive_test.rb
DELETED
@@ -1,1155 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#---
|
4
|
-
# Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
|
5
|
-
# All rights reserved.
|
6
|
-
|
7
|
-
# Permission is granted for use, copying, modification, distribution,
|
8
|
-
# and distribution of modified versions of this work as long as the
|
9
|
-
# above copyright notice is included.
|
10
|
-
#+++
|
11
|
-
|
12
|
-
require 'test/test_setup'
|
13
|
-
|
14
|
-
def mock_top_level_function
|
15
|
-
:mtlf
|
16
|
-
end
|
17
|
-
|
18
|
-
module Kernel
|
19
|
-
def mock_kernel_function
|
20
|
-
:mkf
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Used for testing
|
25
|
-
class Cat
|
26
|
-
def purr
|
27
|
-
end
|
28
|
-
def meow
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class TestFlexMockShoulds < Test::Unit::TestCase
|
33
|
-
include FlexMock::TestCase
|
34
|
-
|
35
|
-
# Expected error messages on failures
|
36
|
-
COUNT_ERROR_MESSAGE = /\bcalled\s+incorrect\s+number\s+of\s+times\b/
|
37
|
-
NO_MATCH_ERROR_MESSAGE = /\bno\s+matching\s+handler\b/
|
38
|
-
AT_LEAST_ERROR_MESSAGE = COUNT_ERROR_MESSAGE
|
39
|
-
AT_MOST_ERROR_MESSAGE = COUNT_ERROR_MESSAGE
|
40
|
-
OUT_OF_ORDER_ERROR_MESSAGE = /\bcalled\s+out\s+of\s+order\b/
|
41
|
-
NON_CONTAINER_MESSAGE = /\bis\s+not\s+in\s+a\s+container\b/
|
42
|
-
|
43
|
-
def test_defaults
|
44
|
-
FlexMock.use do |m|
|
45
|
-
m.should_receive(:hi)
|
46
|
-
assert_nil m.hi
|
47
|
-
assert_nil m.hi(1)
|
48
|
-
assert_nil m.hi("hello", 2)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_returns_with_value
|
53
|
-
FlexMock.use do |m|
|
54
|
-
m.should_receive(:hi).returns(1)
|
55
|
-
assert_equal 1, m.hi
|
56
|
-
assert_equal 1, m.hi(123)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_returns_with_multiple_values
|
61
|
-
FlexMock.use do |m|
|
62
|
-
m.should_receive(:hi).and_return(1,2,3)
|
63
|
-
assert_equal 1, m.hi
|
64
|
-
assert_equal 2, m.hi
|
65
|
-
assert_equal 3, m.hi
|
66
|
-
assert_equal 3, m.hi
|
67
|
-
assert_equal 3, m.hi
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_multiple_returns
|
72
|
-
FlexMock.use do |m|
|
73
|
-
m.should_receive(:hi).and_return(1).and_return(2,3)
|
74
|
-
assert_equal 1, m.hi
|
75
|
-
assert_equal 2, m.hi
|
76
|
-
assert_equal 3, m.hi
|
77
|
-
assert_equal 3, m.hi
|
78
|
-
assert_equal 3, m.hi
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_returns_with_block
|
83
|
-
FlexMock.use do |m|
|
84
|
-
result = nil
|
85
|
-
m.should_receive(:hi).with(Object).returns { |obj| result = obj }
|
86
|
-
m.hi(3)
|
87
|
-
assert_equal 3, result
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_block_example_from_readme
|
92
|
-
FlexMock.use do |m|
|
93
|
-
m.should_receive(:foo).with(Integer,Proc).and_return(:got_block)
|
94
|
-
m.should_receive(:foo).with(Integer).and_return(:no_block)
|
95
|
-
|
96
|
-
assert_equal :no_block, m.foo(1)
|
97
|
-
assert_equal :got_block, m.foo(1) { }
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_return_with_and_without_block_interleaved
|
102
|
-
FlexMock.use do |m|
|
103
|
-
m.should_receive(:hi).and_return(:a).and_return { :b }.and_return(:c)
|
104
|
-
assert_equal :a, m.hi
|
105
|
-
assert_equal :b, m.hi
|
106
|
-
assert_equal :c, m.hi
|
107
|
-
assert_equal :c, m.hi
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_and_returns_alias
|
112
|
-
FlexMock.use do |m|
|
113
|
-
m.should_receive(:hi).and_return(4)
|
114
|
-
assert_equal 4, m.hi
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_and_return_undefined
|
119
|
-
FlexMock.use do |m|
|
120
|
-
m.should_receive(:foo).and_return_undefined
|
121
|
-
m.should_receive(:phoo).returns_undefined
|
122
|
-
assert_equal FlexMock.undefined, m.foo
|
123
|
-
assert_equal FlexMock.undefined, m.foo.bar.baz.bing.ka_ching
|
124
|
-
assert_equal FlexMock.undefined, m.phoo.bar.baz.bing.ka_ching
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_and_yield_will_continue_to_yield_the_same_value
|
129
|
-
FlexMock.use do |m|
|
130
|
-
m.should_receive(:hi).and_yield(:yield_value)
|
131
|
-
assert_equal :yield_value, m.hi { |v| v }
|
132
|
-
assert_equal :yield_value, m.hi { |v| v }
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_and_yield_with_multiple_values_yields_the_values
|
137
|
-
FlexMock.use do |m|
|
138
|
-
m.should_receive(:hi).and_yield(:one, :two).once
|
139
|
-
assert_equal [:one, :two], m.hi { |a, b| [a, b] }
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_multiple_yields_are_done_sequentially
|
144
|
-
FlexMock.use do |m|
|
145
|
-
m.should_receive(:msg).and_yield(:one).and_yield(:two)
|
146
|
-
assert_equal :one, m.msg { |a| a }
|
147
|
-
assert_equal :two, m.msg { |a| a }
|
148
|
-
assert_equal :two, m.msg { |a| a }
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_multiple_yields_and_multiple_returns_are_synced
|
153
|
-
FlexMock.use do |m|
|
154
|
-
m.should_receive(:msg).and_yield(:one).and_return(1).and_yield(:two).and_return(2)
|
155
|
-
yielded_values = []
|
156
|
-
returned_values = []
|
157
|
-
returned_values << m.msg { |a| yielded_values << a }
|
158
|
-
returned_values << m.msg { |a| yielded_values << a }
|
159
|
-
returned_values << m.msg { |a| yielded_values << a }
|
160
|
-
assert_equal [:one, :two, :two], yielded_values
|
161
|
-
assert_equal [1, 2, 2], returned_values
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_failure_if_no_block_given
|
166
|
-
FlexMock.use do |m|
|
167
|
-
m.should_receive(:hi).and_yield(:one, :two).once
|
168
|
-
assert_raise(FlexMock::MockError) do m.hi end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def test_failure_different_return_value_than_yield_return
|
173
|
-
FlexMock.use do |m|
|
174
|
-
m.should_receive(:hi).and_yield(:yld).once.and_return(:ret)
|
175
|
-
yielded_value = nil
|
176
|
-
assert_equal :ret, m.hi { |v| yielded_value = v }
|
177
|
-
assert_equal :yld, yielded_value
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_multiple_yields
|
182
|
-
FlexMock.use do |m|
|
183
|
-
m.should_receive(:hi).and_yield(:one, :two).and_yield(1, 2)
|
184
|
-
assert_equal [:one, :two], m.hi { |a, b| [a, b] }
|
185
|
-
assert_equal [1, 2], m.hi { |a, b| [a, b] }
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_multiple_yields_will_yield_the_last_value_set
|
190
|
-
FlexMock.use do |m|
|
191
|
-
m.should_receive(:hi).and_yield(:a).and_yield(:b)
|
192
|
-
assert_equal [:a], m.hi { |a, b| [a] }
|
193
|
-
assert_equal [:b], m.hi { |a, b| [a] }
|
194
|
-
assert_equal [:b], m.hi { |a, b| [a] }
|
195
|
-
assert_equal [:b], m.hi { |a, b| [a] }
|
196
|
-
assert_equal [:b], m.hi { |a, b| [a] }
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_yielding_then_not_yielding_and_then_yielding_again
|
201
|
-
FlexMock.use do |m|
|
202
|
-
m.should_receive(:hi).and_yield(:a).once
|
203
|
-
m.should_receive(:hi).and_return(:b).once
|
204
|
-
m.should_receive(:hi).and_yield(:c).once
|
205
|
-
assert_equal :a, m.hi { |v| v }
|
206
|
-
assert_equal :b, m.hi
|
207
|
-
assert_equal :c, m.hi { |v| v }
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_yields_syntax
|
212
|
-
FlexMock.use do |m|
|
213
|
-
m.should_receive(:hi).yields(:one)
|
214
|
-
assert_equal :one, m.hi { |a| a }
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class MyError < RuntimeError
|
219
|
-
end
|
220
|
-
|
221
|
-
def test_and_raises_with_exception_class_throws_exception
|
222
|
-
FlexMock.use do |m|
|
223
|
-
m.should_receive(:failure).and_raise(MyError)
|
224
|
-
assert_raise MyError do
|
225
|
-
m.failure
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_and_raises_with_arguments_throws_exception_made_with_args
|
231
|
-
FlexMock.use do |m|
|
232
|
-
m.should_receive(:failure).and_raise(MyError, "my message")
|
233
|
-
ex = assert_raise MyError do
|
234
|
-
m.failure
|
235
|
-
end
|
236
|
-
assert_equal "my message", ex.message
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_and_raises_with_a_specific_exception_throws_the_exception
|
241
|
-
FlexMock.use do |m|
|
242
|
-
err = MyError.new
|
243
|
-
m.should_receive(:failure).and_raise(err)
|
244
|
-
ex = assert_raise MyError do
|
245
|
-
m.failure
|
246
|
-
end
|
247
|
-
assert_equal err, ex
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def test_raises_is_an_alias_for_and_raise
|
252
|
-
FlexMock.use do |m|
|
253
|
-
m.should_receive(:failure).raises(RuntimeError)
|
254
|
-
assert_raise RuntimeError do
|
255
|
-
m.failure
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
def test_multiple_and_raise_clauses_will_be_done_sequentially
|
261
|
-
FlexMock.use do |m|
|
262
|
-
m.should_receive(:failure).
|
263
|
-
and_raise(RuntimeError, "ONE").
|
264
|
-
and_raise(RuntimeError, "TWO")
|
265
|
-
ex = assert_raise RuntimeError do m.failure end
|
266
|
-
assert_equal "ONE", ex.message
|
267
|
-
ex = assert_raise RuntimeError do m.failure end
|
268
|
-
assert_equal "TWO", ex.message
|
269
|
-
end
|
270
|
-
end
|
271
|
-
|
272
|
-
def test_and_throw_will_throw_a_symbol
|
273
|
-
FlexMock.use do |m|
|
274
|
-
m.should_receive(:msg).and_throw(:sym)
|
275
|
-
value = catch(:sym) do
|
276
|
-
m.msg
|
277
|
-
fail "Should not reach this line"
|
278
|
-
end
|
279
|
-
assert_nil value
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
def test_and_throw_with_expression_will_throw
|
284
|
-
FlexMock.use do |m|
|
285
|
-
m.should_receive(:msg).and_throw(:sym, :return_value)
|
286
|
-
value = catch(:sym) do
|
287
|
-
m.msg
|
288
|
-
fail "Should not reach this line"
|
289
|
-
end
|
290
|
-
assert_equal :return_value, value
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
def test_throws_is_an_alias_for_and_throw
|
295
|
-
FlexMock.use do |m|
|
296
|
-
m.should_receive(:msg).throws(:sym, :return_value)
|
297
|
-
value = catch(:sym) do
|
298
|
-
m.msg
|
299
|
-
fail "Should not reach this line"
|
300
|
-
end
|
301
|
-
assert_equal :return_value, value
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
def test_multiple_throws_will_be_done_sequentially
|
306
|
-
FlexMock.use do |m|
|
307
|
-
m.should_receive(:toss).
|
308
|
-
and_throw(:sym, "ONE").
|
309
|
-
and_throw(:sym, "TWO")
|
310
|
-
value = catch(:sym) do m.toss end
|
311
|
-
assert_equal "ONE", value
|
312
|
-
value = catch(:sym) do m.toss end
|
313
|
-
assert_equal "TWO", value
|
314
|
-
end
|
315
|
-
end
|
316
|
-
|
317
|
-
def test_pass_thru_just_returns_undefined_on_mocks
|
318
|
-
FlexMock.use do |m|
|
319
|
-
m.should_receive(:hi).pass_thru
|
320
|
-
assert_equal FlexMock.undefined, m.hi
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
def test_multiple_expectations
|
325
|
-
FlexMock.use do |m|
|
326
|
-
m.should_receive(:hi).with(1).returns(10)
|
327
|
-
m.should_receive(:hi).with(2).returns(20)
|
328
|
-
|
329
|
-
assert_equal 10, m.hi(1)
|
330
|
-
assert_equal 20, m.hi(2)
|
331
|
-
end
|
332
|
-
end
|
333
|
-
|
334
|
-
def test_with_no_args_with_no_args
|
335
|
-
FlexMock.use do |m|
|
336
|
-
m.should_receive(:hi).with_no_args
|
337
|
-
m.hi
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
|
-
def test_with_no_args_but_with_args
|
342
|
-
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true) do
|
343
|
-
FlexMock.use do |m|
|
344
|
-
m.should_receive(:hi).with_no_args
|
345
|
-
m.hi(1)
|
346
|
-
end
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
def test_with_any_args
|
351
|
-
FlexMock.use do |m|
|
352
|
-
m.should_receive(:hi).with_any_args
|
353
|
-
m.hi
|
354
|
-
m.hi(1)
|
355
|
-
m.hi(1,2,3)
|
356
|
-
m.hi("this is a test")
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
def test_with_any_single_arg_matching
|
361
|
-
FlexMock.use('greeter') do |m|
|
362
|
-
m.should_receive(:hi).with(1,FlexMock.any).twice
|
363
|
-
m.hi(1,2)
|
364
|
-
m.hi(1, "this is a test")
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
def test_with_any_single_arg_nonmatching
|
369
|
-
FlexMock.use('greeter') do |m|
|
370
|
-
m.should_receive(:hi).times(3)
|
371
|
-
m.should_receive(:hi).with(1,FlexMock.any).never
|
372
|
-
m.hi
|
373
|
-
m.hi(1)
|
374
|
-
m.hi(1, "hi", nil)
|
375
|
-
end
|
376
|
-
end
|
377
|
-
|
378
|
-
def test_with_equal_arg_matching
|
379
|
-
FlexMock.use('greeter') do |m|
|
380
|
-
m.should_receive(:hi).with(FlexMock.eq(Object)).once
|
381
|
-
m.hi(Object)
|
382
|
-
end
|
383
|
-
end
|
384
|
-
|
385
|
-
def test_with_ducktype_arg_matching
|
386
|
-
FlexMock.use('greeter') do |m|
|
387
|
-
m.should_receive(:hi).with(FlexMock.ducktype(:purr, :meow)).once
|
388
|
-
m.hi(Cat.new)
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
def test_with_ducktype_arg_matching_no_match
|
393
|
-
FlexMock.use('greeter') do |m|
|
394
|
-
m.should_receive(:hi).with(FlexMock.ducktype(:purr, :meow, :growl))
|
395
|
-
assert_mock_failure(:deep => true, :line => __LINE__+1) {
|
396
|
-
m.hi(Cat.new)
|
397
|
-
}
|
398
|
-
end
|
399
|
-
end
|
400
|
-
|
401
|
-
def test_with_hash_matching
|
402
|
-
FlexMock.use('greeter') do |m|
|
403
|
-
m.should_receive(:hi).with(FlexMock.hsh(:a => 1, :b => 2)).once
|
404
|
-
m.hi(:a => 1, :b => 2, :c => 3)
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
def test_with_hash_non_matching
|
409
|
-
FlexMock.use('greeter') do |m|
|
410
|
-
m.should_receive(:hi).with(FlexMock.hsh(:a => 1, :b => 2))
|
411
|
-
assert_mock_failure(:deep => true, :line => __LINE__+1) {
|
412
|
-
m.hi(:a => 1, :b => 4, :c => 3)
|
413
|
-
}
|
414
|
-
end
|
415
|
-
end
|
416
|
-
|
417
|
-
def test_with_equal_arg_nonmatching
|
418
|
-
FlexMock.use('greeter') do |m|
|
419
|
-
m.should_receive(:hi).with(FlexMock.eq(Object)).never
|
420
|
-
m.should_receive(:hi).never
|
421
|
-
m.should_receive(:hi).with(1).once
|
422
|
-
m.hi(1)
|
423
|
-
end
|
424
|
-
end
|
425
|
-
|
426
|
-
def test_with_optional_proc
|
427
|
-
FlexMock.use('greeter') do |m|
|
428
|
-
m.should_receive(:hi).with(optional_proc).once
|
429
|
-
m.hi { }
|
430
|
-
end
|
431
|
-
end
|
432
|
-
|
433
|
-
def test_with_optional_proc_and_missing_proc
|
434
|
-
FlexMock.use('greeter') do |m|
|
435
|
-
m.should_receive(:hi).with(optional_proc).once
|
436
|
-
m.hi
|
437
|
-
end
|
438
|
-
end
|
439
|
-
|
440
|
-
def test_with_optional_proc_distinquishes_between_nil_and_missing
|
441
|
-
FlexMock.use('greeter') do |m|
|
442
|
-
m.should_receive(:hi).with(optional_proc).never
|
443
|
-
m.should_receive(:hi).with(nil).once
|
444
|
-
m.hi(nil)
|
445
|
-
end
|
446
|
-
end
|
447
|
-
|
448
|
-
def test_with_arbitrary_arg_matching
|
449
|
-
FlexMock.use('greeter') do |m|
|
450
|
-
m.should_receive(:hi).with(FlexMock.on { |arg| arg % 2 == 0 rescue nil }).twice
|
451
|
-
m.should_receive(:hi).never
|
452
|
-
m.should_receive(:hi).with(1).once
|
453
|
-
m.should_receive(:hi).with(2).never
|
454
|
-
m.should_receive(:hi).with(3).once
|
455
|
-
m.should_receive(:hi).with(4).never
|
456
|
-
m.hi(1)
|
457
|
-
m.hi(2)
|
458
|
-
m.hi(3)
|
459
|
-
m.hi(4)
|
460
|
-
end
|
461
|
-
end
|
462
|
-
|
463
|
-
def test_args_matching_with_regex
|
464
|
-
FlexMock.use do |m|
|
465
|
-
m.should_receive(:hi).with(/one/).returns(10)
|
466
|
-
m.should_receive(:hi).with(/t/).returns(20)
|
467
|
-
|
468
|
-
assert_equal 10, m.hi("one")
|
469
|
-
assert_equal 10, m.hi("done")
|
470
|
-
assert_equal 20, m.hi("two")
|
471
|
-
assert_equal 20, m.hi("three")
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
475
|
-
def test_arg_matching_with_regex_matching_non_string
|
476
|
-
FlexMock.use do |m|
|
477
|
-
m.should_receive(:hi).with(/1/).returns(10)
|
478
|
-
assert_equal 10, m.hi(319)
|
479
|
-
end
|
480
|
-
end
|
481
|
-
|
482
|
-
def test_arg_matching_with_class
|
483
|
-
FlexMock.use do |m|
|
484
|
-
m.should_receive(:hi).with(Fixnum).returns(10)
|
485
|
-
m.should_receive(:hi).with(Object).returns(20)
|
486
|
-
|
487
|
-
assert_equal 10, m.hi(319)
|
488
|
-
assert_equal 10, m.hi(Fixnum)
|
489
|
-
assert_equal 20, m.hi("hi")
|
490
|
-
end
|
491
|
-
end
|
492
|
-
|
493
|
-
def test_arg_matching_with_no_match
|
494
|
-
FlexMock.use do |m|
|
495
|
-
m.should_receive(:hi).with(1).returns(10)
|
496
|
-
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
497
|
-
m.hi(2)
|
498
|
-
}
|
499
|
-
end
|
500
|
-
end
|
501
|
-
|
502
|
-
def test_arg_matching_with_string_doesnt_over_match
|
503
|
-
FlexMock.use do |m|
|
504
|
-
m.should_receive(:hi).with(String).returns(20)
|
505
|
-
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
506
|
-
m.hi(1.0)
|
507
|
-
}
|
508
|
-
end
|
509
|
-
end
|
510
|
-
|
511
|
-
def test_block_arg_given_to_no_args
|
512
|
-
FlexMock.use do |m|
|
513
|
-
m.should_receive(:hi).with_no_args.returns(20)
|
514
|
-
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
515
|
-
m.hi { 1 }
|
516
|
-
}
|
517
|
-
end
|
518
|
-
end
|
519
|
-
|
520
|
-
def test_block_arg_given_to_matching_proc
|
521
|
-
FlexMock.use do |m|
|
522
|
-
arg = nil
|
523
|
-
m.should_receive(:hi).with(Proc).once.
|
524
|
-
and_return { |block| arg = block; block.call }
|
525
|
-
result = m.hi { 1 }
|
526
|
-
assert_equal 1, arg.call
|
527
|
-
assert_equal 1, result
|
528
|
-
end
|
529
|
-
end
|
530
|
-
|
531
|
-
def test_arg_matching_precedence_when_best_first
|
532
|
-
FlexMock.use("greeter") do |m|
|
533
|
-
m.should_receive(:hi).with(1).once
|
534
|
-
m.should_receive(:hi).with(FlexMock.any).never
|
535
|
-
m.hi(1)
|
536
|
-
end
|
537
|
-
end
|
538
|
-
|
539
|
-
def test_arg_matching_precedence_when_best_last_but_still_matches_first
|
540
|
-
FlexMock.use("greeter") do |m|
|
541
|
-
m.should_receive(:hi).with(FlexMock.any).once
|
542
|
-
m.should_receive(:hi).with(1).never
|
543
|
-
m.hi(1)
|
544
|
-
end
|
545
|
-
end
|
546
|
-
|
547
|
-
def test_never_and_never_called
|
548
|
-
FlexMock.use do |m|
|
549
|
-
m.should_receive(:hi).with(1).never
|
550
|
-
end
|
551
|
-
end
|
552
|
-
|
553
|
-
def test_never_and_called_once
|
554
|
-
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :deep => true, :line => __LINE__+2) do
|
555
|
-
FlexMock.use do |m|
|
556
|
-
m.should_receive(:hi).with(1).never
|
557
|
-
m.hi(1)
|
558
|
-
end
|
559
|
-
end
|
560
|
-
end
|
561
|
-
|
562
|
-
def test_once_called_once
|
563
|
-
FlexMock.use do |m|
|
564
|
-
m.should_receive(:hi).with(1).returns(10).once
|
565
|
-
m.hi(1)
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
def test_once_but_never_called
|
570
|
-
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
571
|
-
FlexMock.use do |m|
|
572
|
-
m.should_receive(:hi).with(1).returns(10).once
|
573
|
-
end
|
574
|
-
end
|
575
|
-
end
|
576
|
-
|
577
|
-
def test_once_but_called_twice
|
578
|
-
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
579
|
-
FlexMock.use do |m|
|
580
|
-
m.should_receive(:hi).with(1).returns(10).once
|
581
|
-
m.hi(1)
|
582
|
-
m.hi(1)
|
583
|
-
end
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
|
-
def test_twice_and_called_twice
|
588
|
-
FlexMock.use do |m|
|
589
|
-
m.should_receive(:hi).with(1).returns(10).twice
|
590
|
-
m.hi(1)
|
591
|
-
m.hi(1)
|
592
|
-
end
|
593
|
-
end
|
594
|
-
|
595
|
-
def test_zero_or_more_called_zero
|
596
|
-
FlexMock.use do |m|
|
597
|
-
m.should_receive(:hi).zero_or_more_times
|
598
|
-
end
|
599
|
-
end
|
600
|
-
|
601
|
-
def test_zero_or_more_called_once
|
602
|
-
FlexMock.use do |m|
|
603
|
-
m.should_receive(:hi).zero_or_more_times
|
604
|
-
m.hi
|
605
|
-
end
|
606
|
-
end
|
607
|
-
|
608
|
-
def test_zero_or_more_called_100
|
609
|
-
FlexMock.use do |m|
|
610
|
-
m.should_receive(:hi).zero_or_more_times
|
611
|
-
100.times { m.hi }
|
612
|
-
end
|
613
|
-
end
|
614
|
-
|
615
|
-
def test_times
|
616
|
-
FlexMock.use do |m|
|
617
|
-
m.should_receive(:hi).with(1).returns(10).times(10)
|
618
|
-
10.times { m.hi(1) }
|
619
|
-
end
|
620
|
-
end
|
621
|
-
|
622
|
-
def test_at_least_called_once
|
623
|
-
FlexMock.use do |m|
|
624
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once
|
625
|
-
m.hi(1)
|
626
|
-
end
|
627
|
-
end
|
628
|
-
|
629
|
-
def test_at_least_but_never_called
|
630
|
-
assert_mock_failure(:message =>AT_LEAST_ERROR_MESSAGE, :line => __LINE__+2) do
|
631
|
-
FlexMock.use do |m|
|
632
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once
|
633
|
-
end
|
634
|
-
end
|
635
|
-
end
|
636
|
-
|
637
|
-
def test_at_least_once_but_called_twice
|
638
|
-
FlexMock.use do |m|
|
639
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once
|
640
|
-
m.hi(1)
|
641
|
-
m.hi(1)
|
642
|
-
end
|
643
|
-
end
|
644
|
-
|
645
|
-
def test_at_least_and_exact
|
646
|
-
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
647
|
-
FlexMock.use do |m|
|
648
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once.once
|
649
|
-
m.hi(1)
|
650
|
-
m.hi(1)
|
651
|
-
end
|
652
|
-
end
|
653
|
-
end
|
654
|
-
|
655
|
-
def test_at_most_but_never_called
|
656
|
-
FlexMock.use do |m|
|
657
|
-
m.should_receive(:hi).with(1).returns(10).at_most.once
|
658
|
-
end
|
659
|
-
end
|
660
|
-
|
661
|
-
def test_at_most_called_once
|
662
|
-
FlexMock.use do |m|
|
663
|
-
m.should_receive(:hi).with(1).returns(10).at_most.once
|
664
|
-
m.hi(1)
|
665
|
-
end
|
666
|
-
end
|
667
|
-
|
668
|
-
def test_at_most_called_twice
|
669
|
-
ex = assert_mock_failure(:message =>AT_MOST_ERROR_MESSAGE, :line => __LINE__+2) do
|
670
|
-
FlexMock.use do |m|
|
671
|
-
m.should_receive(:hi).with(1).returns(10).at_most.once
|
672
|
-
m.hi(1)
|
673
|
-
m.hi(1)
|
674
|
-
end
|
675
|
-
end
|
676
|
-
assert_match(/at most 1/i, ex.message)
|
677
|
-
end
|
678
|
-
|
679
|
-
def test_at_most_and_at_least_called_never
|
680
|
-
ex = assert_mock_failure(:message =>AT_LEAST_ERROR_MESSAGE, :line => __LINE__+2) do
|
681
|
-
FlexMock.use do |m|
|
682
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
683
|
-
end
|
684
|
-
end
|
685
|
-
assert_match(/at least 1/i, ex.message)
|
686
|
-
end
|
687
|
-
|
688
|
-
def test_at_most_and_at_least_called_once
|
689
|
-
FlexMock.use do |m|
|
690
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
691
|
-
m.hi(1)
|
692
|
-
end
|
693
|
-
end
|
694
|
-
|
695
|
-
def test_at_most_and_at_least_called_twice
|
696
|
-
FlexMock.use do |m|
|
697
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
698
|
-
m.hi(1)
|
699
|
-
m.hi(1)
|
700
|
-
end
|
701
|
-
end
|
702
|
-
|
703
|
-
def test_at_most_and_at_least_called_three_times
|
704
|
-
assert_mock_failure(:message =>AT_MOST_ERROR_MESSAGE, :line => __LINE__+2) do
|
705
|
-
FlexMock.use do |m|
|
706
|
-
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
707
|
-
m.hi(1)
|
708
|
-
m.hi(1)
|
709
|
-
m.hi(1)
|
710
|
-
end
|
711
|
-
end
|
712
|
-
end
|
713
|
-
|
714
|
-
def test_call_counts_only_apply_to_matching_args
|
715
|
-
FlexMock.use do |m|
|
716
|
-
m.should_receive(:hi).with(1).once
|
717
|
-
m.should_receive(:hi).with(2).twice
|
718
|
-
m.should_receive(:hi).with(3)
|
719
|
-
m.hi(1)
|
720
|
-
m.hi(2)
|
721
|
-
m.hi(2)
|
722
|
-
20.times { m.hi(3) }
|
723
|
-
end
|
724
|
-
end
|
725
|
-
|
726
|
-
def test_call_counts_only_apply_to_matching_args_with_mismatch
|
727
|
-
ex = assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+3) do
|
728
|
-
FlexMock.use do |m|
|
729
|
-
m.should_receive(:hi).with(1).once
|
730
|
-
m.should_receive(:hi).with(2).twice
|
731
|
-
m.should_receive(:hi).with(3)
|
732
|
-
m.should_receive(:lo)
|
733
|
-
m.hi(1)
|
734
|
-
m.hi(2)
|
735
|
-
m.lo
|
736
|
-
20.times { m.hi(3) }
|
737
|
-
end
|
738
|
-
end
|
739
|
-
assert_match(/hi\(2\)/, ex.message)
|
740
|
-
end
|
741
|
-
|
742
|
-
def test_ordered_calls_in_order_will_pass
|
743
|
-
FlexMock.use 'm' do |m|
|
744
|
-
m.should_receive(:hi).ordered
|
745
|
-
m.should_receive(:lo).ordered
|
746
|
-
|
747
|
-
m.hi
|
748
|
-
m.lo
|
749
|
-
end
|
750
|
-
end
|
751
|
-
|
752
|
-
def test_ordered_calls_out_of_order_will_fail
|
753
|
-
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
754
|
-
FlexMock.use 'm' do |m|
|
755
|
-
m.should_receive(:hi).ordered
|
756
|
-
m.should_receive(:lo).ordered
|
757
|
-
|
758
|
-
m.lo
|
759
|
-
m.hi
|
760
|
-
end
|
761
|
-
end
|
762
|
-
end
|
763
|
-
|
764
|
-
def test_order_calls_with_different_arg_lists_and_in_order_will_pass
|
765
|
-
FlexMock.use 'm' do |m|
|
766
|
-
m.should_receive(:hi).with("one").ordered
|
767
|
-
m.should_receive(:hi).with("two").ordered
|
768
|
-
|
769
|
-
m.hi("one")
|
770
|
-
m.hi("two")
|
771
|
-
end
|
772
|
-
end
|
773
|
-
|
774
|
-
def test_order_calls_with_different_arg_lists_and_out_of_order_will_fail
|
775
|
-
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
776
|
-
FlexMock.use 'm' do |m|
|
777
|
-
m.should_receive(:hi).with("one").ordered
|
778
|
-
m.should_receive(:hi).with("two").ordered
|
779
|
-
|
780
|
-
m.hi("two")
|
781
|
-
m.hi("one")
|
782
|
-
end
|
783
|
-
end
|
784
|
-
end
|
785
|
-
|
786
|
-
def test_unordered_calls_do_not_effect_ordered_testing
|
787
|
-
FlexMock.use 'm' do |m|
|
788
|
-
m.should_receive(:blah)
|
789
|
-
m.should_receive(:hi).ordered
|
790
|
-
m.should_receive(:lo).ordered
|
791
|
-
|
792
|
-
m.blah
|
793
|
-
m.hi
|
794
|
-
m.blah
|
795
|
-
m.lo
|
796
|
-
m.blah
|
797
|
-
end
|
798
|
-
end
|
799
|
-
|
800
|
-
def test_ordered_with_multiple_calls_will_pass
|
801
|
-
FlexMock.use 'm' do |m|
|
802
|
-
m.should_receive(:hi).ordered
|
803
|
-
m.should_receive(:lo).ordered
|
804
|
-
|
805
|
-
m.hi
|
806
|
-
m.hi
|
807
|
-
m.lo
|
808
|
-
m.lo
|
809
|
-
end
|
810
|
-
end
|
811
|
-
|
812
|
-
def test_grouped_ordering_with_numbers
|
813
|
-
FlexMock.use 'm' do |m|
|
814
|
-
m.should_receive(:start).ordered(1)
|
815
|
-
m.should_receive(:flip).ordered(2)
|
816
|
-
m.should_receive(:flop).ordered(2)
|
817
|
-
m.should_receive(:final).ordered
|
818
|
-
|
819
|
-
m.start
|
820
|
-
m.flop
|
821
|
-
m.flip
|
822
|
-
m.flop
|
823
|
-
m.final
|
824
|
-
end
|
825
|
-
end
|
826
|
-
|
827
|
-
def test_grouped_ordering_with_symbols
|
828
|
-
FlexMock.use 'm' do |m|
|
829
|
-
m.should_receive(:start).ordered(:start_group)
|
830
|
-
m.should_receive(:flip).ordered(:flip_flop_group)
|
831
|
-
m.should_receive(:flop).ordered(:flip_flop_group)
|
832
|
-
m.should_receive(:final).ordered
|
833
|
-
|
834
|
-
m.start
|
835
|
-
m.flop
|
836
|
-
m.flip
|
837
|
-
m.flop
|
838
|
-
m.final
|
839
|
-
end
|
840
|
-
end
|
841
|
-
|
842
|
-
def test_explicit_ordering_mixed_with_implicit_ordering_should_not_overlap
|
843
|
-
FlexMock.use 'm' do |m|
|
844
|
-
xstart = m.should_receive(:start).ordered
|
845
|
-
xmid = m.should_receive(:mid).ordered(:group_name)
|
846
|
-
xend = m.should_receive(:end).ordered
|
847
|
-
assert xstart.order_number < xmid.order_number
|
848
|
-
assert xmid.order_number < xend.order_number
|
849
|
-
end
|
850
|
-
end
|
851
|
-
|
852
|
-
def test_explicit_ordering_with_explicit_misorders
|
853
|
-
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
854
|
-
FlexMock.use 'm' do |m|
|
855
|
-
m.should_receive(:hi).ordered(:first_group)
|
856
|
-
m.should_receive(:lo).ordered(:second_group)
|
857
|
-
|
858
|
-
m.lo
|
859
|
-
m.hi
|
860
|
-
end
|
861
|
-
end
|
862
|
-
# TODO: It would be nice to get the group names in the error message.
|
863
|
-
# assert_match /first_group/, ex.message
|
864
|
-
# assert_match /second_group/, ex.message
|
865
|
-
end
|
866
|
-
|
867
|
-
# Test submitted by Mikael Pahmp to correct expectation matching.
|
868
|
-
def test_ordering_with_explicit_no_args_matches_correctly
|
869
|
-
FlexMock.use("m") do |m|
|
870
|
-
m.should_receive(:foo).with_no_args.once.ordered
|
871
|
-
m.should_receive(:bar).with_no_args.once.ordered
|
872
|
-
m.should_receive(:foo).with_no_args.once.ordered
|
873
|
-
m.foo
|
874
|
-
m.bar
|
875
|
-
m.foo
|
876
|
-
end
|
877
|
-
end
|
878
|
-
|
879
|
-
# Test submitted by Mikael Pahmp to correct expectation matching.
|
880
|
-
def test_ordering_with_any_arg_matching_correctly_matches
|
881
|
-
FlexMock.use("m") do |m|
|
882
|
-
m.should_receive(:foo).with_any_args.once.ordered
|
883
|
-
m.should_receive(:bar).with_any_args.once.ordered
|
884
|
-
m.should_receive(:foo).with_any_args.once.ordered
|
885
|
-
m.foo
|
886
|
-
m.bar
|
887
|
-
m.foo
|
888
|
-
end
|
889
|
-
end
|
890
|
-
|
891
|
-
def test_ordering_between_mocks_is_not_normally_defined
|
892
|
-
FlexMock.use("x", "y") do |x, y|
|
893
|
-
x.should_receive(:one).ordered
|
894
|
-
y.should_receive(:two).ordered
|
895
|
-
|
896
|
-
assert_nothing_raised do
|
897
|
-
y.two
|
898
|
-
x.one
|
899
|
-
end
|
900
|
-
end
|
901
|
-
end
|
902
|
-
|
903
|
-
def test_ordering_between_mocks_is_honored_for_global_ordering
|
904
|
-
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
905
|
-
FlexMock.use("x", "y") do |x, y|
|
906
|
-
x.should_receive(:one).globally.ordered
|
907
|
-
y.should_receive(:two).globally.ordered
|
908
|
-
|
909
|
-
y.two
|
910
|
-
x.one
|
911
|
-
end
|
912
|
-
end
|
913
|
-
end
|
914
|
-
|
915
|
-
def test_expectation_formating
|
916
|
-
mock = flexmock("m")
|
917
|
-
exp = mock.should_receive(:f).with(1,"two", /^3$/).
|
918
|
-
and_return(0).at_least.once
|
919
|
-
|
920
|
-
mock.f(1, "two", 3)
|
921
|
-
assert_equal 'f(1, "two", /^3$/)', exp.to_s
|
922
|
-
end
|
923
|
-
|
924
|
-
def test_multi_expectation_formatting
|
925
|
-
mock = flexmock("mock")
|
926
|
-
exp = mock.should_receive(:f, :g).with(1)
|
927
|
-
assert_equal "[f(1), g(1)]", exp.to_s
|
928
|
-
end
|
929
|
-
|
930
|
-
def test_explicit_ordering_with_limits_allow_multiple_return_values
|
931
|
-
FlexMock.use('mock') do |m|
|
932
|
-
m.should_receive(:f).with(2).once.and_return { :first_time }
|
933
|
-
m.should_receive(:f).with(2).twice.and_return { :second_or_third_time }
|
934
|
-
m.should_receive(:f).with(2).and_return { :forever }
|
935
|
-
|
936
|
-
assert_equal :first_time, m.f(2)
|
937
|
-
assert_equal :second_or_third_time, m.f(2)
|
938
|
-
assert_equal :second_or_third_time, m.f(2)
|
939
|
-
assert_equal :forever, m.f(2)
|
940
|
-
assert_equal :forever, m.f(2)
|
941
|
-
assert_equal :forever, m.f(2)
|
942
|
-
assert_equal :forever, m.f(2)
|
943
|
-
assert_equal :forever, m.f(2)
|
944
|
-
assert_equal :forever, m.f(2)
|
945
|
-
assert_equal :forever, m.f(2)
|
946
|
-
end
|
947
|
-
end
|
948
|
-
|
949
|
-
def test_global_methods_can_be_mocked
|
950
|
-
m = flexmock("m")
|
951
|
-
m.should_receive(:mock_top_level_function).and_return(:mock)
|
952
|
-
assert_equal :mock, m.mock_top_level_function
|
953
|
-
end
|
954
|
-
|
955
|
-
def test_kernel_methods_can_be_mocked
|
956
|
-
m = flexmock("m")
|
957
|
-
m.should_receive(:mock_kernel_function).and_return(:mock)
|
958
|
-
assert_equal :mock, m.mock_kernel_function
|
959
|
-
end
|
960
|
-
|
961
|
-
def test_undefing_kernel_methods_dont_effect_other_mocks
|
962
|
-
m = flexmock("m")
|
963
|
-
m2 = flexmock("m2")
|
964
|
-
m.should_receive(:mock_kernel_function).and_return(:mock)
|
965
|
-
assert_equal :mock, m.mock_kernel_function
|
966
|
-
assert_equal :mkf, m2.mock_kernel_function
|
967
|
-
end
|
968
|
-
|
969
|
-
def test_expectations_can_by_marked_as_default
|
970
|
-
m = flexmock("m")
|
971
|
-
m.should_receive(:foo).and_return(:bar).by_default
|
972
|
-
assert_equal :bar, m.foo
|
973
|
-
end
|
974
|
-
|
975
|
-
def test_default_expectations_are_search_in_the_proper_order
|
976
|
-
m = flexmock("m")
|
977
|
-
m.should_receive(:foo).with(Integer).once.and_return(:first).by_default
|
978
|
-
m.should_receive(:foo).with(1).and_return(:second).by_default
|
979
|
-
assert_equal :first, m.foo(1)
|
980
|
-
assert_equal :second, m.foo(1)
|
981
|
-
end
|
982
|
-
|
983
|
-
def test_expectations_with_count_constraints_can_by_marked_as_default
|
984
|
-
m = flexmock("m")
|
985
|
-
m.should_receive(:foo).and_return(:bar).once.by_default
|
986
|
-
assert_raise assertion_failed_error do
|
987
|
-
flexmock_teardown
|
988
|
-
end
|
989
|
-
end
|
990
|
-
|
991
|
-
def test_default_expectations_are_overridden_by_later_expectations
|
992
|
-
m = flexmock("m")
|
993
|
-
m.should_receive(:foo).and_return(:bar).once.by_default
|
994
|
-
m.should_receive(:foo).and_return(:bar).twice
|
995
|
-
m.foo
|
996
|
-
m.foo
|
997
|
-
end
|
998
|
-
|
999
|
-
def test_default_expectations_can_be_changed_by_later_expectations
|
1000
|
-
m = flexmock("m")
|
1001
|
-
m.should_receive(:foo).with(1).and_return(:bar).once.by_default
|
1002
|
-
m.should_receive(:foo).with(2).and_return(:baz).once
|
1003
|
-
assert_raise assertion_failed_error do
|
1004
|
-
# This expectation should be hidded by the non-result
|
1005
|
-
m.foo(1)
|
1006
|
-
end
|
1007
|
-
m.foo(2)
|
1008
|
-
end
|
1009
|
-
|
1010
|
-
def test_ordered_default_expectations_can_be_specified
|
1011
|
-
m = flexmock("m")
|
1012
|
-
m.should_receive(:foo).ordered.by_default
|
1013
|
-
m.should_receive(:bar).ordered.by_default
|
1014
|
-
m.bar
|
1015
|
-
assert_raise assertion_failed_error do m.foo end
|
1016
|
-
end
|
1017
|
-
|
1018
|
-
def test_ordered_default_expectations_can_be_overridden
|
1019
|
-
m = flexmock("m")
|
1020
|
-
m.should_receive(:foo).ordered.by_default
|
1021
|
-
m.should_receive(:bar).ordered.by_default
|
1022
|
-
|
1023
|
-
m.should_receive(:bar).ordered
|
1024
|
-
m.should_receive(:foo).ordered
|
1025
|
-
|
1026
|
-
m.bar
|
1027
|
-
m.foo
|
1028
|
-
end
|
1029
|
-
|
1030
|
-
def test_by_default_works_at_mock_level
|
1031
|
-
m = flexmock("m",
|
1032
|
-
:foo => :bar,
|
1033
|
-
:pooh => :bear,
|
1034
|
-
:who => :dey).by_default
|
1035
|
-
m.should_receive(:pooh => :winnie)
|
1036
|
-
assert_equal :bar, m.foo
|
1037
|
-
assert_equal :dey, m.who
|
1038
|
-
assert_equal :winnie, m.pooh
|
1039
|
-
end
|
1040
|
-
|
1041
|
-
def test_by_default_at_mock_level_does_nothing_with_no_expectations
|
1042
|
-
assert_nothing_raised do
|
1043
|
-
flexmock("m").by_default
|
1044
|
-
end
|
1045
|
-
end
|
1046
|
-
|
1047
|
-
def test_partial_mocks_can_have_default_expectations
|
1048
|
-
obj = Object.new
|
1049
|
-
flexmock(obj).should_receive(:foo).and_return(:bar).by_default
|
1050
|
-
assert_equal :bar, obj.foo
|
1051
|
-
end
|
1052
|
-
|
1053
|
-
def test_partial_mocks_can_have_default_expectations_overridden
|
1054
|
-
obj = Object.new
|
1055
|
-
flexmock(obj).should_receive(:foo).and_return(:bar).by_default
|
1056
|
-
flexmock(obj).should_receive(:foo).and_return(:baz)
|
1057
|
-
assert_equal :baz, obj.foo
|
1058
|
-
end
|
1059
|
-
|
1060
|
-
def test_wicked_and_evil_tricks_with_by_default_are_thwarted
|
1061
|
-
mock = flexmock("mock")
|
1062
|
-
exp = mock.should_receive(:foo).and_return(:first).once
|
1063
|
-
mock.should_receive(:foo).and_return(:second)
|
1064
|
-
ex = assert_raise(FlexMock::UsageError) do
|
1065
|
-
exp.by_default
|
1066
|
-
end
|
1067
|
-
assert_match %r(previously defined), ex.message
|
1068
|
-
assert_equal :first, mock.foo
|
1069
|
-
assert_equal :second, mock.foo
|
1070
|
-
end
|
1071
|
-
|
1072
|
-
def test_mocks_can_handle_multi_parameter_respond_tos
|
1073
|
-
mock = flexmock("a mock", :foo => :bar)
|
1074
|
-
assert mock.respond_to?(:foo)
|
1075
|
-
assert mock.respond_to?(:foo, true)
|
1076
|
-
assert mock.respond_to?(:foo, false)
|
1077
|
-
|
1078
|
-
assert ! mock.respond_to?(:phoo)
|
1079
|
-
assert ! mock.respond_to?(:phoo, false)
|
1080
|
-
assert ! mock.respond_to?(:phoo, true)
|
1081
|
-
end
|
1082
|
-
|
1083
|
-
def test_backtraces_point_to_should_receive_line
|
1084
|
-
mock = flexmock("a mock")
|
1085
|
-
file_name_re = Regexp.quote(__FILE__)
|
1086
|
-
line_no = __LINE__ + 1
|
1087
|
-
mock.should_receive(:foo).and_return(:bar).once
|
1088
|
-
begin
|
1089
|
-
flexmock_verify
|
1090
|
-
rescue Exception => ex
|
1091
|
-
exception = ex
|
1092
|
-
end
|
1093
|
-
assert_not_nil exception
|
1094
|
-
assert_match(/#{file_name_re}:#{line_no}/, exception.backtrace.first)
|
1095
|
-
end
|
1096
|
-
|
1097
|
-
def test_can_mock_operators
|
1098
|
-
assert_operator(:[]) { |m| m[1] }
|
1099
|
-
assert_operator(:[]=) { |m| m[1] = :value }
|
1100
|
-
assert_operator(:**) { |m| m ** :x }
|
1101
|
-
assert_operator(:+@) { |m| +m }
|
1102
|
-
assert_operator(:-@) { |m| -m }
|
1103
|
-
assert_operator(:+) { |m| m + :x }
|
1104
|
-
assert_operator(:-) { |m| m - :x }
|
1105
|
-
assert_operator(:*) { |m| m * :x }
|
1106
|
-
assert_operator(:"/") { |m| m / :x }
|
1107
|
-
assert_operator(:%) { |m| m % :x }
|
1108
|
-
assert_operator(:~) { |m| ~m } # )
|
1109
|
-
assert_operator(:&) { |m| m & :x }
|
1110
|
-
assert_operator(:|) { |m| m | :x }
|
1111
|
-
assert_operator(:^) { |m| m ^ :x }
|
1112
|
-
assert_operator(:<) { |m| m < :x }
|
1113
|
-
assert_operator(:>) { |m| m > :x }
|
1114
|
-
assert_operator(:>=) { |m| m >= :x }
|
1115
|
-
assert_operator(:<=) { |m| m <= :x }
|
1116
|
-
assert_operator(:==) { |m| m == :x }
|
1117
|
-
assert_operator(:===) { |m| m === :x }
|
1118
|
-
assert_operator(:<<) { |m| m << :x }
|
1119
|
-
assert_operator(:>>) { |m| m >> :x }
|
1120
|
-
assert_operator(:<=>) { |m| m <=> :x }
|
1121
|
-
assert_operator(:=~) { |m| m =~ :x }
|
1122
|
-
assert_operator(:"`") { |m| m.`("command") } # `
|
1123
|
-
end
|
1124
|
-
|
1125
|
-
private
|
1126
|
-
|
1127
|
-
def assert_operator(op, &block)
|
1128
|
-
m = flexmock("mock")
|
1129
|
-
m.should_receive(op).and_return(:value)
|
1130
|
-
assert_equal :value, block.call(m)
|
1131
|
-
end
|
1132
|
-
|
1133
|
-
end
|
1134
|
-
|
1135
|
-
class TestFlexMockShouldsWithInclude < Test::Unit::TestCase
|
1136
|
-
include FlexMock::ArgumentTypes
|
1137
|
-
def test_include_enables_unqualified_arg_type_references
|
1138
|
-
FlexMock.use("x") do |m|
|
1139
|
-
m.should_receive(:hi).with(any).once
|
1140
|
-
m.hi(1)
|
1141
|
-
end
|
1142
|
-
end
|
1143
|
-
end
|
1144
|
-
|
1145
|
-
class TestFlexMockArgTypesDontLeak < Test::Unit::TestCase
|
1146
|
-
def test_unqualified_arg_type_references_are_undefined_by_default
|
1147
|
-
ex = assert_raise(NameError) do
|
1148
|
-
FlexMock.use("x") do |m|
|
1149
|
-
m.should_receive(:hi).with(any).once
|
1150
|
-
m.hi(1)
|
1151
|
-
end
|
1152
|
-
end
|
1153
|
-
assert_match(/\bany\b/, ex.message, "Error message should mention 'any'")
|
1154
|
-
end
|
1155
|
-
end
|