rspec-expectations 2.99.0.rc1 → 2.99.0
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 +14 -6
- data/Changelog.md +8 -0
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers/built_in/have.rb +54 -5
- data/spec/rspec/matchers/have_spec.rb +90 -0
- metadata +58 -58
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YjkxOGIyZDlkOGFkYmNlNTNiZTg1NzY3MmVmZDg4ZTE2YTg1NjNlZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MDc2MmQyNGE4OWNlOTdhYTgyMDkyMDQ4MmI2NzQ1ZmRhYjhiYzE4Ng==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ODczNTI0ZjZjOWRhNzQ0Zjc5ZjVjODdjYTc1NzJjYzc1ZmM3NjQ5OGU0NDQ1
|
10
|
+
Y2MzODUzYzk5OTY1ZDI5MmY3OTlhZTRjNzJhZmQ4MzZmMzhkZWUwY2YxNTdl
|
11
|
+
ZmZiMmI1MWUzZThiOThlZWE3NDI3ZDFjMjhjZjBlM2E3OGRhYjM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODJlOTYzOGFkMjRhZTQ1OWQ5YjZhNTk4NWY0ZjZhMzhhMzk2OGRiOGNiYThl
|
14
|
+
YWFiZWNmYWJhNWVhNGJkNWEwYmViYTQ0ZjUwMTU4NmViOGE2YTQwODY3NTkz
|
15
|
+
NDQ5ZTU4M2M0MTBlMzEwMjRiNzM0Nzg3NWQzZDE0NzM3ZmU2Yzc=
|
data/Changelog.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
### 2.99.0 / 2014-06-01
|
2
|
+
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.99.0.rc1...v2.99.0)
|
3
|
+
|
4
|
+
Enhancements:
|
5
|
+
|
6
|
+
* Special case deprecation message for `errors_on` with `rspec-rails` to be more useful.
|
7
|
+
(Aaron Kromer)
|
8
|
+
|
1
9
|
### 2.99.0.rc1 / 2014-05-18
|
2
10
|
[Full Changelog](http://github.com/rspec/rspec-expectations/compare/v2.99.0.beta2...2.99.0.rc1)
|
3
11
|
|
@@ -142,19 +142,37 @@ EOF
|
|
142
142
|
def print_deprecation_message(query_method)
|
143
143
|
deprecation_message = "the rspec-collection_matchers gem "
|
144
144
|
deprecation_message << "or replace your expectation with something like "
|
145
|
-
|
145
|
+
if for_rspec_rails_error_on?
|
146
|
+
# It is supposed to be safe to be able to convert the args array to
|
147
|
+
# a string. This is because the `errors_on` method only takes two
|
148
|
+
# valid arguments: attribute name (symbol/string) and a hash
|
149
|
+
deprecated_call = expectation_expression(query_method, "record")
|
150
|
+
deprecated_call << "(#{errors_on_args_list})" unless @args.empty?
|
151
|
+
|
152
|
+
deprecation_message << <<-EOS.gsub(/^\s+\|/, '')
|
153
|
+
|
|
154
|
+
|
|
155
|
+
| #{record_valid_expression}
|
156
|
+
| expect(#{record_errors_expression(query_method)}).#{expectation_format_method} #{suggested_matcher_expression}
|
157
|
+
|
|
158
|
+
EOS
|
159
|
+
else
|
160
|
+
deprecated_call = expectation_expression(query_method)
|
161
|
+
deprecation_message << "`expect(#{cardinality_expression(query_method)}).#{expectation_format_method} #{suggested_matcher_expression}`"
|
162
|
+
end
|
146
163
|
|
147
|
-
RSpec.deprecate("`#{
|
164
|
+
RSpec.deprecate("`#{deprecated_call}`",
|
148
165
|
:replacement => deprecation_message,
|
149
166
|
:type => "the have matcher"
|
150
167
|
)
|
151
168
|
end
|
152
169
|
|
153
|
-
def expectation_expression(query_method)
|
170
|
+
def expectation_expression(query_method, target = nil)
|
171
|
+
target ||= target_expression
|
154
172
|
if @negative_expectation
|
155
|
-
RSpec::Expectations::Syntax.negative_expression(
|
173
|
+
RSpec::Expectations::Syntax.negative_expression(target, original_matcher_expression)
|
156
174
|
else
|
157
|
-
RSpec::Expectations::Syntax.positive_expression(
|
175
|
+
RSpec::Expectations::Syntax.positive_expression(target, original_matcher_expression)
|
158
176
|
end
|
159
177
|
end
|
160
178
|
|
@@ -218,6 +236,37 @@ EOF
|
|
218
236
|
"have_at_least"
|
219
237
|
end
|
220
238
|
end
|
239
|
+
|
240
|
+
# RSpec Rails `errors_on` specific helpers
|
241
|
+
def for_rspec_rails_error_on?
|
242
|
+
defined?(RSpec::Rails) &&
|
243
|
+
/\.errors?_on\b/ =~ original_matcher_expression
|
244
|
+
end
|
245
|
+
|
246
|
+
def errors_on_args_list
|
247
|
+
list = @args.first.inspect
|
248
|
+
context = validation_context
|
249
|
+
list << ", :context => #{context}" if context
|
250
|
+
list
|
251
|
+
end
|
252
|
+
|
253
|
+
def record_valid_expression
|
254
|
+
expression = "record.valid?"
|
255
|
+
if on_context = validation_context
|
256
|
+
expression << "(#{on_context})"
|
257
|
+
end
|
258
|
+
expression
|
259
|
+
end
|
260
|
+
|
261
|
+
def validation_context
|
262
|
+
return unless Hash === @args.last
|
263
|
+
@args.last[:context].inspect
|
264
|
+
end
|
265
|
+
|
266
|
+
def record_errors_expression(query_method)
|
267
|
+
attribute = (@args.first || :attr)
|
268
|
+
"record.errors[#{attribute.inspect}].#{String(query_method)}"
|
269
|
+
end
|
221
270
|
end
|
222
271
|
end
|
223
272
|
end
|
@@ -532,6 +532,96 @@ EOF
|
|
532
532
|
end
|
533
533
|
end
|
534
534
|
|
535
|
+
context "when the target is a Rails record" do
|
536
|
+
class TheModel
|
537
|
+
attr_reader :errors
|
538
|
+
|
539
|
+
def initialize(errors)
|
540
|
+
@errors = {}
|
541
|
+
@errors[:attr] = Array(errors)
|
542
|
+
end
|
543
|
+
|
544
|
+
def errors_on(attr, _ignore_opts = {})
|
545
|
+
Array(@errors[attr]).flatten.compact
|
546
|
+
end
|
547
|
+
alias_method :error_on, :errors_on
|
548
|
+
end
|
549
|
+
|
550
|
+
let(:message_preamble) do
|
551
|
+
"the rspec-collection_matchers gem " +
|
552
|
+
"or replace your expectation with something like "
|
553
|
+
end
|
554
|
+
|
555
|
+
before do
|
556
|
+
stub_const "RSpec::Rails", Module.new
|
557
|
+
end
|
558
|
+
|
559
|
+
it "prints a specific message for the positive expectation format" do
|
560
|
+
expectation_expression = "expect(record).to have(2).errors_on(:attr)"
|
561
|
+
message = message_preamble + <<-EOS.gsub(/^\s+\|/, '')
|
562
|
+
|
|
563
|
+
|
|
564
|
+
| record.valid?
|
565
|
+
| expect(record.errors[:attr].size).to eq(2)
|
566
|
+
|
|
567
|
+
EOS
|
568
|
+
|
569
|
+
expect_have_deprecation(expectation_expression, message)
|
570
|
+
|
571
|
+
target = TheModel.new(%w(foo bar))
|
572
|
+
expect(target).to have(2).errors_on(:attr)
|
573
|
+
end
|
574
|
+
|
575
|
+
it "prints a specific message for the negative expectation format" do
|
576
|
+
expectation_expression = "expect(record).not_to have(2).errors_on(:attr)"
|
577
|
+
message = message_preamble + <<-EOS.gsub(/^\s+\|/, '')
|
578
|
+
|
|
579
|
+
|
|
580
|
+
| record.valid?
|
581
|
+
| expect(record.errors[:attr].size).to_not eq(2)
|
582
|
+
|
|
583
|
+
EOS
|
584
|
+
|
585
|
+
expect_have_deprecation(expectation_expression, message)
|
586
|
+
|
587
|
+
target = TheModel.new('foo')
|
588
|
+
expect(target).not_to have(2).errors_on(:attr)
|
589
|
+
end
|
590
|
+
|
591
|
+
it "prints message for singular form: `error_on`" do
|
592
|
+
expectation_expression = "expect(record).to have(1).error_on(:attr)"
|
593
|
+
message = message_preamble + <<-EOS.gsub(/^\s+\|/, '')
|
594
|
+
|
|
595
|
+
|
|
596
|
+
| record.valid?
|
597
|
+
| expect(record.errors[:attr].size).to eq(1)
|
598
|
+
|
|
599
|
+
EOS
|
600
|
+
|
601
|
+
expect_have_deprecation(expectation_expression, message)
|
602
|
+
|
603
|
+
target = TheModel.new('foo')
|
604
|
+
expect(target).to have(1).error_on(:attr)
|
605
|
+
end
|
606
|
+
|
607
|
+
it "includes a validation context when provided" do
|
608
|
+
expectation_expression = "expect(record).to have(2).errors_on(:attr, :context => :spec)"
|
609
|
+
message = message_preamble + <<-EOS.gsub(/^\s+\|/, '')
|
610
|
+
|
|
611
|
+
|
|
612
|
+
| record.valid?(:spec)
|
613
|
+
| expect(record.errors[:attr].size).to eq(2)
|
614
|
+
|
|
615
|
+
EOS
|
616
|
+
|
617
|
+
expect_have_deprecation(expectation_expression, message)
|
618
|
+
|
619
|
+
target = TheModel.new(%w(foo bar))
|
620
|
+
options = {:context => :spec, :should_be_ignored => true}
|
621
|
+
expect(target).to have(2).errors_on(:attr, options)
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
535
625
|
context "when the target is an enumerator" do
|
536
626
|
it "prints a specific message for the positive expectation format" do
|
537
627
|
target = %w[a b c].to_enum(:each)
|
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: 2.99.0
|
4
|
+
version: 2.99.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Baker
|
@@ -9,68 +9,68 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: diff-lcs
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ! '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 1.1.3
|
21
|
-
- -
|
21
|
+
- - <
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '2.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ! '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: 1.1.3
|
31
|
-
- -
|
31
|
+
- - <
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rake
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 10.0.0
|
41
41
|
type: :development
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 10.0.0
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: cucumber
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.1.9
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.1.9
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: aruba
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.5'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.5'
|
76
76
|
description: rspec expectations (should[_not] and matchers)
|
@@ -79,46 +79,6 @@ executables: []
|
|
79
79
|
extensions: []
|
80
80
|
extra_rdoc_files: []
|
81
81
|
files:
|
82
|
-
- ".document"
|
83
|
-
- ".yardopts"
|
84
|
-
- Changelog.md
|
85
|
-
- License.txt
|
86
|
-
- README.md
|
87
|
-
- features/README.md
|
88
|
-
- features/Upgrade.md
|
89
|
-
- features/built_in_matchers/README.md
|
90
|
-
- features/built_in_matchers/be.feature
|
91
|
-
- features/built_in_matchers/be_within.feature
|
92
|
-
- features/built_in_matchers/cover.feature
|
93
|
-
- features/built_in_matchers/end_with.feature
|
94
|
-
- features/built_in_matchers/equality.feature
|
95
|
-
- features/built_in_matchers/exist.feature
|
96
|
-
- features/built_in_matchers/expect_change.feature
|
97
|
-
- features/built_in_matchers/expect_error.feature
|
98
|
-
- features/built_in_matchers/have.feature
|
99
|
-
- features/built_in_matchers/include.feature
|
100
|
-
- features/built_in_matchers/match.feature
|
101
|
-
- features/built_in_matchers/operators.feature
|
102
|
-
- features/built_in_matchers/predicates.feature
|
103
|
-
- features/built_in_matchers/respond_to.feature
|
104
|
-
- features/built_in_matchers/satisfy.feature
|
105
|
-
- features/built_in_matchers/start_with.feature
|
106
|
-
- features/built_in_matchers/throw_symbol.feature
|
107
|
-
- features/built_in_matchers/types.feature
|
108
|
-
- features/built_in_matchers/yield.feature
|
109
|
-
- features/custom_matchers/access_running_example.feature
|
110
|
-
- features/custom_matchers/define_diffable_matcher.feature
|
111
|
-
- features/custom_matchers/define_matcher.feature
|
112
|
-
- features/custom_matchers/define_matcher_outside_rspec.feature
|
113
|
-
- features/custom_matchers/define_matcher_with_fluent_interface.feature
|
114
|
-
- features/customized_message.feature
|
115
|
-
- features/diffing.feature
|
116
|
-
- features/implicit_docstrings.feature
|
117
|
-
- features/step_definitions/additional_cli_steps.rb
|
118
|
-
- features/support/env.rb
|
119
|
-
- features/support/rubinius.rb
|
120
|
-
- features/syntax_configuration.feature
|
121
|
-
- features/test_frameworks/test_unit.feature
|
122
82
|
- lib/rspec-expectations.rb
|
123
83
|
- lib/rspec/expectations.rb
|
124
84
|
- lib/rspec/expectations/caller_filter.rb
|
@@ -170,6 +130,46 @@ files:
|
|
170
130
|
- lib/rspec/matchers/operator_matcher.rb
|
171
131
|
- lib/rspec/matchers/pretty.rb
|
172
132
|
- lib/rspec/matchers/test_unit_integration.rb
|
133
|
+
- README.md
|
134
|
+
- License.txt
|
135
|
+
- Changelog.md
|
136
|
+
- .yardopts
|
137
|
+
- .document
|
138
|
+
- features/README.md
|
139
|
+
- features/Upgrade.md
|
140
|
+
- features/built_in_matchers/README.md
|
141
|
+
- features/built_in_matchers/be.feature
|
142
|
+
- features/built_in_matchers/be_within.feature
|
143
|
+
- features/built_in_matchers/cover.feature
|
144
|
+
- features/built_in_matchers/end_with.feature
|
145
|
+
- features/built_in_matchers/equality.feature
|
146
|
+
- features/built_in_matchers/exist.feature
|
147
|
+
- features/built_in_matchers/expect_change.feature
|
148
|
+
- features/built_in_matchers/expect_error.feature
|
149
|
+
- features/built_in_matchers/have.feature
|
150
|
+
- features/built_in_matchers/include.feature
|
151
|
+
- features/built_in_matchers/match.feature
|
152
|
+
- features/built_in_matchers/operators.feature
|
153
|
+
- features/built_in_matchers/predicates.feature
|
154
|
+
- features/built_in_matchers/respond_to.feature
|
155
|
+
- features/built_in_matchers/satisfy.feature
|
156
|
+
- features/built_in_matchers/start_with.feature
|
157
|
+
- features/built_in_matchers/throw_symbol.feature
|
158
|
+
- features/built_in_matchers/types.feature
|
159
|
+
- features/built_in_matchers/yield.feature
|
160
|
+
- features/custom_matchers/access_running_example.feature
|
161
|
+
- features/custom_matchers/define_diffable_matcher.feature
|
162
|
+
- features/custom_matchers/define_matcher.feature
|
163
|
+
- features/custom_matchers/define_matcher_outside_rspec.feature
|
164
|
+
- features/custom_matchers/define_matcher_with_fluent_interface.feature
|
165
|
+
- features/customized_message.feature
|
166
|
+
- features/diffing.feature
|
167
|
+
- features/implicit_docstrings.feature
|
168
|
+
- features/step_definitions/additional_cli_steps.rb
|
169
|
+
- features/support/env.rb
|
170
|
+
- features/support/rubinius.rb
|
171
|
+
- features/syntax_configuration.feature
|
172
|
+
- features/test_frameworks/test_unit.feature
|
173
173
|
- spec/rspec/expectations/configuration_spec.rb
|
174
174
|
- spec/rspec/expectations/differ_spec.rb
|
175
175
|
- spec/rspec/expectations/expectation_target_spec.rb
|
@@ -222,25 +222,25 @@ licenses:
|
|
222
222
|
metadata: {}
|
223
223
|
post_install_message:
|
224
224
|
rdoc_options:
|
225
|
-
-
|
225
|
+
- --charset=UTF-8
|
226
226
|
require_paths:
|
227
227
|
- lib
|
228
228
|
required_ruby_version: !ruby/object:Gem::Requirement
|
229
229
|
requirements:
|
230
|
-
- -
|
230
|
+
- - ! '>='
|
231
231
|
- !ruby/object:Gem::Version
|
232
232
|
version: '0'
|
233
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
234
|
requirements:
|
235
|
-
- -
|
235
|
+
- - ! '>='
|
236
236
|
- !ruby/object:Gem::Version
|
237
|
-
version:
|
237
|
+
version: '0'
|
238
238
|
requirements: []
|
239
239
|
rubyforge_project: rspec
|
240
|
-
rubygems_version: 2.
|
240
|
+
rubygems_version: 2.0.7
|
241
241
|
signing_key:
|
242
242
|
specification_version: 4
|
243
|
-
summary: rspec-expectations-2.99.0
|
243
|
+
summary: rspec-expectations-2.99.0
|
244
244
|
test_files:
|
245
245
|
- features/README.md
|
246
246
|
- features/Upgrade.md
|