must_be 1.0.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/.gitignore +2 -0
- data/README.md +348 -0
- data/Rakefile +27 -0
- data/VERSION +1 -0
- data/doc/readme/examples.rb +262 -0
- data/doc/readme/run_examples.rb +47 -0
- data/lib/must_be/attr_typed.rb +78 -0
- data/lib/must_be/basic.rb +120 -0
- data/lib/must_be/containers.rb +291 -0
- data/lib/must_be/containers_registered_classes.rb +83 -0
- data/lib/must_be/core.rb +247 -0
- data/lib/must_be/nonstandard_control_flow.rb +159 -0
- data/lib/must_be/proxy.rb +62 -0
- data/lib/must_be.rb +9 -0
- data/must_be.gemspec +71 -0
- data/spec/must_be/attr_typed_spec.rb +225 -0
- data/spec/must_be/basic_spec.rb +578 -0
- data/spec/must_be/containers_spec.rb +952 -0
- data/spec/must_be/core_spec.rb +675 -0
- data/spec/must_be/nonstandard_control_flow_spec.rb +845 -0
- data/spec/must_be/proxy_spec.rb +194 -0
- data/spec/notify_matcher_spec.rb +59 -0
- data/spec/spec_helper.rb +180 -0
- data/spec/typical_usage_spec.rb +176 -0
- metadata +98 -0
@@ -0,0 +1,578 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MustBe do
|
4
|
+
include MustBeExampleHelper
|
5
|
+
|
6
|
+
describe '#must_be' do
|
7
|
+
context "when called with no arguments" do
|
8
|
+
it "should notify if receiver is nil" do
|
9
|
+
nil.must_be.should == nil
|
10
|
+
should notify("nil.must_be, but matches NilClass")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should notify if receiver is false" do
|
14
|
+
false.must_be.should == false
|
15
|
+
should notify("false.must_be, but matches FalseClass")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when called on 51" do
|
20
|
+
context "when called with no arguments" do
|
21
|
+
it "should not notify" do
|
22
|
+
51.must_be.should == 51
|
23
|
+
should_not notify
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when called with Numeric" do
|
28
|
+
it "should not notify" do
|
29
|
+
51.must_be(Numeric).should == 51
|
30
|
+
should_not notify
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when called with Float" do
|
35
|
+
it "should notify" do
|
36
|
+
51.must_be(Float).should == 51
|
37
|
+
should notify("51.must_be(Float), but matches Fixnum")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when called with Comparable" do
|
42
|
+
it "should not notify" do
|
43
|
+
51.must_be(Comparable).should == 51
|
44
|
+
should_not notify
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "when called with Enumerable" do
|
49
|
+
it "should notify" do
|
50
|
+
51.must_be(Enumerable).should == 51
|
51
|
+
should notify("51.must_be(Enumerable), but matches Fixnum")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when called with Hash, Kernel, Object" do
|
56
|
+
it "should not notify" do
|
57
|
+
51.must_be(Hash, Kernel, Object).should == 51
|
58
|
+
should_not notify
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when called with String, Time, Array" do
|
63
|
+
it "should notify" do
|
64
|
+
51.must_be(String, Time, Array).should == 51
|
65
|
+
should notify("51.must_be(String, Time, Array), but matches Fixnum")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when called with [1, 51]" do
|
70
|
+
it "should notify" do
|
71
|
+
51.must_be([1, 51]).should == 51
|
72
|
+
should notify("51.must_be([1, 51]), but matches Fixnum")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "when called with blocks" do
|
77
|
+
let(:zerop) { lambda &:zero? }
|
78
|
+
let(:oddp) { lambda &:odd? }
|
79
|
+
|
80
|
+
context "when called with zerop" do
|
81
|
+
it "should notify" do
|
82
|
+
51.must_be(zerop).should == 51
|
83
|
+
should notify
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "when called with oddp" do
|
88
|
+
it "should not notify" do
|
89
|
+
51.must_be(oddp).should == 51
|
90
|
+
should_not notify
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when called with zerop, oddp" do
|
95
|
+
it "should not notify" do
|
96
|
+
51.must_be(zerop, oddp).should == 51
|
97
|
+
should_not notify
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '#must_not_be' do
|
105
|
+
context "when called with no arguments" do
|
106
|
+
it "should not notify if receiver is nil" do
|
107
|
+
nil.must_not_be.should == nil
|
108
|
+
should_not notify
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should not notify if receiver is false" do
|
112
|
+
false.must_not_be.should == false
|
113
|
+
should_not notify
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when called on 51" do
|
118
|
+
context "when called with no arguments" do
|
119
|
+
it "should notify" do
|
120
|
+
51.must_not_be.should == 51
|
121
|
+
should notify("51.must_not_be, but matches Fixnum")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when called with Numeric" do
|
126
|
+
it "should notify" do
|
127
|
+
51.must_not_be(Numeric)
|
128
|
+
should notify("51.must_not_be(Numeric), but matches Fixnum")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when called with Float" do
|
133
|
+
it "should not notify" do
|
134
|
+
51.must_not_be(Float).should == 51
|
135
|
+
should_not notify
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context "when called with Comparable" do
|
140
|
+
it "should notify" do
|
141
|
+
51.must_not_be(Comparable)
|
142
|
+
should notify("51.must_not_be(Comparable), but matches Fixnum")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context "when called with Enumerable" do
|
147
|
+
it "should not notify" do
|
148
|
+
51.must_not_be(Enumerable).should == 51
|
149
|
+
should_not notify
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
context "when called with Hash, Kernel, Object" do
|
154
|
+
it "should notify" do
|
155
|
+
51.must_not_be(Hash, Kernel, Object).should == 51
|
156
|
+
should notify("51.must_not_be(Hash, Kernel, Object),"\
|
157
|
+
" but matches Fixnum")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "when called with String, Time, Array" do
|
162
|
+
it "should not notify" do
|
163
|
+
51.must_not_be(String, Time, Array).should == 51
|
164
|
+
should_not notify
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context "when called with [1, 51]" do
|
169
|
+
it "should notify" do
|
170
|
+
51.must_not_be([1, 51]).should == 51
|
171
|
+
should_not notify
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "when called with blocks" do
|
176
|
+
let(:zerop) { lambda &:zero? }
|
177
|
+
let(:oddp) { lambda &:odd? }
|
178
|
+
|
179
|
+
context "when called with zerop" do
|
180
|
+
it "should not notify" do
|
181
|
+
51.must_not_be(zerop).should == 51
|
182
|
+
should_not notify
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when called with oddp" do
|
187
|
+
it "should notify" do
|
188
|
+
51.must_not_be(oddp).should == 51
|
189
|
+
should notify
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "when called with zerop, oddp" do
|
194
|
+
it "should notify" do
|
195
|
+
51.must_not_be(zerop, oddp).should == 51
|
196
|
+
should notify
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
shared_examples_for "*_be_a in case of bad arguments" do
|
204
|
+
context "when called with no arguments" do
|
205
|
+
it "should raise ArgumentError" do
|
206
|
+
expect do
|
207
|
+
51.send(the_method_name)
|
208
|
+
end.should raise_error(ArgumentError,
|
209
|
+
"wrong number of arguments (0 for 1)")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
context "when called with more than one message" do
|
214
|
+
it "should raise TypeError" do
|
215
|
+
expect do
|
216
|
+
51.send(the_method_name, Object, :extra_message, :usual_message)
|
217
|
+
end.should raise_error(TypeError, "class or module required")
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
context "when called with a non-module in the middle of the argument"\
|
222
|
+
" list" do
|
223
|
+
it "should raise TypeError" do
|
224
|
+
expect do
|
225
|
+
51.send(the_method_name, Object, :not_a_module, Kernel)
|
226
|
+
end.should raise_error(TypeError, "class or module required")
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context "when called with just one non-module argument" do
|
231
|
+
it "should raise TypeError" do
|
232
|
+
expect do
|
233
|
+
51.send(the_method_name, :not_a_module)
|
234
|
+
end.should raise_error(TypeError, "class or module required")
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe '#must_be_a' do
|
240
|
+
let(:the_method_name) { :must_be_a }
|
241
|
+
it_should_behave_like "*_be_a in case of bad arguments"
|
242
|
+
|
243
|
+
context "when called on 51" do
|
244
|
+
context "when called with Float" do
|
245
|
+
it "should notify" do
|
246
|
+
51.must_be_a(Float)
|
247
|
+
should notify("51.must_be_a(Float), but is a Fixnum")
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
context "after disabling" do
|
252
|
+
before_disable_after_enable
|
253
|
+
|
254
|
+
context "when called with Float" do
|
255
|
+
it "should not notify" do
|
256
|
+
51.must_be_a(Float)
|
257
|
+
should_not notify
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
context "when called with Kernel, Comparable" do
|
263
|
+
it "should not notify" do
|
264
|
+
51.must_be_a(Kernel, Comparable)
|
265
|
+
should_not notify
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
context "when called with Float, Integer" do
|
270
|
+
it "should not notify" do
|
271
|
+
51.must_be_a(Float, Integer)
|
272
|
+
should_not notify
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context "when called with Float, :message" do
|
277
|
+
it "should notify" do
|
278
|
+
51.must_be_a(Float, :message)
|
279
|
+
should notify("51.must_be_a(Float, :message), but is a Fixnum")
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
describe '#must_not_be_a' do
|
286
|
+
let(:the_method_name) { :must_not_be_a }
|
287
|
+
it_should_behave_like "*_be_a in case of bad arguments"
|
288
|
+
|
289
|
+
context "when called on 51" do
|
290
|
+
context "when called with Float, Enumerable" do
|
291
|
+
it "should notify" do
|
292
|
+
51.must_not_be_a(Float, Enumerable)
|
293
|
+
should_not notify
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
context "when called with Kernel, Comparable" do
|
298
|
+
it "should notify" do
|
299
|
+
51.must_not_be_a(Kernel, Comparable)
|
300
|
+
should notify("51.must_not_be_a(Kernel, Comparable),"\
|
301
|
+
" but is a Fixnum")
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
context "when called with Float, Integer" do
|
306
|
+
it "should notify" do
|
307
|
+
51.must_not_be_a(Float, Integer)
|
308
|
+
should notify("51.must_not_be_a(Float, Integer),"\
|
309
|
+
" but is a Fixnum")
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
context "when called with Numeric, :message" do
|
314
|
+
it "should notify" do
|
315
|
+
51.must_not_be_a(Numeric, :message)
|
316
|
+
should notify("51.must_not_be_a(Numeric, :message),"\
|
317
|
+
" but is a Fixnum")
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
shared_examples_for "*_be_in in case of bad arguments" do
|
324
|
+
context "when called with :does_not_respond_to_include?" do
|
325
|
+
it "should raise NoMethodError" do
|
326
|
+
expect do
|
327
|
+
"hi".send(the_method_name, :does_not_respond_to_include?)
|
328
|
+
end.should raise_error(NoMethodError)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
describe '#must_be_in' do
|
334
|
+
let(:the_method_name) { :must_be_in }
|
335
|
+
it_should_behave_like "*_be_in in case of bad arguments"
|
336
|
+
|
337
|
+
context "when called on \"hi\"" do
|
338
|
+
context "when called with empty array" do
|
339
|
+
it "should notify" do
|
340
|
+
"hi".must_be_in([]).should == "hi"
|
341
|
+
should notify(%{"hi".must_be_in([])})
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
context "when called with an array which does not include it" do
|
346
|
+
it "should notify" do
|
347
|
+
"hi".must_be_in(["happy", "helper", "hiccup"]).should == "hi"
|
348
|
+
should notify(
|
349
|
+
%{"hi".must_be_in(["happy", "helper", "hiccup"])})
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
context "when called with a range which includes it" do
|
354
|
+
it "should not notify" do
|
355
|
+
"hi".must_be_in("ah".."oh").should == "hi"
|
356
|
+
should_not notify
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
context "when called with a string which includes it" do
|
361
|
+
it "should not notify" do
|
362
|
+
"hi".must_be_in("wishing").should == "hi"
|
363
|
+
should_not notify
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
context "when called with no arguments" do
|
368
|
+
it "should notify" do
|
369
|
+
:yep.must_be_in
|
370
|
+
should notify(":yep.must_be_in")
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
context "when called with multiple arguments" do
|
375
|
+
it "should not notify if any argument equals the receiver" do
|
376
|
+
:yep.must_be_in(:okay, :yep, :fine)
|
377
|
+
should_not notify
|
378
|
+
end
|
379
|
+
|
380
|
+
it "should notify if no argument equals the receiver" do
|
381
|
+
:yep.must_be_in(:nope, :sorry, :negatory)
|
382
|
+
should notify(":yep.must_be_in(:nope, :sorry, :negatory)")
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
describe '#must_not_be_in' do
|
389
|
+
let(:the_method_name) { :must_not_be_in }
|
390
|
+
it_should_behave_like "*_be_in in case of bad arguments"
|
391
|
+
|
392
|
+
context "when called on \"hi\"" do
|
393
|
+
context "when called with empty array" do
|
394
|
+
it "should not notify" do
|
395
|
+
"hi".must_not_be_in([]).should == "hi"
|
396
|
+
should_not notify
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
context "when called with an array which does not include it" do
|
401
|
+
it "should not notify" do
|
402
|
+
"hi".must_not_be_in(["happy", "helper", "hiccup"]).should == "hi"
|
403
|
+
should_not notify
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
context "when called with a range which includes it" do
|
408
|
+
it "should notify" do
|
409
|
+
"hi".must_not_be_in("ah".."oh").should == "hi"
|
410
|
+
should notify(%{"hi".must_not_be_in("ah".."oh")})
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
context "when called with a string which includes it" do
|
415
|
+
it "should notify" do
|
416
|
+
"hi".must_not_be_in("wishing").should == "hi"
|
417
|
+
should notify(%{"hi".must_not_be_in("wishing")})
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
context "when called with no arguments" do
|
422
|
+
it "should not notify" do
|
423
|
+
:yep.must_not_be_in
|
424
|
+
should_not notify
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
context "when called with multiple arguments" do
|
429
|
+
it "should notify if any argument equals the receiver" do
|
430
|
+
:yep.must_not_be_in(:okay, :yep, :fine)
|
431
|
+
should notify(":yep.must_not_be_in(:okay, :yep, :fine)")
|
432
|
+
end
|
433
|
+
|
434
|
+
it "should not notify if no argument equals the receiver" do
|
435
|
+
:yep.must_not_be_in(:nope, :sorry, :negatory)
|
436
|
+
should_not notify
|
437
|
+
end
|
438
|
+
end
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
it_should_have_must_be_value_assertion :must_be_nil, nil
|
443
|
+
it_should_have_must_not_be_value_assertion :must_not_be_nil, nil
|
444
|
+
it_should_have_must_be_value_assertion :must_be_true, true
|
445
|
+
it_should_have_must_be_value_assertion :must_be_false, false
|
446
|
+
|
447
|
+
describe '#must_be_boolean' do
|
448
|
+
it "should not notify if receiver is true" do
|
449
|
+
true.must_be_boolean.should == true
|
450
|
+
should_not notify
|
451
|
+
end
|
452
|
+
|
453
|
+
it "should not notify if receiver is false" do
|
454
|
+
false.must_be_boolean.should == false
|
455
|
+
should_not notify
|
456
|
+
end
|
457
|
+
|
458
|
+
it "should notify if receiver is nil" do
|
459
|
+
nil.must_be_boolean.should == nil
|
460
|
+
should notify("nil.must_be_boolean")
|
461
|
+
end
|
462
|
+
|
463
|
+
it "should notify if receiver is zero" do
|
464
|
+
0.must_be_boolean.should == 0
|
465
|
+
should notify("0.must_be_boolean")
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
shared_examples_for "*_be_close in case of bad arguments" do
|
470
|
+
it "should raise ArgumentError if delta cannot be compared" do
|
471
|
+
expect do
|
472
|
+
200.0.send(the_method_name, 2.0, :a_little)
|
473
|
+
end.should raise_error(ArgumentError)
|
474
|
+
end
|
475
|
+
|
476
|
+
it "should raise TypeError if expected cannot be subtracted from"\
|
477
|
+
" receiver" do
|
478
|
+
expect do
|
479
|
+
200.0.send(the_method_name, :some)
|
480
|
+
end.should raise_error(TypeError)
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should raise NoMethodError if receiver does not respond to :-" do
|
484
|
+
expect do
|
485
|
+
:lots.send(the_method_name, 2.0)
|
486
|
+
end.should raise_error(NoMethodError)
|
487
|
+
end
|
488
|
+
|
489
|
+
it "should rasie NoMethodError if (receiver - expected) does not"\
|
490
|
+
" respond to :abs" do
|
491
|
+
expect do
|
492
|
+
Time.new.send(the_method_name, 2.0, :five)
|
493
|
+
end.should raise_error(NoMethodError)
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
describe '#must_be_close' do
|
498
|
+
let(:the_method_name) { :must_be_close }
|
499
|
+
it_should_behave_like "*_be_close in case of bad arguments"
|
500
|
+
|
501
|
+
it "should not notify if receiver is the same" do
|
502
|
+
2.0.must_be_close(2.0).should == 2.0
|
503
|
+
should_not notify
|
504
|
+
end
|
505
|
+
|
506
|
+
it "should not notify if receiver is a bit greater" do
|
507
|
+
2.01.must_be_close(2.0).should == 2.01
|
508
|
+
should_not notify
|
509
|
+
end
|
510
|
+
|
511
|
+
it "should not notify if receiver is a bit less" do
|
512
|
+
1.91.must_be_close(2.0).should == 1.91
|
513
|
+
should_not notify
|
514
|
+
end
|
515
|
+
|
516
|
+
it "should notify if receiver is much greater" do
|
517
|
+
200.0.must_be_close(2.0, 20.0).should == 200.0
|
518
|
+
should notify("200.0.must_be_close(2.0, 20.0), difference is 198.0")
|
519
|
+
end
|
520
|
+
|
521
|
+
it "should notify if receiver is much less" do
|
522
|
+
-200.0.must_be_close(2.0, 20.0).should == -200.0
|
523
|
+
should notify("-200.0.must_be_close(2.0, 20.0), difference is 202.0")
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
527
|
+
describe '#must_not_be_close' do
|
528
|
+
let(:the_method_name) { :must_not_be_close }
|
529
|
+
it_should_behave_like "*_be_close in case of bad arguments"
|
530
|
+
|
531
|
+
it "should notify if receiver is the same" do
|
532
|
+
2.0.must_not_be_close(2.0).should == 2.0
|
533
|
+
should notify("2.0.must_not_be_close(2.0, 0.1)")
|
534
|
+
end
|
535
|
+
|
536
|
+
it "should notify if receiver is a bit greater" do
|
537
|
+
2.01.must_not_be_close(2.0).should == 2.01
|
538
|
+
should notify("2.01.must_not_be_close(2.0, 0.1)")
|
539
|
+
end
|
540
|
+
|
541
|
+
it "should notify if receiver is a bit less" do
|
542
|
+
1.91.must_not_be_close(2.0).should == 1.91
|
543
|
+
should notify("1.91.must_not_be_close(2.0, 0.1)")
|
544
|
+
end
|
545
|
+
|
546
|
+
it "should not notify if receiver is much greater" do
|
547
|
+
200.0.must_not_be_close(2.0, 20.0).should == 200.0
|
548
|
+
should_not notify
|
549
|
+
end
|
550
|
+
|
551
|
+
it "should not notify if receiver is much less" do
|
552
|
+
-200.0.must_not_be_close(2.0, 20.0).should == -200.0
|
553
|
+
should_not notify
|
554
|
+
end
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
### Proc Case Equality Patch ###
|
559
|
+
|
560
|
+
describe "case equality patch" do
|
561
|
+
describe 'Proc#===' do
|
562
|
+
it "should work the same as Proc#call" do
|
563
|
+
is_less_than_three = lambda {|x| x < 3 }
|
564
|
+
is_less_than_three.should === 2
|
565
|
+
is_less_than_three.should_not === 7
|
566
|
+
|
567
|
+
is_even = lambda &:even?
|
568
|
+
is_even.should === 2
|
569
|
+
is_even.should_not === 7
|
570
|
+
end
|
571
|
+
|
572
|
+
if RUBY_VERSION < "1.9"
|
573
|
+
it "should alias Proc#call" do
|
574
|
+
Proc.instance_method(:===).should == Proc.instance_method(:call)
|
575
|
+
end
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|