rspec-expectations 2.2.0 → 2.3.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.
- data/Gemfile +29 -12
- data/History.markdown +7 -0
- data/README.md +2 -2
- data/features/matchers/include.feature +2 -3
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers/include.rb +3 -0
- data/spec/rspec/matchers/have_spec.rb +288 -298
- data/spec/rspec/matchers/include_spec.rb +28 -22
- data/spec/rspec/matchers/operator_matcher_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -43
- data/spec/support/classes.rb +1 -1
- data/spec/support/matchers.rb +22 -0
- data/spec/support/ruby_version.rb +10 -0
- metadata +13 -7
data/Gemfile
CHANGED
@@ -1,21 +1,38 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
+
### rspec libs
|
3
4
|
%w[rspec-core rspec-expectations rspec-mocks].each do |lib|
|
4
|
-
|
5
|
+
library_path = File.expand_path("../../#{lib}", __FILE__)
|
6
|
+
if File.exist?(library_path)
|
7
|
+
gem lib, :path => library_path
|
8
|
+
else
|
9
|
+
gem lib
|
10
|
+
end
|
5
11
|
end
|
6
12
|
|
7
|
-
|
13
|
+
### dev dependencies
|
14
|
+
gem "rake", "0.8.7"
|
8
15
|
gem "cucumber", "0.9.4"
|
9
16
|
gem "aruba", "0.2.2"
|
10
|
-
gem "
|
11
|
-
gem "
|
12
|
-
gem "
|
13
|
-
gem "
|
14
|
-
gem "
|
17
|
+
gem "rcov", "0.9.9"
|
18
|
+
gem "relish", "0.2.0"
|
19
|
+
gem "guard-rspec", "0.1.9"
|
20
|
+
gem "growl", "1.0.3"
|
21
|
+
gem "ZenTest", "~> 4.4.2"
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
gem
|
19
|
-
|
20
|
-
|
23
|
+
if RUBY_PLATFORM =~ /darwin/
|
24
|
+
gem "autotest-fsevent", "~> 0.2.4"
|
25
|
+
gem "autotest-growl", "~> 0.2.9"
|
26
|
+
end
|
27
|
+
|
28
|
+
gem "ruby-debug", :platforms => :ruby_18
|
29
|
+
gem "ruby-debug19", "~> 0.11.6", :platforms => :ruby_19
|
30
|
+
|
31
|
+
platforms :ruby_18, :ruby_19 do
|
32
|
+
gem "rb-fsevent", "~> 0.3.9"
|
33
|
+
gem "ruby-prof", "~> 0.9.2"
|
34
|
+
end
|
35
|
+
|
36
|
+
platforms :jruby do
|
37
|
+
gem "jruby-openssl"
|
21
38
|
end
|
data/History.markdown
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
## rspec-expectations release history (incomplete)
|
2
2
|
|
3
|
+
### 2.3.0 / 2010-12-12
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-expectations/compare/v2.2.1...v2.3.0)
|
6
|
+
|
7
|
+
* Enhancements
|
8
|
+
* diff strings when include matcher fails (Mike Sassak)
|
9
|
+
|
3
10
|
### 2.2.0 / 2010-11-28
|
4
11
|
|
5
12
|
[full changelog](http://github.com/rspec/rspec-expectations/compare/v2.1.0...v2.2.0)
|
data/README.md
CHANGED
@@ -5,10 +5,10 @@ RSpec::Matchers, a library of standard matchers.
|
|
5
5
|
|
6
6
|
## Documentation
|
7
7
|
|
8
|
-
The [Cucumber features](http://relishapp.com/rspec/rspec-expectations
|
8
|
+
The [Cucumber features](http://relishapp.com/rspec/rspec-expectations)
|
9
9
|
are the most comprehensive and up-to-date docs for end-users.
|
10
10
|
|
11
|
-
The [RDoc](http://rubydoc.info/gems/rspec-expectations/2.
|
11
|
+
The [RDoc](http://rubydoc.info/gems/rspec-expectations/2.3.0/frames) provides
|
12
12
|
additional information for contributors and/or extenders.
|
13
13
|
|
14
14
|
All of the documentation is open source and a work in progress. If you find it
|
@@ -131,6 +131,5 @@ Feature: include matcher
|
|
131
131
|
| expected {:a=>7, :b=>5} to include {:a=>5, :b=>7} |
|
132
132
|
| expected {:a=>7, :b=>5} to include :a and :d |
|
133
133
|
| expected {:a=>7, :b=>5} not to include :a and :d |
|
134
|
-
|
135
|
-
|
136
|
-
|
134
|
+
And the output should match /expected \{:a=>7, :b=>5\} to include \{(?::a=>7, :d=>3)|(?::d=>3, :a=>7)\}/
|
135
|
+
And the output should match /expected \{:a=>7, :b=>5\} not to include \{(?::a=>7, :d=>3)|(?::d=>3, :a=>7)\}/
|
@@ -27,201 +27,201 @@ describe "have matcher" do
|
|
27
27
|
owner
|
28
28
|
end
|
29
29
|
|
30
|
-
describe "should have(n).items" do
|
30
|
+
describe "should have(n).items" do
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
it "converts :no to 0" do
|
39
|
-
owner = create_collection_owner_with(0)
|
40
|
-
owner.should have(:no).items_in_collection_with_length_method
|
41
|
-
owner.should have(:no).items_in_collection_with_size_method
|
42
|
-
end
|
32
|
+
it "passes if target has a collection of items with n members" do
|
33
|
+
owner = create_collection_owner_with(3)
|
34
|
+
owner.should have(3).items_in_collection_with_length_method
|
35
|
+
owner.should have(3).items_in_collection_with_size_method
|
36
|
+
end
|
43
37
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
owner.should have(
|
48
|
-
|
49
|
-
lambda {
|
50
|
-
owner.should have(4).items_in_collection_with_size_method
|
51
|
-
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
52
|
-
end
|
53
|
-
|
54
|
-
it "fails if target has a collection of items with > n members" do
|
55
|
-
owner = create_collection_owner_with(3)
|
56
|
-
lambda {
|
57
|
-
owner.should have(2).items_in_collection_with_length_method
|
58
|
-
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
59
|
-
lambda {
|
60
|
-
owner.should have(2).items_in_collection_with_size_method
|
61
|
-
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
62
|
-
end
|
63
|
-
end
|
38
|
+
it "converts :no to 0" do
|
39
|
+
owner = create_collection_owner_with(0)
|
40
|
+
owner.should have(:no).items_in_collection_with_length_method
|
41
|
+
owner.should have(:no).items_in_collection_with_size_method
|
42
|
+
end
|
64
43
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
44
|
+
it "fails if target has a collection of items with < n members" do
|
45
|
+
owner = create_collection_owner_with(3)
|
46
|
+
lambda {
|
47
|
+
owner.should have(4).items_in_collection_with_length_method
|
48
|
+
}.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
|
49
|
+
lambda {
|
50
|
+
owner.should have(4).items_in_collection_with_size_method
|
51
|
+
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "fails if target has a collection of items with > n members" do
|
55
|
+
owner = create_collection_owner_with(3)
|
56
|
+
lambda {
|
57
|
+
owner.should have(2).items_in_collection_with_length_method
|
58
|
+
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
59
|
+
lambda {
|
60
|
+
owner.should have(2).items_in_collection_with_size_method
|
61
|
+
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
62
|
+
end
|
70
63
|
end
|
71
64
|
|
72
|
-
|
73
|
-
|
74
|
-
it
|
75
|
-
(class << ::ActiveSupport::Inflector; self; end).send :undef_method, :pluralize
|
65
|
+
describe 'should have(1).item when ActiveSupport::Inflector is defined' do
|
66
|
+
|
67
|
+
it 'pluralizes the collection name' do
|
76
68
|
owner = create_collection_owner_with(1)
|
77
|
-
|
69
|
+
owner.should have(1).item
|
78
70
|
end
|
79
71
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
72
|
+
context "when ActiveSupport::Inflector is partially loaded without its inflectors" do
|
73
|
+
|
74
|
+
it "does not pluralize the collection name" do
|
75
|
+
(class << ::ActiveSupport::Inflector; self; end).send :undef_method, :pluralize
|
76
|
+
owner = create_collection_owner_with(1)
|
77
|
+
expect { owner.should have(1).item }.to raise_error(NoMethodError)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
after(:each) do
|
83
|
+
unless @active_support_was_defined
|
84
|
+
Object.__send__ :remove_const, :ActiveSupport
|
85
|
+
end
|
85
86
|
end
|
86
87
|
end
|
87
|
-
end
|
88
88
|
|
89
|
-
describe 'should have(1).item when Inflector is defined' do
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
89
|
+
describe 'should have(1).item when Inflector is defined' do
|
90
|
+
|
91
|
+
before(:each) do
|
92
|
+
if defined?(Inflector)
|
93
|
+
@inflector_was_defined = true
|
94
|
+
else
|
95
|
+
@inflector_was_defined = false
|
96
|
+
class ::Inflector
|
97
|
+
def self.pluralize(string)
|
98
|
+
string.to_s + 's'
|
99
|
+
end
|
99
100
|
end
|
100
101
|
end
|
101
102
|
end
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
owner.should have(1).item
|
107
|
-
end
|
108
|
-
|
109
|
-
after(:each) do
|
110
|
-
unless @inflector_was_defined
|
111
|
-
Object.__send__ :remove_const, :Inflector
|
103
|
+
|
104
|
+
it 'pluralizes the collection name' do
|
105
|
+
owner = create_collection_owner_with(1)
|
106
|
+
owner.should have(1).item
|
112
107
|
end
|
113
|
-
end
|
114
|
-
end
|
115
108
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
def items
|
120
|
-
Object.new
|
109
|
+
after(:each) do
|
110
|
+
unless @inflector_was_defined
|
111
|
+
Object.__send__ :remove_const, :Inflector
|
121
112
|
end
|
122
|
-
end
|
123
|
-
lambda do
|
124
|
-
owner.should have(3).items
|
125
|
-
end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
|
113
|
+
end
|
126
114
|
end
|
127
|
-
end
|
128
115
|
|
129
|
-
describe "
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
owner.should_not have(2).items_in_collection_with_size_method
|
116
|
+
describe "should have(n).items where result responds to items but returns something other than a collection" do
|
117
|
+
it "provides a meaningful error" do
|
118
|
+
owner = Class.new do
|
119
|
+
def items
|
120
|
+
Object.new
|
121
|
+
end
|
122
|
+
end.new
|
123
|
+
lambda do
|
124
|
+
owner.should have(3).items
|
125
|
+
end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
|
126
|
+
end
|
141
127
|
end
|
142
128
|
|
143
|
-
|
144
|
-
owner = create_collection_owner_with(3)
|
145
|
-
lambda {
|
146
|
-
owner.should_not have(3).items_in_collection_with_length_method
|
147
|
-
}.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
|
148
|
-
lambda {
|
149
|
-
owner.should_not have(3).items_in_collection_with_size_method
|
150
|
-
}.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
|
151
|
-
end
|
152
|
-
end
|
129
|
+
describe "should_not have(n).items" do
|
153
130
|
|
154
|
-
|
131
|
+
it "passes if target has a collection of items with < n members" do
|
132
|
+
owner = create_collection_owner_with(3)
|
133
|
+
owner.should_not have(4).items_in_collection_with_length_method
|
134
|
+
owner.should_not have(4).items_in_collection_with_size_method
|
135
|
+
end
|
136
|
+
|
137
|
+
it "passes if target has a collection of items with > n members" do
|
138
|
+
owner = create_collection_owner_with(3)
|
139
|
+
owner.should_not have(2).items_in_collection_with_length_method
|
140
|
+
owner.should_not have(2).items_in_collection_with_size_method
|
141
|
+
end
|
155
142
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
143
|
+
it "fails if target has a collection of items with n members" do
|
144
|
+
owner = create_collection_owner_with(3)
|
145
|
+
lambda {
|
146
|
+
owner.should_not have(3).items_in_collection_with_length_method
|
147
|
+
}.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
|
148
|
+
lambda {
|
149
|
+
owner.should_not have(3).items_in_collection_with_size_method
|
150
|
+
}.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
|
151
|
+
end
|
160
152
|
end
|
161
153
|
|
162
|
-
|
163
|
-
owner = create_collection_owner_with(0)
|
164
|
-
owner.should have_exactly(:no).items_in_collection_with_length_method
|
165
|
-
owner.should have_exactly(:no).items_in_collection_with_size_method
|
166
|
-
end
|
154
|
+
describe "should have_exactly(n).items" do
|
167
155
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
owner.should have_exactly(
|
172
|
-
|
173
|
-
lambda {
|
174
|
-
owner.should have_exactly(4).items_in_collection_with_size_method
|
175
|
-
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
176
|
-
end
|
177
|
-
|
178
|
-
it "fails if target has a collection of items with > n members" do
|
179
|
-
owner = create_collection_owner_with(3)
|
180
|
-
lambda {
|
181
|
-
owner.should have_exactly(2).items_in_collection_with_length_method
|
182
|
-
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
183
|
-
lambda {
|
184
|
-
owner.should have_exactly(2).items_in_collection_with_size_method
|
185
|
-
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
186
|
-
end
|
187
|
-
end
|
156
|
+
it "passes if target has a collection of items with n members" do
|
157
|
+
owner = create_collection_owner_with(3)
|
158
|
+
owner.should have_exactly(3).items_in_collection_with_length_method
|
159
|
+
owner.should have_exactly(3).items_in_collection_with_size_method
|
160
|
+
end
|
188
161
|
|
189
|
-
|
162
|
+
it "converts :no to 0" do
|
163
|
+
owner = create_collection_owner_with(0)
|
164
|
+
owner.should have_exactly(:no).items_in_collection_with_length_method
|
165
|
+
owner.should have_exactly(:no).items_in_collection_with_size_method
|
166
|
+
end
|
190
167
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
168
|
+
it "fails if target has a collection of items with < n members" do
|
169
|
+
owner = create_collection_owner_with(3)
|
170
|
+
lambda {
|
171
|
+
owner.should have_exactly(4).items_in_collection_with_length_method
|
172
|
+
}.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
|
173
|
+
lambda {
|
174
|
+
owner.should have_exactly(4).items_in_collection_with_size_method
|
175
|
+
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
176
|
+
end
|
177
|
+
|
178
|
+
it "fails if target has a collection of items with > n members" do
|
179
|
+
owner = create_collection_owner_with(3)
|
180
|
+
lambda {
|
181
|
+
owner.should have_exactly(2).items_in_collection_with_length_method
|
182
|
+
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
183
|
+
lambda {
|
184
|
+
owner.should have_exactly(2).items_in_collection_with_size_method
|
185
|
+
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
186
|
+
end
|
201
187
|
end
|
202
188
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
owner
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
}.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
|
211
|
-
end
|
212
|
-
|
213
|
-
it "provides educational negative failure messages" do
|
214
|
-
#given
|
215
|
-
owner = create_collection_owner_with(3)
|
216
|
-
length_matcher = have_at_least(3).items_in_collection_with_length_method
|
217
|
-
size_matcher = have_at_least(3).items_in_collection_with_size_method
|
189
|
+
describe "should have_at_least(n).items" do
|
190
|
+
|
191
|
+
it "passes if target has a collection of items with n members" do
|
192
|
+
owner = create_collection_owner_with(3)
|
193
|
+
owner.should have_at_least(3).items_in_collection_with_length_method
|
194
|
+
owner.should have_at_least(3).items_in_collection_with_size_method
|
195
|
+
end
|
218
196
|
|
219
|
-
|
220
|
-
|
221
|
-
|
197
|
+
it "passes if target has a collection of items with > n members" do
|
198
|
+
owner = create_collection_owner_with(3)
|
199
|
+
owner.should have_at_least(2).items_in_collection_with_length_method
|
200
|
+
owner.should have_at_least(2).items_in_collection_with_size_method
|
201
|
+
end
|
202
|
+
|
203
|
+
it "fails if target has a collection of items with < n members" do
|
204
|
+
owner = create_collection_owner_with(3)
|
205
|
+
lambda {
|
206
|
+
owner.should have_at_least(4).items_in_collection_with_length_method
|
207
|
+
}.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
|
208
|
+
lambda {
|
209
|
+
owner.should have_at_least(4).items_in_collection_with_size_method
|
210
|
+
}.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
|
211
|
+
end
|
222
212
|
|
223
|
-
|
224
|
-
|
213
|
+
it "provides educational negative failure messages" do
|
214
|
+
#given
|
215
|
+
owner = create_collection_owner_with(3)
|
216
|
+
length_matcher = have_at_least(3).items_in_collection_with_length_method
|
217
|
+
size_matcher = have_at_least(3).items_in_collection_with_size_method
|
218
|
+
|
219
|
+
#when
|
220
|
+
length_matcher.matches?(owner)
|
221
|
+
size_matcher.matches?(owner)
|
222
|
+
|
223
|
+
#then
|
224
|
+
length_matcher.failure_message_for_should_not.should == <<-EOF
|
225
225
|
Isn't life confusing enough?
|
226
226
|
Instead of having to figure out the meaning of this:
|
227
227
|
should_not have_at_least(3).items_in_collection_with_length_method
|
@@ -229,183 +229,173 @@ We recommend that you use this instead:
|
|
229
229
|
should have_at_most(2).items_in_collection_with_length_method
|
230
230
|
EOF
|
231
231
|
|
232
|
-
|
232
|
+
size_matcher.failure_message_for_should_not.should == <<-EOF
|
233
233
|
Isn't life confusing enough?
|
234
234
|
Instead of having to figure out the meaning of this:
|
235
235
|
should_not have_at_least(3).items_in_collection_with_size_method
|
236
236
|
We recommend that you use this instead:
|
237
237
|
should have_at_most(2).items_in_collection_with_size_method
|
238
238
|
EOF
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
describe "should have_at_most(n).items" do
|
243
|
-
it "passes if target has a collection of items with n members" do
|
244
|
-
owner = create_collection_owner_with(3)
|
245
|
-
owner.should have_at_most(3).items_in_collection_with_length_method
|
246
|
-
owner.should have_at_most(3).items_in_collection_with_size_method
|
239
|
+
end
|
247
240
|
end
|
248
241
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
owner.should have_at_most(
|
253
|
-
|
254
|
-
|
255
|
-
owner.should have_at_most(2).items_in_collection_with_size_method
|
256
|
-
}.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
|
257
|
-
end
|
258
|
-
|
259
|
-
it "passes if target has a collection of items with < n members" do
|
260
|
-
owner = create_collection_owner_with(3)
|
261
|
-
owner.should have_at_most(4).items_in_collection_with_length_method
|
262
|
-
owner.should have_at_most(4).items_in_collection_with_size_method
|
263
|
-
end
|
242
|
+
describe "should have_at_most(n).items" do
|
243
|
+
it "passes if target has a collection of items with n members" do
|
244
|
+
owner = create_collection_owner_with(3)
|
245
|
+
owner.should have_at_most(3).items_in_collection_with_length_method
|
246
|
+
owner.should have_at_most(3).items_in_collection_with_size_method
|
247
|
+
end
|
264
248
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
249
|
+
it "fails if target has a collection of items with > n members" do
|
250
|
+
owner = create_collection_owner_with(3)
|
251
|
+
lambda {
|
252
|
+
owner.should have_at_most(2).items_in_collection_with_length_method
|
253
|
+
}.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
|
254
|
+
lambda {
|
255
|
+
owner.should have_at_most(2).items_in_collection_with_size_method
|
256
|
+
}.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
|
257
|
+
end
|
274
258
|
|
275
|
-
|
276
|
-
|
259
|
+
it "passes if target has a collection of items with < n members" do
|
260
|
+
owner = create_collection_owner_with(3)
|
261
|
+
owner.should have_at_most(4).items_in_collection_with_length_method
|
262
|
+
owner.should have_at_most(4).items_in_collection_with_size_method
|
263
|
+
end
|
264
|
+
|
265
|
+
it "provides educational negative failure messages" do
|
266
|
+
#given
|
267
|
+
owner = create_collection_owner_with(3)
|
268
|
+
length_matcher = have_at_most(3).items_in_collection_with_length_method
|
269
|
+
size_matcher = have_at_most(3).items_in_collection_with_size_method
|
270
|
+
|
271
|
+
#when
|
272
|
+
length_matcher.matches?(owner)
|
273
|
+
size_matcher.matches?(owner)
|
274
|
+
|
275
|
+
#then
|
276
|
+
length_matcher.failure_message_for_should_not.should == <<-EOF
|
277
277
|
Isn't life confusing enough?
|
278
278
|
Instead of having to figure out the meaning of this:
|
279
279
|
should_not have_at_most(3).items_in_collection_with_length_method
|
280
280
|
We recommend that you use this instead:
|
281
281
|
should have_at_least(4).items_in_collection_with_length_method
|
282
282
|
EOF
|
283
|
-
|
284
|
-
|
283
|
+
|
284
|
+
size_matcher.failure_message_for_should_not.should == <<-EOF
|
285
285
|
Isn't life confusing enough?
|
286
286
|
Instead of having to figure out the meaning of this:
|
287
287
|
should_not have_at_most(3).items_in_collection_with_size_method
|
288
288
|
We recommend that you use this instead:
|
289
289
|
should have_at_least(4).items_in_collection_with_size_method
|
290
290
|
EOF
|
291
|
+
end
|
291
292
|
end
|
292
|
-
end
|
293
293
|
|
294
|
-
describe "have(n).items(args, block)" do
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
294
|
+
describe "have(n).items(args, block)" do
|
295
|
+
it "passes args to target" do
|
296
|
+
target = mock("target")
|
297
|
+
target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
|
298
|
+
target.should have(3).items("arg1","arg2")
|
299
|
+
end
|
300
300
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
301
|
+
it "passes block to target" do
|
302
|
+
target = mock("target")
|
303
|
+
block = lambda { 5 }
|
304
|
+
target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
|
305
|
+
target.should have(3).items("arg1","arg2", block)
|
306
|
+
end
|
306
307
|
end
|
307
|
-
end
|
308
308
|
|
309
|
-
describe "have(n).items where target IS a collection" do
|
310
|
-
|
311
|
-
|
312
|
-
|
309
|
+
describe "have(n).items where target IS a collection" do
|
310
|
+
it "references the number of items IN the collection" do
|
311
|
+
[1,2,3].should have(3).items
|
312
|
+
end
|
313
313
|
|
314
|
-
|
315
|
-
|
314
|
+
it "fails when the number of items IN the collection is not as expected" do
|
315
|
+
lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
|
316
|
+
end
|
316
317
|
end
|
317
|
-
end
|
318
318
|
|
319
|
-
describe "have(n).characters where target IS a String" do
|
320
|
-
|
321
|
-
|
322
|
-
|
319
|
+
describe "have(n).characters where target IS a String" do
|
320
|
+
it "passes if the length is correct" do
|
321
|
+
"this string".should have(11).characters
|
322
|
+
end
|
323
323
|
|
324
|
-
|
325
|
-
|
324
|
+
it "fails if the length is incorrect" do
|
325
|
+
lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
|
326
|
+
end
|
326
327
|
end
|
327
|
-
end
|
328
328
|
|
329
|
-
describe "have(n).things on an object which is not a collection nor contains one" do
|
330
|
-
|
331
|
-
|
329
|
+
describe "have(n).things on an object which is not a collection nor contains one" do
|
330
|
+
it "fails" do
|
331
|
+
lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
|
332
|
+
end
|
332
333
|
end
|
333
|
-
end
|
334
334
|
|
335
|
-
describe RSpec::Matchers::Have, "for a collection owner that implements #send" do
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
335
|
+
describe RSpec::Matchers::Have, "for a collection owner that implements #send" do
|
336
|
+
before(:each) do
|
337
|
+
@collection = Object.new
|
338
|
+
def @collection.floozles; [1,2] end
|
339
|
+
def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
|
340
|
+
end
|
341
|
+
|
342
|
+
it "works in the straightforward case" do
|
343
|
+
lambda {
|
344
|
+
@collection.should have(2).floozles
|
345
|
+
}.should_not raise_error
|
346
|
+
end
|
347
347
|
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
348
|
+
it "works when doing automatic pluralization" do
|
349
|
+
lambda {
|
350
|
+
@collection.should have_at_least(1).floozle
|
351
|
+
}.should_not raise_error
|
352
|
+
end
|
353
353
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
354
|
+
it "blows up when the owner doesn't respond to that method" do
|
355
|
+
lambda {
|
356
|
+
@collection.should have(99).problems
|
357
|
+
}.should raise_error(NoMethodError, /problems/)
|
358
|
+
end
|
358
359
|
end
|
359
|
-
end
|
360
360
|
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
with_ruby 1.8 do
|
366
|
-
described_class.private_instance_methods.should include("method_missing")
|
367
|
-
end
|
368
|
-
with_ruby 1.9 do
|
369
|
-
described_class.private_instance_methods.should include(:method_missing)
|
370
|
-
end
|
371
|
-
end
|
361
|
+
describe RSpec::Matchers::Have do
|
362
|
+
it "has method_missing as private" do
|
363
|
+
described_class.private_instance_methods.should include_method(:method_missing)
|
364
|
+
end
|
372
365
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
366
|
+
it "does not respond_to? method_missing (because it's private)" do
|
367
|
+
formatter = described_class.new({ }, StringIO.new)
|
368
|
+
formatter.should_not respond_to(:method_missing)
|
369
|
+
end
|
377
370
|
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
end
|
371
|
+
describe "respond_to?" do
|
372
|
+
before :each do
|
373
|
+
@have = described_class.new(:foo)
|
374
|
+
@a_method_which_have_defines = described_class.instance_methods.first
|
375
|
+
@a_method_which_object_defines = Object.instance_methods.first
|
376
|
+
end
|
377
|
+
|
378
|
+
it "is true for a method which Have defines" do
|
379
|
+
@have.should respond_to(@a_method_which_have_defines)
|
380
|
+
end
|
381
|
+
|
382
|
+
it "is true for a method that it's superclass (Object) defines" do
|
383
|
+
@have.should respond_to(@a_method_which_object_defines)
|
384
|
+
end
|
385
|
+
|
386
|
+
it "is false for a method which neither Object nor nor Have defines" do
|
387
|
+
@have.should_not respond_to(:foo_bar_baz)
|
388
|
+
end
|
389
|
+
|
390
|
+
it "is false if the owner doesn't respond to the method" do
|
391
|
+
have = described_class.new(99)
|
392
|
+
have.should_not respond_to(:problems)
|
393
|
+
end
|
394
|
+
|
395
|
+
it "is true if the owner responds to the method" do
|
396
|
+
have = described_class.new(:a_symbol)
|
397
|
+
have.should respond_to(:to_sym)
|
406
398
|
end
|
407
399
|
end
|
408
400
|
end
|
409
401
|
end
|
410
|
-
|
411
|
-
end
|
@@ -33,7 +33,7 @@ describe "should include(expected)" do
|
|
33
33
|
it "fails if target does not include expected" do
|
34
34
|
lambda {
|
35
35
|
{:key => 'value'}.should include(:other)
|
36
|
-
}.should
|
36
|
+
}.should fail_matching(%Q|expected {:key=>"value"} to include :other|)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -71,7 +71,7 @@ describe "should include(with, multiple, args)" do
|
|
71
71
|
it 'fails if target is missing any item as a key' do
|
72
72
|
lambda {
|
73
73
|
{:key => 'value'}.should include(:key, :other)
|
74
|
-
}.should
|
74
|
+
}.should fail_matching(%Q|expected {:key=>"value"} to include :key and :other|)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
@@ -109,7 +109,7 @@ describe "should_not include(expected)" do
|
|
109
109
|
it "fails if target includes expected key" do
|
110
110
|
lambda {
|
111
111
|
{:key => 'value'}.should_not include(:key)
|
112
|
-
}.should
|
112
|
+
}.should fail_matching(%Q|expected {:key=>"value"} not to include :key|)
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -142,13 +142,13 @@ describe "should_not include(with, multiple, args)" do
|
|
142
142
|
it "fails if the target includes all of the expected keys" do
|
143
143
|
expect {
|
144
144
|
{ :a => 1, :b => 2 }.should_not include(:a, :b)
|
145
|
-
}.to
|
145
|
+
}.to fail_matching(%Q|expected {:a=>1, :b=>2} not to include :a and :b|)
|
146
146
|
end
|
147
147
|
|
148
148
|
it "fails if the target includes some (but not all) of the expected keys" do
|
149
149
|
expect {
|
150
150
|
{ :a => 1, :b => 2 }.should_not include(:d, :b)
|
151
|
-
}.to
|
151
|
+
}.to fail_matching(%Q|expected {:a=>1, :b=>2} not to include :d and :b|)
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -184,13 +184,13 @@ describe "should include(:key => value)" do
|
|
184
184
|
it "fails if target has a different value for key" do
|
185
185
|
lambda {
|
186
186
|
{:key => 'different'}.should include(:key => 'value')
|
187
|
-
}.should
|
187
|
+
}.should fail_matching(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
|
188
188
|
end
|
189
189
|
|
190
190
|
it "fails if target has a different key" do
|
191
191
|
lambda {
|
192
192
|
{:other => 'value'}.should include(:key => 'value')
|
193
|
-
}.should
|
193
|
+
}.should fail_matching(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
@@ -198,7 +198,7 @@ describe "should include(:key => value)" do
|
|
198
198
|
it "fails if the target does not contain the given hash" do
|
199
199
|
lambda {
|
200
200
|
['a', 'b'].should include(:key => 'value')
|
201
|
-
}.should
|
201
|
+
}.should fail_matching(%q|expected ["a", "b"] to include {:key=>"value"}|)
|
202
202
|
end
|
203
203
|
|
204
204
|
it "passes if the target contains the given hash" do
|
@@ -212,13 +212,13 @@ describe "should_not include(:key => value)" do
|
|
212
212
|
it "fails if target includes the key/value pair" do
|
213
213
|
lambda {
|
214
214
|
{:key => 'value'}.should_not include(:key => 'value')
|
215
|
-
}.should
|
215
|
+
}.should fail_matching(%Q|expected {:key=>"value"} not to include {:key=>"value"}|)
|
216
216
|
end
|
217
217
|
|
218
218
|
it "fails if target includes the key/value pair among others" do
|
219
219
|
lambda {
|
220
220
|
{:key => 'value', :other => 'different'}.should_not include(:key => 'value')
|
221
|
-
}.should
|
221
|
+
}.should fail_matching(%Q|expected {:key=>"value", :other=>"different"} not to include {:key=>"value"}|)
|
222
222
|
end
|
223
223
|
|
224
224
|
it "passes if target has a different value for key" do
|
@@ -238,7 +238,7 @@ describe "should_not include(:key => value)" do
|
|
238
238
|
it "fails if the target contains the given hash" do
|
239
239
|
lambda {
|
240
240
|
['a', { :key => 'value' } ].should_not include(:key => 'value')
|
241
|
-
}.should
|
241
|
+
}.should fail_matching(%Q|expected ["a", {:key=>"value"}] not to include {:key=>"value"}|)
|
242
242
|
end
|
243
243
|
end
|
244
244
|
end
|
@@ -256,25 +256,31 @@ describe "should include(:key1 => value1, :key2 => value2)" do
|
|
256
256
|
it "fails if target has a different value for one of the keys" do
|
257
257
|
lambda {
|
258
258
|
{:a => 1, :b => 2}.should include(:a => 2, :b => 2)
|
259
|
-
}.should
|
259
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>2} to include {:a=>2, :b=>2}|)
|
260
260
|
end
|
261
261
|
|
262
262
|
it "fails if target has a different value for both of the keys" do
|
263
263
|
lambda {
|
264
264
|
{:a => 1, :b => 1}.should include(:a => 2, :b => 2)
|
265
|
-
}.should
|
265
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>1} to include {:a=>2, :b=>2}|)
|
266
266
|
end
|
267
267
|
|
268
268
|
it "fails if target lacks one of the keys" do
|
269
269
|
lambda {
|
270
270
|
{:a => 1, :b => 1}.should include(:a => 1, :c => 1)
|
271
|
-
}.should
|
271
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>1} to include {:a=>1, :c=>1}|)
|
272
272
|
end
|
273
273
|
|
274
274
|
it "fails if target lacks both of the keys" do
|
275
|
-
|
275
|
+
begin
|
276
276
|
{:a => 1, :b => 1}.should include(:c => 1, :d => 1)
|
277
|
-
|
277
|
+
rescue Exception => e
|
278
|
+
ensure
|
279
|
+
e.message.should match(/expected \{:a=>1, :b=>1\} to include/)
|
280
|
+
e.message.match(/include (.*)$/) do |m|
|
281
|
+
eval(m[1]).should eq({:c=>1,:d=>1})
|
282
|
+
end
|
283
|
+
end
|
278
284
|
end
|
279
285
|
end
|
280
286
|
|
@@ -282,7 +288,7 @@ describe "should include(:key1 => value1, :key2 => value2)" do
|
|
282
288
|
it "fails if the target does not contain the given hash" do
|
283
289
|
lambda {
|
284
290
|
['a', 'b'].should include(:a => 1, :b => 1)
|
285
|
-
}.should
|
291
|
+
}.should fail_matching(%Q|expected ["a", "b"] to include {:a=>1, :b=>1}|)
|
286
292
|
end
|
287
293
|
|
288
294
|
it "passes if the target contains the given hash" do
|
@@ -296,20 +302,20 @@ describe "should_not include(:key1 => value1, :key2 => value2)" do
|
|
296
302
|
it "fails if target includes the key/value pairs" do
|
297
303
|
lambda {
|
298
304
|
{:a => 1, :b => 2}.should_not include(:a => 1, :b => 2)
|
299
|
-
}.should
|
305
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>2} not to include {:a=>1, :b=>2}|)
|
300
306
|
end
|
301
307
|
|
302
308
|
it "fails if target includes the key/value pairs among others" do
|
303
309
|
hash = {:a => 1, :b => 2, :c => 3}
|
304
310
|
lambda {
|
305
311
|
hash.should_not include(:a => 1, :b => 2)
|
306
|
-
}.should
|
312
|
+
}.should fail_matching(%Q|expected #{hash.inspect} not to include {:a=>1, :b=>2}|)
|
307
313
|
end
|
308
314
|
|
309
315
|
it "fails if target has a different value for one of the keys" do
|
310
316
|
lambda {
|
311
317
|
{:a => 1, :b => 2}.should_not include(:a => 2, :b => 2)
|
312
|
-
}.should
|
318
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>2} not to include {:a=>2, :b=>2}|)
|
313
319
|
end
|
314
320
|
|
315
321
|
it "passes if target has a different value for both of the keys" do
|
@@ -319,7 +325,7 @@ describe "should_not include(:key1 => value1, :key2 => value2)" do
|
|
319
325
|
it "fails if target lacks one of the keys" do
|
320
326
|
lambda {
|
321
327
|
{:a => 1, :b => 1}.should_not include(:a => 1, :c => 1)
|
322
|
-
}.should
|
328
|
+
}.should fail_matching(%Q|expected {:a=>1, :b=>1} not to include {:a=>1, :c=>1}|)
|
323
329
|
end
|
324
330
|
|
325
331
|
it "passes if target lacks both of the keys" do
|
@@ -335,7 +341,7 @@ describe "should_not include(:key1 => value1, :key2 => value2)" do
|
|
335
341
|
it "fails if the target contains the given hash" do
|
336
342
|
lambda {
|
337
343
|
['a', { :a => 1, :b => 2 } ].should_not include(:a => 1, :b => 2)
|
338
|
-
}.should
|
344
|
+
}.should fail_matching(%Q|expected ["a", {:a=>1, :b=>2}] not to include {:a=>1, :b=>2}|)
|
339
345
|
end
|
340
346
|
end
|
341
347
|
end
|
@@ -21,7 +21,7 @@ describe "should ==" do
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
-
describe "unsupported operators", :
|
24
|
+
describe "unsupported operators", :if => RUBY_VERSION.to_f == 1.9 do
|
25
25
|
it "raises an appropriate error for should != expected" do
|
26
26
|
expect {
|
27
27
|
"apple".should != "pear"
|
data/spec/spec_helper.rb
CHANGED
@@ -15,52 +15,10 @@ require 'rspec/expectations'
|
|
15
15
|
require 'rspec/core'
|
16
16
|
require 'rspec/mocks'
|
17
17
|
|
18
|
-
Dir['./spec/support/**/*'].each
|
19
|
-
require f
|
20
|
-
end
|
21
|
-
|
22
|
-
def with_ruby(version)
|
23
|
-
yield if RUBY_PLATFORM =~ Regexp.compile("^#{version}")
|
24
|
-
end
|
25
|
-
|
26
|
-
module RSpec
|
27
|
-
module Ruby
|
28
|
-
class << self
|
29
|
-
def version
|
30
|
-
RUBY_VERSION
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
module RSpec
|
37
|
-
module Matchers
|
38
|
-
def fail
|
39
|
-
raise_error(RSpec::Expectations::ExpectationNotMetError)
|
40
|
-
end
|
41
|
-
|
42
|
-
def fail_with(message)
|
43
|
-
raise_error(RSpec::Expectations::ExpectationNotMetError, message)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
18
|
+
Dir['./spec/support/**/*'].each {|f| require f}
|
47
19
|
|
48
20
|
RSpec::configure do |config|
|
49
|
-
config.mock_with(:rspec)
|
50
|
-
config.include RSpec::Mocks::Methods
|
51
21
|
config.color_enabled = true
|
52
22
|
config.filter_run :focused => true
|
53
|
-
|
54
|
-
config.filter_run_excluding :ruby => lambda {|version|
|
55
|
-
case version.to_s
|
56
|
-
when "!jruby"
|
57
|
-
RUBY_ENGINE != "jruby"
|
58
|
-
when /^> (.*)/
|
59
|
-
!(RUBY_VERSION.to_s > $1)
|
60
|
-
else
|
61
|
-
!(RUBY_VERSION.to_s =~ /^#{version.to_s}/)
|
62
|
-
end
|
63
|
-
}
|
64
|
-
|
65
23
|
config.run_all_when_everything_filtered = true
|
66
24
|
end
|
data/spec/support/classes.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
RSpec::Matchers.define :include_method do |expected|
|
2
|
+
match do |actual|
|
3
|
+
actual.map { |m| m.to_s }.include?(expected.to_s)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
module RSpec
|
8
|
+
module Matchers
|
9
|
+
def fail
|
10
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError)
|
11
|
+
end
|
12
|
+
|
13
|
+
def fail_with(message)
|
14
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError, message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def fail_matching(message)
|
18
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError, /#{Regexp.escape(message)}/)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 2
|
7
|
-
-
|
8
|
+
- 3
|
8
9
|
- 0
|
9
|
-
version: 2.
|
10
|
+
version: 2.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- David Chelimsky
|
@@ -15,22 +16,23 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-
|
19
|
+
date: 2010-12-12 00:00:00 -06:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
|
-
name: diff-lcs
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 23
|
28
29
|
segments:
|
29
30
|
- 1
|
30
31
|
- 1
|
31
32
|
- 2
|
32
33
|
version: 1.1.2
|
33
34
|
type: :runtime
|
35
|
+
name: diff-lcs
|
34
36
|
prerelease: false
|
35
37
|
version_requirements: *id001
|
36
38
|
description: rspec expectations (should[_not] and matchers)
|
@@ -154,6 +156,8 @@ files:
|
|
154
156
|
- spec/spec_helper.rb
|
155
157
|
- spec/suite.rb
|
156
158
|
- spec/support/classes.rb
|
159
|
+
- spec/support/matchers.rb
|
160
|
+
- spec/support/ruby_version.rb
|
157
161
|
- specs.watchr
|
158
162
|
has_rdoc: true
|
159
163
|
homepage: http://github.com/rspec/rspec-expectations
|
@@ -169,7 +173,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
173
|
requirements:
|
170
174
|
- - ">="
|
171
175
|
- !ruby/object:Gem::Version
|
172
|
-
hash:
|
176
|
+
hash: 3
|
173
177
|
segments:
|
174
178
|
- 0
|
175
179
|
version: "0"
|
@@ -178,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
182
|
requirements:
|
179
183
|
- - ">="
|
180
184
|
- !ruby/object:Gem::Version
|
181
|
-
hash:
|
185
|
+
hash: 3
|
182
186
|
segments:
|
183
187
|
- 0
|
184
188
|
version: "0"
|
@@ -188,7 +192,7 @@ rubyforge_project: rspec
|
|
188
192
|
rubygems_version: 1.3.7
|
189
193
|
signing_key:
|
190
194
|
specification_version: 3
|
191
|
-
summary: rspec-expectations-2.
|
195
|
+
summary: rspec-expectations-2.3.0
|
192
196
|
test_files:
|
193
197
|
- features/README.markdown
|
194
198
|
- features/expectations/attribute_of_subject.feature
|
@@ -250,3 +254,5 @@ test_files:
|
|
250
254
|
- spec/spec_helper.rb
|
251
255
|
- spec/suite.rb
|
252
256
|
- spec/support/classes.rb
|
257
|
+
- spec/support/matchers.rb
|
258
|
+
- spec/support/ruby_version.rb
|