rspec-expectations 2.0.0.beta.19 → 2.0.0.beta.20
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/.gitignore +1 -0
- data/Gemfile +1 -0
- data/Rakefile +0 -7
- data/VERSION +1 -1
- data/features/matchers/define_matcher.feature +40 -4
- data/lib/rspec/expectations/extensions.rb +1 -0
- data/lib/rspec/expectations/extensions/array.rb +7 -0
- data/lib/rspec/matchers/dsl.rb +4 -0
- data/lib/rspec/matchers/throw_symbol.rb +2 -2
- data/rspec-expectations.gemspec +10 -15
- data/spec/rspec/expectations/differ_spec.rb +3 -3
- data/spec/rspec/expectations/handler_spec.rb +2 -2
- data/spec/rspec/matchers/be_spec.rb +68 -68
- data/spec/rspec/matchers/change_spec.rb +43 -43
- data/spec/rspec/matchers/description_generation_spec.rb +1 -1
- data/spec/rspec/matchers/eql_spec.rb +5 -5
- data/spec/rspec/matchers/equal_spec.rb +5 -5
- data/spec/rspec/matchers/exist_spec.rb +1 -1
- data/spec/rspec/matchers/has_spec.rb +11 -11
- data/spec/rspec/matchers/have_spec.rb +39 -39
- data/spec/rspec/matchers/include_spec.rb +14 -14
- data/spec/rspec/matchers/match_array_spec.rb +10 -10
- data/spec/rspec/matchers/match_spec.rb +10 -10
- data/spec/rspec/matchers/operator_matcher_spec.rb +24 -24
- data/spec/rspec/matchers/raise_error_spec.rb +46 -46
- data/spec/rspec/matchers/satisfy_spec.rb +4 -4
- data/spec/rspec/matchers/throw_symbol_spec.rb +25 -25
- metadata +28 -40
@@ -29,19 +29,19 @@ end
|
|
29
29
|
describe "should have(n).items" do
|
30
30
|
include HaveSpecHelper
|
31
31
|
|
32
|
-
it "
|
32
|
+
it "passes if target has a collection of items with n members" do
|
33
33
|
owner = create_collection_owner_with(3)
|
34
34
|
owner.should have(3).items_in_collection_with_length_method
|
35
35
|
owner.should have(3).items_in_collection_with_size_method
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
38
|
+
it "converts :no to 0" do
|
39
39
|
owner = create_collection_owner_with(0)
|
40
40
|
owner.should have(:no).items_in_collection_with_length_method
|
41
41
|
owner.should have(:no).items_in_collection_with_size_method
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "fails if target has a collection of items with < n members" do
|
45
45
|
owner = create_collection_owner_with(3)
|
46
46
|
lambda {
|
47
47
|
owner.should have(4).items_in_collection_with_length_method
|
@@ -51,7 +51,7 @@ describe "should have(n).items" do
|
|
51
51
|
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
52
52
|
end
|
53
53
|
|
54
|
-
it "
|
54
|
+
it "fails if target has a collection of items with > n members" do
|
55
55
|
owner = create_collection_owner_with(3)
|
56
56
|
lambda {
|
57
57
|
owner.should have(2).items_in_collection_with_length_method
|
@@ -65,7 +65,7 @@ end
|
|
65
65
|
describe 'should have(1).item when ActiveSupport::Inflector is defined' do
|
66
66
|
include HaveSpecHelper
|
67
67
|
|
68
|
-
it '
|
68
|
+
it 'pluralizes the collection name' do
|
69
69
|
owner = create_collection_owner_with(1)
|
70
70
|
owner.should have(1).item
|
71
71
|
end
|
@@ -93,7 +93,7 @@ describe 'should have(1).item when Inflector is defined' do
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
it '
|
96
|
+
it 'pluralizes the collection name' do
|
97
97
|
owner = create_collection_owner_with(1)
|
98
98
|
owner.should have(1).item
|
99
99
|
end
|
@@ -106,7 +106,7 @@ describe 'should have(1).item when Inflector is defined' do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
describe "should have(n).items where result responds to items but returns something other than a collection" do
|
109
|
-
it "
|
109
|
+
it "provides a meaningful error" do
|
110
110
|
owner = Class.new do
|
111
111
|
def items
|
112
112
|
Object.new
|
@@ -121,19 +121,19 @@ end
|
|
121
121
|
describe "should_not have(n).items" do
|
122
122
|
include HaveSpecHelper
|
123
123
|
|
124
|
-
it "
|
124
|
+
it "passes if target has a collection of items with < n members" do
|
125
125
|
owner = create_collection_owner_with(3)
|
126
126
|
owner.should_not have(4).items_in_collection_with_length_method
|
127
127
|
owner.should_not have(4).items_in_collection_with_size_method
|
128
128
|
end
|
129
129
|
|
130
|
-
it "
|
130
|
+
it "passes if target has a collection of items with > n members" do
|
131
131
|
owner = create_collection_owner_with(3)
|
132
132
|
owner.should_not have(2).items_in_collection_with_length_method
|
133
133
|
owner.should_not have(2).items_in_collection_with_size_method
|
134
134
|
end
|
135
135
|
|
136
|
-
it "
|
136
|
+
it "fails if target has a collection of items with n members" do
|
137
137
|
owner = create_collection_owner_with(3)
|
138
138
|
lambda {
|
139
139
|
owner.should_not have(3).items_in_collection_with_length_method
|
@@ -147,19 +147,19 @@ end
|
|
147
147
|
describe "should have_exactly(n).items" do
|
148
148
|
include HaveSpecHelper
|
149
149
|
|
150
|
-
it "
|
150
|
+
it "passes if target has a collection of items with n members" do
|
151
151
|
owner = create_collection_owner_with(3)
|
152
152
|
owner.should have_exactly(3).items_in_collection_with_length_method
|
153
153
|
owner.should have_exactly(3).items_in_collection_with_size_method
|
154
154
|
end
|
155
155
|
|
156
|
-
it "
|
156
|
+
it "converts :no to 0" do
|
157
157
|
owner = create_collection_owner_with(0)
|
158
158
|
owner.should have_exactly(:no).items_in_collection_with_length_method
|
159
159
|
owner.should have_exactly(:no).items_in_collection_with_size_method
|
160
160
|
end
|
161
161
|
|
162
|
-
it "
|
162
|
+
it "fails if target has a collection of items with < n members" do
|
163
163
|
owner = create_collection_owner_with(3)
|
164
164
|
lambda {
|
165
165
|
owner.should have_exactly(4).items_in_collection_with_length_method
|
@@ -169,7 +169,7 @@ describe "should have_exactly(n).items" do
|
|
169
169
|
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
170
170
|
end
|
171
171
|
|
172
|
-
it "
|
172
|
+
it "fails if target has a collection of items with > n members" do
|
173
173
|
owner = create_collection_owner_with(3)
|
174
174
|
lambda {
|
175
175
|
owner.should have_exactly(2).items_in_collection_with_length_method
|
@@ -183,19 +183,19 @@ end
|
|
183
183
|
describe "should have_at_least(n).items" do
|
184
184
|
include HaveSpecHelper
|
185
185
|
|
186
|
-
it "
|
186
|
+
it "passes if target has a collection of items with n members" do
|
187
187
|
owner = create_collection_owner_with(3)
|
188
188
|
owner.should have_at_least(3).items_in_collection_with_length_method
|
189
189
|
owner.should have_at_least(3).items_in_collection_with_size_method
|
190
190
|
end
|
191
191
|
|
192
|
-
it "
|
192
|
+
it "passes if target has a collection of items with > n members" do
|
193
193
|
owner = create_collection_owner_with(3)
|
194
194
|
owner.should have_at_least(2).items_in_collection_with_length_method
|
195
195
|
owner.should have_at_least(2).items_in_collection_with_size_method
|
196
196
|
end
|
197
197
|
|
198
|
-
it "
|
198
|
+
it "fails if target has a collection of items with < n members" do
|
199
199
|
owner = create_collection_owner_with(3)
|
200
200
|
lambda {
|
201
201
|
owner.should have_at_least(4).items_in_collection_with_length_method
|
@@ -205,7 +205,7 @@ describe "should have_at_least(n).items" do
|
|
205
205
|
}.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
|
206
206
|
end
|
207
207
|
|
208
|
-
it "
|
208
|
+
it "provides educational negative failure messages" do
|
209
209
|
#given
|
210
210
|
owner = create_collection_owner_with(3)
|
211
211
|
length_matcher = have_at_least(3).items_in_collection_with_length_method
|
@@ -237,13 +237,13 @@ end
|
|
237
237
|
describe "should have_at_most(n).items" do
|
238
238
|
include HaveSpecHelper
|
239
239
|
|
240
|
-
it "
|
240
|
+
it "passes if target has a collection of items with n members" do
|
241
241
|
owner = create_collection_owner_with(3)
|
242
242
|
owner.should have_at_most(3).items_in_collection_with_length_method
|
243
243
|
owner.should have_at_most(3).items_in_collection_with_size_method
|
244
244
|
end
|
245
245
|
|
246
|
-
it "
|
246
|
+
it "fails if target has a collection of items with > n members" do
|
247
247
|
owner = create_collection_owner_with(3)
|
248
248
|
lambda {
|
249
249
|
owner.should have_at_most(2).items_in_collection_with_length_method
|
@@ -253,13 +253,13 @@ describe "should have_at_most(n).items" do
|
|
253
253
|
}.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
|
254
254
|
end
|
255
255
|
|
256
|
-
it "
|
256
|
+
it "passes if target has a collection of items with < n members" do
|
257
257
|
owner = create_collection_owner_with(3)
|
258
258
|
owner.should have_at_most(4).items_in_collection_with_length_method
|
259
259
|
owner.should have_at_most(4).items_in_collection_with_size_method
|
260
260
|
end
|
261
261
|
|
262
|
-
it "
|
262
|
+
it "provides educational negative failure messages" do
|
263
263
|
#given
|
264
264
|
owner = create_collection_owner_with(3)
|
265
265
|
length_matcher = have_at_most(3).items_in_collection_with_length_method
|
@@ -289,13 +289,13 @@ EOF
|
|
289
289
|
end
|
290
290
|
|
291
291
|
describe "have(n).items(args, block)" do
|
292
|
-
it "
|
292
|
+
it "passes args to target" do
|
293
293
|
target = mock("target")
|
294
294
|
target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
|
295
295
|
target.should have(3).items("arg1","arg2")
|
296
296
|
end
|
297
297
|
|
298
|
-
it "
|
298
|
+
it "passes block to target" do
|
299
299
|
target = mock("target")
|
300
300
|
block = lambda { 5 }
|
301
301
|
target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
|
@@ -304,27 +304,27 @@ describe "have(n).items(args, block)" do
|
|
304
304
|
end
|
305
305
|
|
306
306
|
describe "have(n).items where target IS a collection" do
|
307
|
-
it "
|
307
|
+
it "references the number of items IN the collection" do
|
308
308
|
[1,2,3].should have(3).items
|
309
309
|
end
|
310
310
|
|
311
|
-
it "
|
311
|
+
it "fails when the number of items IN the collection is not as expected" do
|
312
312
|
lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
|
313
313
|
end
|
314
314
|
end
|
315
315
|
|
316
316
|
describe "have(n).characters where target IS a String" do
|
317
|
-
it "
|
317
|
+
it "passes if the length is correct" do
|
318
318
|
"this string".should have(11).characters
|
319
319
|
end
|
320
320
|
|
321
|
-
it "
|
321
|
+
it "fails if the length is incorrect" do
|
322
322
|
lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
|
323
323
|
end
|
324
324
|
end
|
325
325
|
|
326
326
|
describe "have(n).things on an object which is not a collection nor contains one" do
|
327
|
-
it "
|
327
|
+
it "fails" do
|
328
328
|
lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
|
329
329
|
end
|
330
330
|
end
|
@@ -338,19 +338,19 @@ describe RSpec::Matchers::Have, "for a collection owner that implements #send" d
|
|
338
338
|
def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
|
339
339
|
end
|
340
340
|
|
341
|
-
it "
|
341
|
+
it "works in the straightforward case" do
|
342
342
|
lambda {
|
343
343
|
@collection.should have(2).floozles
|
344
344
|
}.should_not raise_error
|
345
345
|
end
|
346
346
|
|
347
|
-
it "
|
347
|
+
it "works when doing automatic pluralization" do
|
348
348
|
lambda {
|
349
349
|
@collection.should have_at_least(1).floozle
|
350
350
|
}.should_not raise_error
|
351
351
|
end
|
352
352
|
|
353
|
-
it "
|
353
|
+
it "blows up when the owner doesn't respond to that method" do
|
354
354
|
lambda {
|
355
355
|
@collection.should have(99).problems
|
356
356
|
}.should raise_error(NoMethodError, /problems/)
|
@@ -360,7 +360,7 @@ end
|
|
360
360
|
module RSpec
|
361
361
|
module Matchers
|
362
362
|
describe Have do
|
363
|
-
it "
|
363
|
+
it "has method_missing as private" do
|
364
364
|
with_ruby 1.8 do
|
365
365
|
described_class.private_instance_methods.should include("method_missing")
|
366
366
|
end
|
@@ -369,7 +369,7 @@ module RSpec
|
|
369
369
|
end
|
370
370
|
end
|
371
371
|
|
372
|
-
it "
|
372
|
+
it "does not respond_to? method_missing (because it's private)" do
|
373
373
|
formatter = described_class.new({ }, StringIO.new)
|
374
374
|
formatter.should_not respond_to(:method_missing)
|
375
375
|
end
|
@@ -381,24 +381,24 @@ module RSpec
|
|
381
381
|
@a_method_which_object_defines = Object.instance_methods.first
|
382
382
|
end
|
383
383
|
|
384
|
-
it "
|
384
|
+
it "is true for a method which Have defines" do
|
385
385
|
@have.should respond_to(@a_method_which_have_defines)
|
386
386
|
end
|
387
387
|
|
388
|
-
it "
|
388
|
+
it "is true for a method that it's superclass (Object) defines" do
|
389
389
|
@have.should respond_to(@a_method_which_object_defines)
|
390
390
|
end
|
391
391
|
|
392
|
-
it "
|
392
|
+
it "is false for a method which neither Object nor nor Have defines" do
|
393
393
|
@have.should_not respond_to(:foo_bar_baz)
|
394
394
|
end
|
395
395
|
|
396
|
-
it "
|
396
|
+
it "is false if the owner doesn't respond to the method" do
|
397
397
|
have = Have.new(99)
|
398
398
|
have.should_not respond_to(:problems)
|
399
399
|
end
|
400
400
|
|
401
|
-
it "
|
401
|
+
it "is true if the owner responds to the method" do
|
402
402
|
have = Have.new(:a_symbol)
|
403
403
|
have.should respond_to(:to_sym)
|
404
404
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "should include(expected)" do
|
4
|
-
it "
|
4
|
+
it "passes if target includes expected" do
|
5
5
|
[1,2,3].should include(3)
|
6
6
|
"abc".should include("a")
|
7
7
|
end
|
8
8
|
|
9
|
-
it '
|
9
|
+
it 'passes if target is a Hash and has the expected as a key' do
|
10
10
|
{:key => 'value'}.should include(:key)
|
11
11
|
end
|
12
12
|
|
13
|
-
it "
|
13
|
+
it "fails if target does not include expected" do
|
14
14
|
lambda {
|
15
15
|
[1,2,3].should include(4)
|
16
16
|
}.should fail_with("expected [1, 2, 3] to include 4")
|
@@ -24,21 +24,21 @@ describe "should include(expected)" do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "should include(with, multiple, args)" do
|
27
|
-
it "
|
27
|
+
it "passes if target includes all items" do
|
28
28
|
[1,2,3].should include(1,2,3)
|
29
29
|
end
|
30
30
|
|
31
|
-
it '
|
31
|
+
it 'passes if target is a Hash including all items as keys' do
|
32
32
|
{:key => 'value', :other => 'value'}.should include(:key, :other)
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "fails if target does not include any one of the items" do
|
36
36
|
lambda {
|
37
37
|
[1,2,3].should include(1,2,4)
|
38
38
|
}.should fail_with("expected [1, 2, 3] to include 1, 2, and 4")
|
39
39
|
end
|
40
40
|
|
41
|
-
it '
|
41
|
+
it 'passes if target is a Hash missing any item as a key' do
|
42
42
|
lambda {
|
43
43
|
{:key => 'value'}.should include(:key, :other)
|
44
44
|
}.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
|
@@ -46,16 +46,16 @@ describe "should include(with, multiple, args)" do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
describe "should_not include(expected)" do
|
49
|
-
it "
|
49
|
+
it "passes if target does not include expected" do
|
50
50
|
[1,2,3].should_not include(4)
|
51
51
|
"abc".should_not include("d")
|
52
52
|
end
|
53
53
|
|
54
|
-
it '
|
54
|
+
it 'passes if target is a Hash and does not have the expected as a key' do
|
55
55
|
{:other => 'value'}.should_not include(:key)
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "fails if target includes expected" do
|
59
59
|
lambda {
|
60
60
|
[1,2,3].should_not include(3)
|
61
61
|
}.should fail_with("expected [1, 2, 3] not to include 3")
|
@@ -69,18 +69,18 @@ describe "should_not include(expected)" do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe "should include(:key => value)" do
|
72
|
-
it "
|
72
|
+
it "passes if target is a Hash and includes the key/value pair" do
|
73
73
|
{:key => 'value'}.should include(:key => 'value')
|
74
74
|
end
|
75
|
-
it "
|
75
|
+
it "passes if target is a Hash and includes the key/value pair among others" do
|
76
76
|
{:key => 'value', :other => 'different'}.should include(:key => 'value')
|
77
77
|
end
|
78
|
-
it "
|
78
|
+
it "fails if target is a Hash and has a different value for key" do
|
79
79
|
lambda {
|
80
80
|
{:key => 'different'}.should include(:key => 'value')
|
81
81
|
}.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
|
82
82
|
end
|
83
|
-
it "
|
83
|
+
it "fails if target is a Hash and has a different key" do
|
84
84
|
lambda {
|
85
85
|
{:other => 'value'}.should include(:key => 'value')
|
86
86
|
}.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
|
@@ -18,15 +18,15 @@ class UnsortableObject
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "array.should =~ other_array" do
|
21
|
-
it "
|
21
|
+
it "passes if target contains all items" do
|
22
22
|
[1,2,3].should =~ [1,2,3]
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "passes if target contains all items out of order" do
|
26
26
|
[1,3,2].should =~ [1,2,3]
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "fails if target includes extra items" do
|
30
30
|
lambda {
|
31
31
|
[1,2,3,4].should =~ [1,2,3]
|
32
32
|
}.should fail_with(<<-MESSAGE)
|
@@ -36,7 +36,7 @@ the extra elements were: [4]
|
|
36
36
|
MESSAGE
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "fails if target is missing items" do
|
40
40
|
lambda {
|
41
41
|
[1,2].should =~ [1,2,3]
|
42
42
|
}.should fail_with(<<-MESSAGE)
|
@@ -46,7 +46,7 @@ the missing elements were: [3]
|
|
46
46
|
MESSAGE
|
47
47
|
end
|
48
48
|
|
49
|
-
it "
|
49
|
+
it "fails if target is missing items and has extra items" do
|
50
50
|
|
51
51
|
lambda {
|
52
52
|
[1,2,4].should =~ [1,2,3]
|
@@ -58,7 +58,7 @@ the extra elements were: [4]
|
|
58
58
|
MESSAGE
|
59
59
|
end
|
60
60
|
|
61
|
-
it "
|
61
|
+
it "sorts items in the error message if they all respond to <=>" do
|
62
62
|
lambda {
|
63
63
|
[6,2,1,5].should =~ [4,1,2,3]
|
64
64
|
}.should fail_with(<<-MESSAGE)
|
@@ -69,7 +69,7 @@ the extra elements were: [5, 6]
|
|
69
69
|
MESSAGE
|
70
70
|
end
|
71
71
|
|
72
|
-
it "
|
72
|
+
it "does not sort items in the error message if they don't all respond to <=>" do
|
73
73
|
lambda {
|
74
74
|
[UnsortableObject.new(2), UnsortableObject.new(1)].should =~ [UnsortableObject.new(4), UnsortableObject.new(3)]
|
75
75
|
}.should fail_with(<<-MESSAGE)
|
@@ -80,7 +80,7 @@ the extra elements were: [2, 1]
|
|
80
80
|
MESSAGE
|
81
81
|
end
|
82
82
|
|
83
|
-
it "
|
83
|
+
it "accurately reports extra elements when there are duplicates" do
|
84
84
|
lambda {
|
85
85
|
[1,1,1,5].should =~ [1,5]
|
86
86
|
}.should fail_with(<<-MESSAGE)
|
@@ -90,7 +90,7 @@ the extra elements were: [1, 1]
|
|
90
90
|
MESSAGE
|
91
91
|
end
|
92
92
|
|
93
|
-
it "
|
93
|
+
it "accurately reports missing elements when there are duplicates" do
|
94
94
|
lambda {
|
95
95
|
[1,5].should =~ [1,1,5]
|
96
96
|
}.should fail_with(<<-MESSAGE)
|
@@ -103,7 +103,7 @@ MESSAGE
|
|
103
103
|
end
|
104
104
|
|
105
105
|
describe "should_not =~ [:with, :multiple, :args]" do
|
106
|
-
it "
|
106
|
+
it "is not supported" do
|
107
107
|
lambda {
|
108
108
|
[1,2,3].should_not =~ [1,2,3]
|
109
109
|
}.should fail_with(/Matcher does not support should_not/)
|