rspec-expectations 2.99.0.beta2 → 2.99.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 +7 -0
- data/Changelog.md +55 -32
- data/features/README.md +2 -1
- data/lib/rspec-expectations.rb +5 -0
- data/lib/rspec/expectations.rb +1 -1
- data/lib/rspec/{matchers → expectations}/configuration.rb +5 -3
- data/lib/rspec/expectations/expectation_target.rb +75 -8
- data/lib/rspec/expectations/syntax.rb +3 -5
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +12 -5
- data/lib/rspec/matchers/built_in/base_matcher.rb +11 -3
- data/lib/rspec/matchers/built_in/be.rb +15 -4
- data/lib/rspec/matchers/built_in/be_within.rb +6 -1
- data/lib/rspec/matchers/built_in/change.rb +4 -2
- data/lib/rspec/matchers/built_in/has.rb +38 -6
- data/lib/rspec/matchers/built_in/include.rb +1 -1
- data/lib/rspec/matchers/built_in/match_array.rb +1 -1
- data/lib/rspec/matchers/built_in/raise_error.rb +5 -0
- data/lib/rspec/matchers/built_in/respond_to.rb +5 -0
- data/lib/rspec/matchers/built_in/satisfy.rb +5 -0
- data/lib/rspec/matchers/built_in/throw_symbol.rb +8 -1
- data/lib/rspec/matchers/built_in/yield.rb +21 -1
- data/lib/rspec/matchers/dsl.rb +2 -1
- data/lib/rspec/matchers/matcher.rb +28 -7
- data/lib/rspec/matchers/pretty.rb +4 -0
- data/spec/rspec/{matchers → expectations}/configuration_spec.rb +21 -2
- data/spec/rspec/expectations/expectation_target_spec.rb +62 -0
- data/spec/rspec/expectations/extensions/kernel_spec.rb +4 -0
- data/spec/rspec/expectations_spec.rb +7 -0
- data/spec/rspec/matchers/be_spec.rb +21 -0
- data/spec/rspec/matchers/description_generation_spec.rb +1 -1
- data/spec/rspec/matchers/has_spec.rb +24 -0
- data/spec/rspec/matchers/matcher_spec.rb +52 -0
- data/spec/rspec/matchers/pretty_spec.rb +23 -0
- data/spec/spec_helper.rb +2 -2
- data/spec/support/helper_methods.rb +6 -0
- metadata +64 -75
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6638fae315b3f230a14e4e9a58b845016e1f2cd1
|
4
|
+
data.tar.gz: 7f54fd6c65671705178edae5454c4b7c6712aac2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dc9c8cc98c5d0863ba78a930e14866fed155ff606f83b96eac184ae2beeec7077d5a17613f7a49b79d7809bbf359e49289f6730ab9736ced587338769f5720bc
|
7
|
+
data.tar.gz: 4cef0dcd237b8853ef730e171d333e325d141826f13e4c721a92c5e9bd71a136ea7e375c4d01d808a529dc0d209b710993ed2e949c3a3bc5e4d43b0a082ad511
|
data/Changelog.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
|
+
### 2.99.0.rc1 / 2014-05-18
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.99.0.beta2...2.99.0.rc1)
|
3
|
+
|
4
|
+
Deprecations:
|
5
|
+
|
6
|
+
* Deprecate `matcher_execution_context` attribute on DSL-defined
|
7
|
+
custom matchers. (Myron Marston)
|
8
|
+
* Deprecate `RSpec::Matchers::Pretty#_pretty_print`. (Myron Marston)
|
9
|
+
* Deprecate `RSpec::Matchers::Pretty#expected_to_sentence`. (Myron Marston)
|
10
|
+
* Deprecate `RSpec::Matchers::Configuration` in favor of
|
11
|
+
`RSpec::Expectations::Configuration`. (Myron Marston)
|
12
|
+
* Deprecate `be_xyz` predicate matcher on an object that doesn't respond to
|
13
|
+
`xyz?` or `xyzs?`. (Daniel Fone)
|
14
|
+
* Deprecate `have_xyz` matcher on an object that doesn't respond to `has_xyz?`.
|
15
|
+
(Daniel Fone)
|
16
|
+
* Deprecate `have_xyz` matcher on an object that has a private method `has_xyz?`.
|
17
|
+
(Jon Rowe)
|
18
|
+
* Issue a deprecation warning when a block expectation expression is
|
19
|
+
used with a matcher that doesn't explicitly support block expectations
|
20
|
+
via `supports_block_expectations?`. (Myron Marston)
|
21
|
+
* Deprecate `require 'rspec-expectations'`. Use
|
22
|
+
`require 'rspec/expectations'` instead. (Myron Marston)
|
23
|
+
|
1
24
|
### 2.99.0.beta2 / 2014-02-17
|
2
|
-
[
|
25
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.99.0.beta1...v2.99.0.beta2)
|
3
26
|
|
4
27
|
Deprecations:
|
5
28
|
|
@@ -25,7 +48,7 @@ Deprecations:
|
|
25
48
|
work properly. (Jon Rowe)
|
26
49
|
|
27
50
|
### 2.99.0.beta1 / 2013-11-07
|
28
|
-
[
|
51
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.4...v2.99.0.beta1)
|
29
52
|
|
30
53
|
Deprecations:
|
31
54
|
|
@@ -50,7 +73,7 @@ Deprecations:
|
|
50
73
|
either purpose, but RSpec 3.0 will not.
|
51
74
|
|
52
75
|
### 2.14.5 / 2014-02-01
|
53
|
-
[
|
76
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.4...v2.14.5)
|
54
77
|
|
55
78
|
Bug fixes
|
56
79
|
|
@@ -58,7 +81,7 @@ Bug fixes
|
|
58
81
|
(yujinakayama)
|
59
82
|
|
60
83
|
### 2.14.4 / 2013-11-06
|
61
|
-
[
|
84
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.3...v2.14.4)
|
62
85
|
|
63
86
|
Bug fixes
|
64
87
|
|
@@ -67,7 +90,7 @@ Bug fixes
|
|
67
90
|
back to default internal encoding with replacing characters. (Jon Rowe)
|
68
91
|
|
69
92
|
### 2.14.3 / 2013-09-22
|
70
|
-
[
|
93
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.2...v2.14.3)
|
71
94
|
|
72
95
|
Bug fixes
|
73
96
|
|
@@ -78,7 +101,7 @@ Bug fixes
|
|
78
101
|
`method_missing` (Jon Rowe)
|
79
102
|
|
80
103
|
### 2.14.2 / 2013-08-14
|
81
|
-
[
|
104
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.1...v2.14.2)
|
82
105
|
|
83
106
|
Bug fixes
|
84
107
|
|
@@ -94,7 +117,7 @@ Bug fixes
|
|
94
117
|
`SomeClass === SomeClass` returns false. (Myron Marston)
|
95
118
|
|
96
119
|
### 2.14.1 / 2013-08-08
|
97
|
-
[
|
120
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.0...2.14.1)
|
98
121
|
|
99
122
|
Bug fixes
|
100
123
|
|
@@ -103,7 +126,7 @@ Bug fixes
|
|
103
126
|
errors (Jon Rowe).
|
104
127
|
|
105
128
|
### 2.14.0 / 2013-07-06
|
106
|
-
[
|
129
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.14.0.rc1...v2.14.0)
|
107
130
|
|
108
131
|
Bug fixes
|
109
132
|
|
@@ -115,7 +138,7 @@ Bug fixes
|
|
115
138
|
change...` (Sam Phippen).
|
116
139
|
|
117
140
|
### 2.14.0.rc1 / 2013-05-27
|
118
|
-
[
|
141
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.13.0...v2.14.0.rc1)
|
119
142
|
|
120
143
|
Enhancements
|
121
144
|
|
@@ -149,7 +172,7 @@ Deprecations
|
|
149
172
|
error_ to pass. (Sam Phippen and David Chelimsky)
|
150
173
|
|
151
174
|
### 2.13.0 / 2013-02-23
|
152
|
-
[
|
175
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.12.1...v2.13.0)
|
153
176
|
|
154
177
|
Enhancements
|
155
178
|
|
@@ -180,7 +203,7 @@ Bug fixes
|
|
180
203
|
printed for empty diffs (Myron Marston).
|
181
204
|
|
182
205
|
### 2.12.1 / 2012-12-15
|
183
|
-
[
|
206
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.12.0...v2.12.1)
|
184
207
|
|
185
208
|
Bug fixes
|
186
209
|
|
@@ -192,7 +215,7 @@ Bug fixes
|
|
192
215
|
(Steven Harman)
|
193
216
|
|
194
217
|
### 2.12.0 / 2012-11-12
|
195
|
-
[
|
218
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.11.3...v2.12.0)
|
196
219
|
|
197
220
|
Enhancements
|
198
221
|
|
@@ -215,7 +238,7 @@ Bug fixes
|
|
215
238
|
(Tom Stuart)
|
216
239
|
|
217
240
|
### 2.11.3 / 2012-09-04
|
218
|
-
[
|
241
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.11.2...v2.11.3)
|
219
242
|
|
220
243
|
Bug fixes
|
221
244
|
|
@@ -231,7 +254,7 @@ Bug fixes
|
|
231
254
|
}.to change { user.last_emailed_at }.to be_within(1.second).of(Time.zone.now)
|
232
255
|
|
233
256
|
### 2.11.2 / 2012-07-25
|
234
|
-
[
|
257
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.11.1...v2.11.2)
|
235
258
|
|
236
259
|
Bug fixes
|
237
260
|
|
@@ -240,7 +263,7 @@ Bug fixes
|
|
240
263
|
of the object hierarchy. (Gabriel Gilder)
|
241
264
|
|
242
265
|
### 2.11.1 / 2012-07-08
|
243
|
-
[
|
266
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.11.0...v2.11.1)
|
244
267
|
|
245
268
|
Bug fixes
|
246
269
|
|
@@ -249,7 +272,7 @@ Bug fixes
|
|
249
272
|
* `Time`, for example, is a legit alternative.
|
250
273
|
|
251
274
|
### 2.11.0 / 2012-07-07
|
252
|
-
[
|
275
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.10.0...v2.11.0)
|
253
276
|
|
254
277
|
Enhancements
|
255
278
|
|
@@ -272,7 +295,7 @@ Bug fixes
|
|
272
295
|
Marston)
|
273
296
|
|
274
297
|
### 2.10.0 / 2012-05-03
|
275
|
-
[
|
298
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.9.1...v2.10.0)
|
276
299
|
|
277
300
|
Enhancements
|
278
301
|
|
@@ -290,7 +313,7 @@ Bug fixes
|
|
290
313
|
* Fix message-specific specs to pass on Rubinius (John Firebaugh)
|
291
314
|
|
292
315
|
### 2.9.1 / 2012-04-03
|
293
|
-
[
|
316
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.9.0...v2.9.1)
|
294
317
|
|
295
318
|
Bug fixes
|
296
319
|
|
@@ -301,7 +324,7 @@ Bug fixes
|
|
301
324
|
* Fix using execution context methods in nested DSL matchers (mirasrael)
|
302
325
|
|
303
326
|
### 2.9.0 / 2012-03-17
|
304
|
-
[
|
327
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.8.0...v2.9.0)
|
305
328
|
|
306
329
|
Enhancements
|
307
330
|
|
@@ -321,7 +344,7 @@ Bug fixes
|
|
321
344
|
|
322
345
|
### 2.8.0 / 2012-01-04
|
323
346
|
|
324
|
-
[
|
347
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.8.0.rc2...v2.8.0)
|
325
348
|
|
326
349
|
Enhancements
|
327
350
|
|
@@ -330,13 +353,13 @@ Enhancements
|
|
330
353
|
|
331
354
|
### 2.8.0.rc2 / 2011-12-19
|
332
355
|
|
333
|
-
[
|
356
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.8.0.rc1...v2.8.0.rc2)
|
334
357
|
|
335
358
|
No changes for this release. Just releasing with the other rspec gems.
|
336
359
|
|
337
360
|
### 2.8.0.rc1 / 2011-11-06
|
338
361
|
|
339
|
-
[
|
362
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.7.0...v2.8.0.rc1)
|
340
363
|
|
341
364
|
Enhancements
|
342
365
|
|
@@ -345,7 +368,7 @@ Enhancements
|
|
345
368
|
|
346
369
|
### 2.7.0 / 2011-10-16
|
347
370
|
|
348
|
-
[
|
371
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.6.0...v2.7.0)
|
349
372
|
|
350
373
|
Enhancements
|
351
374
|
|
@@ -363,7 +386,7 @@ Bug fixes
|
|
363
386
|
|
364
387
|
### 2.6.0 / 2011-05-12
|
365
388
|
|
366
|
-
[
|
389
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.5.0...v2.6.0)
|
367
390
|
|
368
391
|
Enhancements
|
369
392
|
|
@@ -381,7 +404,7 @@ Bug fixes
|
|
381
404
|
|
382
405
|
### 2.5.0 / 2011-02-05
|
383
406
|
|
384
|
-
[
|
407
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.4.0...v2.5.0)
|
385
408
|
|
386
409
|
Enhancements
|
387
410
|
|
@@ -394,7 +417,7 @@ Documentation
|
|
394
417
|
|
395
418
|
### 2.4.0 / 2011-01-02
|
396
419
|
|
397
|
-
[
|
420
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.3.0...v2.4.0)
|
398
421
|
|
399
422
|
No functional changes in this release, which was made to align with the
|
400
423
|
rspec-core-2.4.0 release.
|
@@ -405,7 +428,7 @@ Enhancements
|
|
405
428
|
|
406
429
|
### 2.3.0 / 2010-12-12
|
407
430
|
|
408
|
-
[
|
431
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.2.1...v2.3.0)
|
409
432
|
|
410
433
|
Enhancements
|
411
434
|
|
@@ -413,11 +436,11 @@ Enhancements
|
|
413
436
|
|
414
437
|
### 2.2.0 / 2010-11-28
|
415
438
|
|
416
|
-
[
|
439
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.1.0...v2.2.0)
|
417
440
|
|
418
441
|
### 2.1.0 / 2010-11-07
|
419
442
|
|
420
|
-
[
|
443
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.1...v2.1.0)
|
421
444
|
|
422
445
|
Enhancements
|
423
446
|
|
@@ -436,7 +459,7 @@ Bug fixes
|
|
436
459
|
|
437
460
|
### 2.0.0 / 2010-10-10
|
438
461
|
|
439
|
-
[
|
462
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.0.rc...v2.0.0)
|
440
463
|
|
441
464
|
Enhancements
|
442
465
|
|
@@ -451,7 +474,7 @@ Bug fixes
|
|
451
474
|
|
452
475
|
### 2.0.0.rc / 2010-10-05
|
453
476
|
|
454
|
-
[
|
477
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.0.beta.22...v2.0.0.rc)
|
455
478
|
|
456
479
|
Enhancements
|
457
480
|
|
@@ -464,7 +487,7 @@ Bug fixes
|
|
464
487
|
|
465
488
|
### 2.0.0.beta.22 / 2010-09-12
|
466
489
|
|
467
|
-
[
|
490
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.0.0.beta.20...v2.0.0.beta.22)
|
468
491
|
|
469
492
|
Enhancements
|
470
493
|
|
data/features/README.md
CHANGED
@@ -23,7 +23,7 @@ Note: You can also use `expect(..).to_not` instead of `expect(..).not_to`.
|
|
23
23
|
|
24
24
|
## What is a matcher?
|
25
25
|
|
26
|
-
A
|
26
|
+
A matcher is any object that responds to the following methods:
|
27
27
|
|
28
28
|
matches?(actual)
|
29
29
|
failure_message_for_should
|
@@ -33,6 +33,7 @@ These methods are also part of the matcher protocol, but are optional:
|
|
33
33
|
does_not_match?(actual)
|
34
34
|
failure_message_for_should_not
|
35
35
|
description
|
36
|
+
supports_block_expectations?
|
36
37
|
|
37
38
|
RSpec ships with a number of built-in matchers and a DSL for writing custom
|
38
39
|
matchers.
|
data/lib/rspec-expectations.rb
CHANGED
data/lib/rspec/expectations.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rspec/expectations/extensions'
|
2
2
|
require 'rspec/matchers'
|
3
3
|
require 'rspec/expectations/expectation_target'
|
4
|
-
require 'rspec/
|
4
|
+
require 'rspec/expectations/configuration'
|
5
5
|
require 'rspec/expectations/fail_with'
|
6
6
|
require 'rspec/expectations/errors'
|
7
7
|
require 'rspec/expectations/deprecation'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rspec/expectations/syntax'
|
2
2
|
|
3
3
|
module RSpec
|
4
|
-
module
|
4
|
+
module Expectations
|
5
5
|
# Provides configuration options for rspec-expectations.
|
6
6
|
class Configuration
|
7
7
|
# Configures the supported syntax.
|
@@ -94,11 +94,13 @@ module RSpec
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
97
|
+
end
|
97
98
|
|
99
|
+
module Matchers
|
98
100
|
# The configuration object
|
99
|
-
# @return [RSpec::
|
101
|
+
# @return [RSpec::Expectations::Configuration] the configuration object
|
100
102
|
def self.configuration
|
101
|
-
@configuration ||= Configuration.new
|
103
|
+
@configuration ||= Expectations::Configuration.new
|
102
104
|
end
|
103
105
|
|
104
106
|
# set default syntax
|
@@ -1,23 +1,48 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Expectations
|
3
3
|
# Wraps the target of an expectation.
|
4
|
+
#
|
4
5
|
# @example
|
5
|
-
# expect(something)
|
6
|
+
# expect(something) # => ExpectationTarget wrapping something
|
7
|
+
# expect { do_something } # => ExpectationTarget wrapping the block
|
6
8
|
#
|
7
9
|
# # used with `to`
|
8
10
|
# expect(actual).to eq(3)
|
9
11
|
#
|
10
12
|
# # with `not_to`
|
11
13
|
# expect(actual).not_to eq(3)
|
14
|
+
#
|
15
|
+
# @note `ExpectationTarget` is not intended to be instantiated
|
16
|
+
# directly by users. Use `expect` instead.
|
12
17
|
class ExpectationTarget
|
13
18
|
class << self
|
14
19
|
attr_accessor :deprecated_should_enabled
|
15
20
|
alias deprecated_should_enabled? deprecated_should_enabled
|
16
21
|
end
|
17
22
|
|
23
|
+
# @private
|
24
|
+
# Used as a sentinel value to be able to tell when the user
|
25
|
+
# did not pass an argument. We can't use `nil` for that because
|
26
|
+
# `nil` is a valid value to pass.
|
27
|
+
UndefinedValue = Module.new
|
28
|
+
|
18
29
|
# @api private
|
19
|
-
def initialize(
|
20
|
-
@target =
|
30
|
+
def initialize(value)
|
31
|
+
@target = value
|
32
|
+
end
|
33
|
+
|
34
|
+
# @private
|
35
|
+
def self.for(value, block)
|
36
|
+
if UndefinedValue.equal?(value)
|
37
|
+
unless block
|
38
|
+
raise ArgumentError, "You must pass either an argument or a block to `expect`."
|
39
|
+
end
|
40
|
+
BlockExpectationTarget.new(block)
|
41
|
+
elsif block
|
42
|
+
raise ArgumentError, "You cannot pass both an argument and a block to `expect`."
|
43
|
+
else
|
44
|
+
new(value)
|
45
|
+
end
|
21
46
|
end
|
22
47
|
|
23
48
|
# Runs the given expectation, passing if `matcher` returns true.
|
@@ -30,7 +55,7 @@ module RSpec
|
|
30
55
|
# @return [Boolean] true if the expectation succeeds (else raises)
|
31
56
|
# @see RSpec::Matchers
|
32
57
|
def to(matcher=nil, message=nil, &block)
|
33
|
-
prevent_operator_matchers(:to
|
58
|
+
prevent_operator_matchers(:to) unless matcher
|
34
59
|
RSpec::Expectations::PositiveExpectationHandler.handle_matcher(@target, matcher, message, &block)
|
35
60
|
end
|
36
61
|
|
@@ -43,7 +68,7 @@ module RSpec
|
|
43
68
|
# @return [Boolean] false if the negative expectation succeeds (else raises)
|
44
69
|
# @see RSpec::Matchers
|
45
70
|
def not_to(matcher=nil, message=nil, &block)
|
46
|
-
prevent_operator_matchers(:not_to
|
71
|
+
prevent_operator_matchers(:not_to) unless matcher
|
47
72
|
RSpec::Expectations::NegativeExpectationHandler.handle_matcher(@target, matcher, message, &block)
|
48
73
|
end
|
49
74
|
alias to_not not_to
|
@@ -75,13 +100,55 @@ module RSpec
|
|
75
100
|
|
76
101
|
private
|
77
102
|
|
78
|
-
def prevent_operator_matchers(verb
|
79
|
-
return if matcher
|
80
|
-
|
103
|
+
def prevent_operator_matchers(verb)
|
81
104
|
raise ArgumentError, "The expect syntax does not support operator matchers, " +
|
82
105
|
"so you must pass a matcher to `##{verb}`."
|
83
106
|
end
|
84
107
|
end
|
108
|
+
|
109
|
+
# @private
|
110
|
+
# Validates the provided matcher to ensure it supports block
|
111
|
+
# expectations, in order to avoid user confusion when they
|
112
|
+
# use a block thinking the expectation will be on the return
|
113
|
+
# value of the block rather than the block itself.
|
114
|
+
class BlockExpectationTarget < ExpectationTarget
|
115
|
+
def to(matcher, message=nil, &block)
|
116
|
+
enforce_block_expectation(matcher)
|
117
|
+
super
|
118
|
+
end
|
119
|
+
|
120
|
+
def not_to(matcher, message=nil, &block)
|
121
|
+
enforce_block_expectation(matcher)
|
122
|
+
super
|
123
|
+
end
|
124
|
+
alias to_not not_to
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def enforce_block_expectation(matcher)
|
129
|
+
return if supports_block_expectations?(matcher)
|
130
|
+
|
131
|
+
RSpec.deprecate("Using a matcher in a block expectation expression " +
|
132
|
+
"(e.g. `expect { }.to matcher`) that does not implement " +
|
133
|
+
"`supports_block_expectations?`",
|
134
|
+
:replacement => "a value expectation expression " +
|
135
|
+
"(e.g. `expect(value).to matcher`) or implement " +
|
136
|
+
"`supports_block_expectations?` on the provided matcher " +
|
137
|
+
"(#{description_of matcher})")
|
138
|
+
end
|
139
|
+
|
140
|
+
def supports_block_expectations?(matcher)
|
141
|
+
matcher.supports_block_expectations?
|
142
|
+
rescue NoMethodError
|
143
|
+
false
|
144
|
+
end
|
145
|
+
|
146
|
+
def description_of(matcher)
|
147
|
+
matcher.description
|
148
|
+
rescue NoMethodError
|
149
|
+
matcher.inspect
|
150
|
+
end
|
151
|
+
end
|
85
152
|
end
|
86
153
|
end
|
87
154
|
|