rspec-expectations 3.5.0.beta1 → 3.5.0.beta2
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Changelog.md +13 -0
- data/lib/rspec/expectations/configuration.rb +41 -4
- data/lib/rspec/expectations/syntax.rb +2 -2
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers/built_in/raise_error.rb +22 -24
- data/lib/rspec/matchers/dsl.rb +13 -6
- metadata +6 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78f6f9a82ac0ab92dc9ad76030846c26f2f614d8
|
4
|
+
data.tar.gz: ff97acba6c6cc32e8390f68e41d4986da7328323
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ed056aabff3b938a44a25e11160435561730eda169a5ef34a2cf0849a08bbf1a4c926e7715529179f2c9c2eb7735972d634d8c2f364fda0b1106945e8d5a442
|
7
|
+
data.tar.gz: 6e4167883a703dcb4486ad9a9061b2c00535d60c96c04d486eccf37beb13ecde7edcf75f422e357d7359afd2064e2d44d552357604aca33ef7720644ed017ce0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Changelog.md
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
### 3.5.0 Development
|
2
2
|
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.5.0.beta1...master)
|
3
3
|
|
4
|
+
Enhancements:
|
5
|
+
|
6
|
+
* Add the ability to raise an error on encountering false positives via
|
7
|
+
`RSpec::Configuration#on_potential_false_positives = :raise`. (Jon Rowe, #900)
|
8
|
+
* When using the custom matcher DSL, support new
|
9
|
+
`notify_expectation_failures: true` option for the `match` method to
|
10
|
+
allow expectation failures to be raised as normal instead of being
|
11
|
+
converted into a `false` return value for `matches?`. (Jon Rowe, #892)
|
12
|
+
|
13
|
+
Bug Fixes:
|
14
|
+
|
15
|
+
* Allow `should` deprecation check to work on `BasicObject`s. (James Coleman, #898)
|
16
|
+
|
4
17
|
### 3.5.0.beta1 / 2016-02-06
|
5
18
|
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v3.4.0...v3.5.0.beta1)
|
6
19
|
|
@@ -18,8 +18,16 @@ module RSpec
|
|
18
18
|
#
|
19
19
|
# RSpec::Expectations.configuration
|
20
20
|
class Configuration
|
21
|
+
# @private
|
22
|
+
FALSE_POSITIVE_BEHAVIOURS =
|
23
|
+
{
|
24
|
+
:warn => lambda { |message| RSpec.warning message },
|
25
|
+
:raise => lambda { |message| raise ArgumentError, message },
|
26
|
+
:nothing => lambda { |_| true },
|
27
|
+
}
|
28
|
+
|
21
29
|
def initialize
|
22
|
-
@
|
30
|
+
@on_potential_false_positives = :warn
|
23
31
|
end
|
24
32
|
|
25
33
|
# Configures the supported syntax.
|
@@ -141,14 +149,43 @@ module RSpec
|
|
141
149
|
# Configures whether RSpec will warn about matcher use which will
|
142
150
|
# potentially cause false positives in tests.
|
143
151
|
#
|
144
|
-
# @param
|
145
|
-
|
152
|
+
# @param [Boolean] boolean
|
153
|
+
def warn_about_potential_false_positives=(boolean)
|
154
|
+
if boolean
|
155
|
+
self.on_potential_false_positives = :warn
|
156
|
+
elsif warn_about_potential_false_positives?
|
157
|
+
self.on_potential_false_positives = :nothing
|
158
|
+
else
|
159
|
+
# no-op, handler is something else
|
160
|
+
end
|
161
|
+
end
|
162
|
+
#
|
163
|
+
# Configures what RSpec will do about matcher use which will
|
164
|
+
# potentially cause false positives in tests.
|
165
|
+
#
|
166
|
+
# @param [Symbol] behavior can be set to :warn, :raise or :nothing
|
167
|
+
def on_potential_false_positives=(behavior)
|
168
|
+
unless FALSE_POSITIVE_BEHAVIOURS.key?(behavior)
|
169
|
+
raise ArgumentError, "Supported values are: #{FALSE_POSITIVE_BEHAVIOURS.keys}"
|
170
|
+
end
|
171
|
+
@on_potential_false_positives = behavior
|
172
|
+
end
|
173
|
+
|
174
|
+
# Indicates what RSpec will do about matcher use which will
|
175
|
+
# potentially cause false positives in tests, generally you want to
|
176
|
+
# avoid such scenarios so this defaults to `true`.
|
177
|
+
attr_reader :on_potential_false_positives
|
146
178
|
|
147
179
|
# Indicates whether RSpec will warn about matcher use which will
|
148
180
|
# potentially cause false positives in tests, generally you want to
|
149
181
|
# avoid such scenarios so this defaults to `true`.
|
150
182
|
def warn_about_potential_false_positives?
|
151
|
-
|
183
|
+
on_potential_false_positives == :warn
|
184
|
+
end
|
185
|
+
|
186
|
+
# @private
|
187
|
+
def false_positives_handler
|
188
|
+
FALSE_POSITIVE_BEHAVIOURS.fetch(@on_potential_false_positives)
|
152
189
|
end
|
153
190
|
end
|
154
191
|
|
@@ -41,12 +41,12 @@ module RSpec
|
|
41
41
|
|
42
42
|
syntax_host.module_exec do
|
43
43
|
def should(matcher=nil, message=nil, &block)
|
44
|
-
::RSpec::Expectations::Syntax.warn_about_should_unless_configured(__method__)
|
44
|
+
::RSpec::Expectations::Syntax.warn_about_should_unless_configured(::Kernel.__method__)
|
45
45
|
::RSpec::Expectations::PositiveExpectationHandler.handle_matcher(self, matcher, message, &block)
|
46
46
|
end
|
47
47
|
|
48
48
|
def should_not(matcher=nil, message=nil, &block)
|
49
|
-
::RSpec::Expectations::Syntax.warn_about_should_unless_configured(__method__)
|
49
|
+
::RSpec::Expectations::Syntax.warn_about_should_unless_configured(::Kernel.__method__)
|
50
50
|
::RSpec::Expectations::NegativeExpectationHandler.handle_matcher(self, matcher, message, &block)
|
51
51
|
end
|
52
52
|
end
|
@@ -12,8 +12,7 @@ module RSpec
|
|
12
12
|
def initialize(expected_error_or_message=nil, expected_message=nil, &block)
|
13
13
|
@block = block
|
14
14
|
@actual_error = nil
|
15
|
-
@warn_about_bare_error =
|
16
|
-
expected_error_or_message.nil?
|
15
|
+
@warn_about_bare_error = expected_error_or_message.nil?
|
17
16
|
|
18
17
|
case expected_error_or_message
|
19
18
|
when nil
|
@@ -133,7 +132,6 @@ module RSpec
|
|
133
132
|
end
|
134
133
|
|
135
134
|
def warn_for_false_positives
|
136
|
-
return unless warn_about_potential_false_positives?
|
137
135
|
expression = if expecting_specific_exception? && @expected_message
|
138
136
|
"`expect { }.not_to raise_error(SpecificErrorClass, message)`"
|
139
137
|
elsif expecting_specific_exception?
|
@@ -147,8 +145,8 @@ module RSpec
|
|
147
145
|
warn_about_negative_false_positive expression
|
148
146
|
end
|
149
147
|
|
150
|
-
def
|
151
|
-
RSpec::Expectations.configuration.
|
148
|
+
def handle_warning(message)
|
149
|
+
RSpec::Expectations.configuration.false_positives_handler.call(message)
|
152
150
|
end
|
153
151
|
|
154
152
|
def warning_about_bare_error
|
@@ -156,28 +154,28 @@ module RSpec
|
|
156
154
|
end
|
157
155
|
|
158
156
|
def warn_about_bare_error
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
157
|
+
handle_warning("Using the `raise_error` matcher without providing a specific " \
|
158
|
+
"error or message risks false positives, since `raise_error` " \
|
159
|
+
"will match when Ruby raises a `NoMethodError`, `NameError` or " \
|
160
|
+
"`ArgumentError`, potentially allowing the expectation to pass " \
|
161
|
+
"without even executing the method you are intending to call. " \
|
162
|
+
"#{warning}"\
|
163
|
+
"Instead consider providing a specific error class or message. " \
|
164
|
+
"This message can be suppressed by setting: " \
|
165
|
+
"`RSpec::Expectations.configuration.on_potential_false" \
|
166
|
+
"_positives = :nothing`")
|
169
167
|
end
|
170
168
|
|
171
169
|
def warn_about_negative_false_positive(expression)
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
170
|
+
handle_warning("Using #{expression} risks false positives, since literally " \
|
171
|
+
"any other error would cause the expectation to pass, " \
|
172
|
+
"including those raised by Ruby (e.g. NoMethodError, NameError " \
|
173
|
+
"and ArgumentError), meaning the code you are intending to test " \
|
174
|
+
"may not even get reached. Instead consider using " \
|
175
|
+
"`expect {}.not_to raise_error` or `expect { }.to raise_error" \
|
176
|
+
"(DifferentSpecificErrorClass)`. This message can be suppressed by " \
|
177
|
+
"setting: `RSpec::Expectations.configuration.on_potential_false" \
|
178
|
+
"_positives = :nothing`")
|
181
179
|
end
|
182
180
|
|
183
181
|
def expected_error
|
data/lib/rspec/matchers/dsl.rb
CHANGED
@@ -55,16 +55,23 @@ module RSpec
|
|
55
55
|
# expect(3).to be_even # fails
|
56
56
|
# expect(4).not_to be_even # fails
|
57
57
|
#
|
58
|
+
# By default the match block will swallow expectation errors (e.g.
|
59
|
+
# caused by using an expectation such as `expect(1).to eq 2`), if you
|
60
|
+
# with to allow these to bubble up, pass in the option
|
61
|
+
# `:notify_expectation_failures => true`.
|
62
|
+
#
|
63
|
+
# @param [Hash] options for defining the behavior of the match block.
|
58
64
|
# @yield [Object] actual the actual value (i.e. the value wrapped by `expect`)
|
59
|
-
def match(&match_block)
|
65
|
+
def match(options={}, &match_block)
|
60
66
|
define_user_override(:matches?, match_block) do |actual|
|
61
|
-
|
62
|
-
|
63
|
-
|
67
|
+
@actual = actual
|
68
|
+
RSpec::Support.with_failure_notifier(RAISE_NOTIFIER) do
|
69
|
+
begin
|
64
70
|
super(*actual_arg_for(match_block))
|
71
|
+
rescue RSpec::Expectations::ExpectationNotMetError
|
72
|
+
raise if options[:notify_expectation_failures]
|
73
|
+
false
|
65
74
|
end
|
66
|
-
rescue RSpec::Expectations::ExpectationNotMetError
|
67
|
-
false
|
68
75
|
end
|
69
76
|
end
|
70
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.0.
|
4
|
+
version: 3.5.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Baker
|
@@ -45,7 +45,7 @@ cert_chain:
|
|
45
45
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
46
46
|
F3MdtaDehhjC
|
47
47
|
-----END CERTIFICATE-----
|
48
|
-
date: 2016-
|
48
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
49
49
|
dependencies:
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: rspec-support
|
@@ -53,14 +53,14 @@ dependencies:
|
|
53
53
|
requirements:
|
54
54
|
- - '='
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 3.5.0.
|
56
|
+
version: 3.5.0.beta2
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - '='
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 3.5.0.
|
63
|
+
version: 3.5.0.beta2
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
65
|
name: diff-lcs
|
66
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,9 +217,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
217
|
version: 1.3.1
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.5.1
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
|
-
summary: rspec-expectations-3.5.0.
|
223
|
+
summary: rspec-expectations-3.5.0.beta2
|
224
224
|
test_files: []
|
225
225
|
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|