rspec-expectations 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|