test-unit 3.2.0 → 3.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/COPYING +4 -1
- data/README.md +11 -11
- data/Rakefile +10 -1
- data/doc/text/getting-started.md +246 -0
- data/doc/text/news.md +372 -1
- data/lib/test/unit.rb +171 -157
- data/lib/test/unit/assertions.rb +187 -149
- data/lib/test/unit/attribute.rb +71 -2
- data/lib/test/unit/autorunner.rb +65 -32
- data/lib/test/unit/code-snippet-fetcher.rb +7 -7
- data/lib/test/unit/collector/load.rb +8 -13
- data/lib/test/unit/data-sets.rb +116 -0
- data/lib/test/unit/data.rb +121 -12
- data/lib/test/unit/diff.rb +11 -11
- data/lib/test/unit/fixture.rb +3 -0
- data/lib/test/unit/notification.rb +9 -7
- data/lib/test/unit/omission.rb +34 -31
- data/lib/test/unit/pending.rb +12 -11
- data/lib/test/unit/priority.rb +7 -3
- data/lib/test/unit/runner/console.rb +25 -0
- data/lib/test/unit/test-suite-creator.rb +22 -8
- data/lib/test/unit/testcase.rb +270 -182
- data/lib/test/unit/ui/console/testrunner.rb +90 -35
- data/lib/test/unit/ui/emacs/testrunner.rb +5 -5
- data/lib/test/unit/util/observable.rb +2 -2
- data/lib/test/unit/util/output.rb +5 -4
- data/lib/test/unit/util/procwrapper.rb +4 -4
- data/lib/test/unit/version.rb +1 -1
- data/test/collector/test-descendant.rb +4 -0
- data/test/collector/test-load.rb +35 -2
- data/test/collector/test_dir.rb +5 -4
- data/test/collector/test_objectspace.rb +7 -5
- data/test/test-assertions.rb +128 -101
- data/test/test-code-snippet.rb +42 -0
- data/test/test-data.rb +195 -79
- data/test/test-priority.rb +19 -8
- data/test/test-test-case.rb +111 -3
- data/test/test-test-suite.rb +1 -0
- data/test/testunit-test-util.rb +2 -0
- metadata +38 -37
data/lib/test/unit/assertions.rb
CHANGED
@@ -32,9 +32,9 @@ module Test
|
|
32
32
|
#
|
33
33
|
# @example Example Custom Assertion
|
34
34
|
#
|
35
|
-
# def deny(boolean, message
|
36
|
-
# message = build_message
|
37
|
-
# assert_block
|
35
|
+
# def deny(boolean, message=nil)
|
36
|
+
# message = build_message(message, '<?> is not false or nil.', boolean)
|
37
|
+
# assert_block(message) do
|
38
38
|
# not boolean
|
39
39
|
# end
|
40
40
|
# end
|
@@ -52,7 +52,11 @@ module Test
|
|
52
52
|
def assert_block(message="assert_block failed.")
|
53
53
|
_wrap_assertion do
|
54
54
|
if (! yield)
|
55
|
-
|
55
|
+
options = {}
|
56
|
+
if message.respond_to?(:user_message)
|
57
|
+
options[:user_message] = message.user_message
|
58
|
+
end
|
59
|
+
raise AssertionFailedError.new(message.to_s, options)
|
56
60
|
end
|
57
61
|
end
|
58
62
|
end
|
@@ -153,8 +157,8 @@ module Test
|
|
153
157
|
assertion_message = message
|
154
158
|
else
|
155
159
|
error_message = "assertion message must be String, Proc or "
|
156
|
-
error_message
|
157
|
-
error_message
|
160
|
+
error_message += "#{AssertionMessage}: "
|
161
|
+
error_message += "<#{message.inspect}>(<#{message.class}>)"
|
158
162
|
raise ArgumentError, error_message, filter_backtrace(caller)
|
159
163
|
end
|
160
164
|
assertion_message ||= build_message(message,
|
@@ -167,7 +171,7 @@ module Test
|
|
167
171
|
end
|
168
172
|
end
|
169
173
|
|
170
|
-
# Asserts that
|
174
|
+
# Asserts that `object` is false or nil.
|
171
175
|
#
|
172
176
|
# @note Just for minitest compatibility. :<
|
173
177
|
#
|
@@ -192,8 +196,8 @@ module Test
|
|
192
196
|
assertion_message = message
|
193
197
|
else
|
194
198
|
error_message = "assertion message must be String, Proc or "
|
195
|
-
error_message
|
196
|
-
error_message
|
199
|
+
error_message += "#{AssertionMessage}: "
|
200
|
+
error_message += "<#{message.inspect}>(<#{message.class}>)"
|
197
201
|
raise ArgumentError, error_message, filter_backtrace(caller)
|
198
202
|
end
|
199
203
|
assert_block("refute should not be called with a block.") do
|
@@ -209,7 +213,7 @@ module Test
|
|
209
213
|
end
|
210
214
|
|
211
215
|
##
|
212
|
-
# Passes if
|
216
|
+
# Passes if `expected` == `actual`.
|
213
217
|
#
|
214
218
|
# Note that the ordering of arguments is important, since a helpful
|
215
219
|
# error message is generated when this one fails that tells you the
|
@@ -239,7 +243,7 @@ EOT
|
|
239
243
|
begin
|
240
244
|
assert_block(full_message) { expected == actual }
|
241
245
|
rescue AssertionFailedError => failure
|
242
|
-
_set_failed_information(failure, expected, actual
|
246
|
+
_set_failed_information(failure, expected, actual)
|
243
247
|
raise failure # For JRuby. :<
|
244
248
|
end
|
245
249
|
end
|
@@ -275,8 +279,7 @@ EOT
|
|
275
279
|
assert_exception_helper.expected?(actual_exception)
|
276
280
|
end
|
277
281
|
rescue AssertionFailedError => failure
|
278
|
-
_set_failed_information(failure, expected, actual_exception
|
279
|
-
message)
|
282
|
+
_set_failed_information(failure, expected, actual_exception)
|
280
283
|
raise failure # For JRuby. :<
|
281
284
|
end
|
282
285
|
end
|
@@ -311,7 +314,7 @@ EOT
|
|
311
314
|
|
312
315
|
|
313
316
|
##
|
314
|
-
# Passes if
|
317
|
+
# Passes if `object`.instance_of?(`klass`). When `klass` is
|
315
318
|
# an array of classes, it passes if any class
|
316
319
|
# satisfies +object.instance_of?(class).
|
317
320
|
#
|
@@ -319,7 +322,7 @@ EOT
|
|
319
322
|
# assert_instance_of(String, 'foo') # -> pass
|
320
323
|
# assert_instance_of([Fixnum, NilClass], 100) # -> pass
|
321
324
|
# assert_instance_of([Numeric, NilClass], 100) # -> fail
|
322
|
-
def assert_instance_of(klass, object, message=
|
325
|
+
def assert_instance_of(klass, object, message=nil)
|
323
326
|
_wrap_assertion do
|
324
327
|
if klass.is_a?(Array)
|
325
328
|
klasses = klass
|
@@ -334,7 +337,7 @@ EOT
|
|
334
337
|
"<#{value}>"
|
335
338
|
end
|
336
339
|
full_message = build_message(message, <<EOT, object, klass_message, object.class)
|
337
|
-
<?> expected to be instance_of\\?
|
340
|
+
<?> was expected to be instance_of\\?
|
338
341
|
? but was
|
339
342
|
<?>.
|
340
343
|
EOT
|
@@ -345,8 +348,8 @@ EOT
|
|
345
348
|
end
|
346
349
|
|
347
350
|
##
|
348
|
-
# Passes if
|
349
|
-
# When
|
351
|
+
# Passes if `object`.instance_of?(`klass`) does not hold.
|
352
|
+
# When `klass` is an array of classes, it passes if no class
|
350
353
|
# satisfies +object.instance_of?(class).
|
351
354
|
#
|
352
355
|
# @example
|
@@ -355,14 +358,14 @@ EOT
|
|
355
358
|
# assert_not_instance_of([Numeric, NilClass], 100) # -> fail
|
356
359
|
#
|
357
360
|
# @since 3.0.0
|
358
|
-
def assert_not_instance_of(klass, object, message=
|
361
|
+
def assert_not_instance_of(klass, object, message=nil)
|
359
362
|
_wrap_assertion do
|
360
363
|
if klass.is_a?(Array)
|
361
364
|
klasses = klass
|
362
365
|
else
|
363
366
|
klasses = [klass]
|
364
367
|
end
|
365
|
-
assert_block("The first parameter to assert_not_instance_of should be "
|
368
|
+
assert_block("The first parameter to assert_not_instance_of should be " +
|
366
369
|
"a Class or an Array of Class.") do
|
367
370
|
klasses.all? {|k| k.is_a?(Class)}
|
368
371
|
end
|
@@ -370,7 +373,7 @@ EOT
|
|
370
373
|
"<#{value}>"
|
371
374
|
end
|
372
375
|
full_message = build_message(message,
|
373
|
-
"<?> expected to not be instance_of\\?\n" +
|
376
|
+
"<?> was expected to not be instance_of\\?\n" +
|
374
377
|
"? but was.",
|
375
378
|
object,
|
376
379
|
klass_message)
|
@@ -386,19 +389,19 @@ EOT
|
|
386
389
|
alias_method :refute_instance_of, :assert_not_instance_of
|
387
390
|
|
388
391
|
##
|
389
|
-
# Passes if
|
392
|
+
# Passes if `object` is nil.
|
390
393
|
#
|
391
394
|
# @example
|
392
395
|
# assert_nil [1, 2].uniq!
|
393
|
-
def assert_nil(object, message=
|
396
|
+
def assert_nil(object, message=nil)
|
394
397
|
full_message = build_message(message, <<EOT, object)
|
395
|
-
<?> expected to be nil.
|
398
|
+
<?> was expected to be nil.
|
396
399
|
EOT
|
397
400
|
assert_block(full_message) { object.nil? }
|
398
401
|
end
|
399
402
|
|
400
403
|
##
|
401
|
-
# Passes if
|
404
|
+
# Passes if `object`.kind_of?(`klass`). When `klass` is
|
402
405
|
# an array of classes or modules, it passes if any
|
403
406
|
# class or module satisfies +object.kind_of?(class_or_module).
|
404
407
|
#
|
@@ -406,7 +409,7 @@ EOT
|
|
406
409
|
# assert_kind_of(Object, 'foo') # -> pass
|
407
410
|
# assert_kind_of([Fixnum, NilClass], 100) # -> pass
|
408
411
|
# assert_kind_of([Fixnum, NilClass], "string") # -> fail
|
409
|
-
def assert_kind_of(klass, object, message=
|
412
|
+
def assert_kind_of(klass, object, message=nil)
|
410
413
|
_wrap_assertion do
|
411
414
|
if klass.is_a?(Array)
|
412
415
|
klasses = klass
|
@@ -421,7 +424,7 @@ EOT
|
|
421
424
|
"<#{value}>"
|
422
425
|
end
|
423
426
|
full_message = build_message(message,
|
424
|
-
"<?> expected to be kind_of\\?\n" +
|
427
|
+
"<?> was expected to be kind_of\\?\n" +
|
425
428
|
"? but was\n" +
|
426
429
|
"<?>.",
|
427
430
|
object,
|
@@ -434,8 +437,8 @@ EOT
|
|
434
437
|
end
|
435
438
|
|
436
439
|
##
|
437
|
-
# Passes if
|
438
|
-
# When
|
440
|
+
# Passes if `object`.kind_of?(`klass`) does not hold.
|
441
|
+
# When `klass` is an array of classes or modules, it passes only if all
|
439
442
|
# classes (and modules) do not satisfy +object.kind_of?(class_or_module).
|
440
443
|
#
|
441
444
|
# @example
|
@@ -444,7 +447,7 @@ EOT
|
|
444
447
|
# assert_not_kind_of([Fixnum, NilClass], 100) # -> fail
|
445
448
|
#
|
446
449
|
# @since 3.0.0
|
447
|
-
def assert_not_kind_of(klass, object, message=
|
450
|
+
def assert_not_kind_of(klass, object, message=nil)
|
448
451
|
_wrap_assertion do
|
449
452
|
if klass.is_a?(Array)
|
450
453
|
klasses = klass
|
@@ -459,7 +462,7 @@ EOT
|
|
459
462
|
"<#{value}>"
|
460
463
|
end
|
461
464
|
full_message = build_message(message,
|
462
|
-
"<?> expected to not be kind_of\\?\n" +
|
465
|
+
"<?> was expected to not be kind_of\\?\n" +
|
463
466
|
"? but was.",
|
464
467
|
object,
|
465
468
|
klass_message)
|
@@ -475,11 +478,11 @@ EOT
|
|
475
478
|
alias_method :refute_kind_of, :assert_not_kind_of
|
476
479
|
|
477
480
|
##
|
478
|
-
# Passes if
|
481
|
+
# Passes if `object` .respond_to? `method`
|
479
482
|
#
|
480
483
|
# @example
|
481
484
|
# assert_respond_to 'bugbear', :slice
|
482
|
-
def assert_respond_to(object, method, message=
|
485
|
+
def assert_respond_to(object, method, message=nil)
|
483
486
|
_wrap_assertion do
|
484
487
|
full_message = build_message(message,
|
485
488
|
"<?>.kind_of\\?(Symbol) or\n" +
|
@@ -497,12 +500,12 @@ EOT
|
|
497
500
|
end
|
498
501
|
|
499
502
|
##
|
500
|
-
# Passes if
|
503
|
+
# Passes if `object` does not .respond_to? `method`.
|
501
504
|
#
|
502
505
|
# @example
|
503
506
|
# assert_not_respond_to('bugbear', :nonexistence) # -> pass
|
504
507
|
# assert_not_respond_to('bugbear', :size) # -> fail
|
505
|
-
def assert_not_respond_to(object, method, message=
|
508
|
+
def assert_not_respond_to(object, method, message=nil)
|
506
509
|
_wrap_assertion do
|
507
510
|
full_message = build_message(message,
|
508
511
|
"<?>.kind_of\\?(Symbol) or\n" +
|
@@ -525,11 +528,11 @@ EOT
|
|
525
528
|
alias_method :refute_respond_to, :assert_not_respond_to
|
526
529
|
|
527
530
|
##
|
528
|
-
# Passes if
|
531
|
+
# Passes if `pattern` =~ `string`.
|
529
532
|
#
|
530
533
|
# @example
|
531
534
|
# assert_match(/\d+/, 'five, 6, seven')
|
532
|
-
def assert_match(pattern, string, message=
|
535
|
+
def assert_match(pattern, string, message=nil)
|
533
536
|
_wrap_assertion do
|
534
537
|
pattern = case(pattern)
|
535
538
|
when String
|
@@ -537,23 +540,24 @@ EOT
|
|
537
540
|
else
|
538
541
|
pattern
|
539
542
|
end
|
540
|
-
full_message = build_message(message,
|
543
|
+
full_message = build_message(message,
|
544
|
+
"<?> was expected to be =~\n<?>.",
|
541
545
|
pattern, string)
|
542
546
|
assert_block(full_message) { pattern =~ string }
|
543
547
|
end
|
544
548
|
end
|
545
549
|
|
546
550
|
##
|
547
|
-
# Passes if
|
551
|
+
# Passes if `actual` .equal? `expected` (i.e. they are the same
|
548
552
|
# instance).
|
549
553
|
#
|
550
554
|
# @example
|
551
555
|
# o = Object.new
|
552
556
|
# assert_same o, o
|
553
|
-
def assert_same(expected, actual, message=
|
557
|
+
def assert_same(expected, actual, message=nil)
|
554
558
|
full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
|
555
559
|
<?>
|
556
|
-
with id <?> expected to be equal\\? to
|
560
|
+
with id <?> was expected to be equal\\? to
|
557
561
|
<?>
|
558
562
|
with id <?>.
|
559
563
|
EOT
|
@@ -561,18 +565,18 @@ EOT
|
|
561
565
|
end
|
562
566
|
|
563
567
|
##
|
564
|
-
# Compares the
|
568
|
+
# Compares the `object1` with `object2` using `operator`.
|
565
569
|
#
|
566
570
|
# Passes if object1.__send__(operator, object2) is true.
|
567
571
|
#
|
568
572
|
# @example
|
569
573
|
# assert_operator 5, :>=, 4
|
570
|
-
def assert_operator(object1, operator, object2, message=
|
574
|
+
def assert_operator(object1, operator, object2, message=nil)
|
571
575
|
_wrap_assertion do
|
572
576
|
full_message = build_message(nil, "<?>\ngiven as the operator for #assert_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
|
573
577
|
assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
|
574
578
|
full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
|
575
|
-
<?> expected to be
|
579
|
+
<?> was expected to be
|
576
580
|
?
|
577
581
|
<?>.
|
578
582
|
EOT
|
@@ -581,7 +585,7 @@ EOT
|
|
581
585
|
end
|
582
586
|
|
583
587
|
##
|
584
|
-
# Compares the
|
588
|
+
# Compares the `object1` with `object2` using `operator`.
|
585
589
|
#
|
586
590
|
# Passes if object1.__send__(operator, object2) is not true.
|
587
591
|
#
|
@@ -590,12 +594,12 @@ EOT
|
|
590
594
|
# assert_not_operator(5, :>, 4) # => fail
|
591
595
|
#
|
592
596
|
# @since 3.0.0
|
593
|
-
def assert_not_operator(object1, operator, object2, message=
|
597
|
+
def assert_not_operator(object1, operator, object2, message=nil)
|
594
598
|
_wrap_assertion do
|
595
599
|
full_message = build_message(nil, "<?>\ngiven as the operator for #assert_not_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
|
596
600
|
assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
|
597
601
|
full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
|
598
|
-
<?> expected to not be
|
602
|
+
<?> was expected to not be
|
599
603
|
?
|
600
604
|
<?>.
|
601
605
|
EOT
|
@@ -648,14 +652,14 @@ EOT
|
|
648
652
|
end
|
649
653
|
|
650
654
|
##
|
651
|
-
# Passes if !
|
655
|
+
# Passes if ! `actual` .equal? `expected`
|
652
656
|
#
|
653
657
|
# @example
|
654
658
|
# assert_not_same Object.new, Object.new
|
655
|
-
def assert_not_same(expected, actual, message=
|
659
|
+
def assert_not_same(expected, actual, message=nil)
|
656
660
|
full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
|
657
661
|
<?>
|
658
|
-
with id <?> expected to not be equal\\? to
|
662
|
+
with id <?> was expected to not be equal\\? to
|
659
663
|
<?>
|
660
664
|
with id <?>.
|
661
665
|
EOT
|
@@ -668,12 +672,14 @@ EOT
|
|
668
672
|
alias_method :refute_same, :assert_not_same
|
669
673
|
|
670
674
|
##
|
671
|
-
# Passes if
|
675
|
+
# Passes if `expected` != `actual`
|
672
676
|
#
|
673
677
|
# @example
|
674
678
|
# assert_not_equal 'some string', 5
|
675
|
-
def assert_not_equal(expected, actual, message=
|
676
|
-
full_message = build_message(message,
|
679
|
+
def assert_not_equal(expected, actual, message=nil)
|
680
|
+
full_message = build_message(message,
|
681
|
+
"<?> was expected to be != to\n<?>.",
|
682
|
+
expected, actual)
|
677
683
|
assert_block(full_message) { expected != actual }
|
678
684
|
end
|
679
685
|
|
@@ -683,12 +689,14 @@ EOT
|
|
683
689
|
alias_method :refute_equal, :assert_not_equal
|
684
690
|
|
685
691
|
##
|
686
|
-
# Passes if !
|
692
|
+
# Passes if ! `object` .nil?
|
687
693
|
#
|
688
694
|
# @example
|
689
695
|
# assert_not_nil '1 two 3'.sub!(/two/, '2')
|
690
|
-
def assert_not_nil(object, message=
|
691
|
-
full_message = build_message(message,
|
696
|
+
def assert_not_nil(object, message=nil)
|
697
|
+
full_message = build_message(message,
|
698
|
+
"<?> was expected to not be nil.",
|
699
|
+
object)
|
692
700
|
assert_block(full_message){!object.nil?}
|
693
701
|
end
|
694
702
|
|
@@ -698,18 +706,18 @@ EOT
|
|
698
706
|
alias_method :refute_nil, :assert_not_nil
|
699
707
|
|
700
708
|
##
|
701
|
-
# Passes if
|
709
|
+
# Passes if `regexp` !~ `string`
|
702
710
|
#
|
703
711
|
# @example
|
704
712
|
# assert_not_match(/two/, 'one 2 three') # -> pass
|
705
713
|
# assert_not_match(/three/, 'one 2 three') # -> fail
|
706
|
-
def assert_not_match(regexp, string, message=
|
714
|
+
def assert_not_match(regexp, string, message=nil)
|
707
715
|
_wrap_assertion do
|
708
716
|
assert_instance_of(Regexp, regexp,
|
709
717
|
"<REGEXP> in assert_not_match(<REGEXP>, ...) " +
|
710
718
|
"should be a Regexp.")
|
711
719
|
full_message = build_message(message,
|
712
|
-
"<?> expected to not match\n<?>.",
|
720
|
+
"<?> was expected to not match\n<?>.",
|
713
721
|
regexp, string)
|
714
722
|
assert_block(full_message) { regexp !~ string }
|
715
723
|
end
|
@@ -723,7 +731,7 @@ EOT
|
|
723
731
|
##
|
724
732
|
# Deprecated. Use #assert_not_match instead.
|
725
733
|
#
|
726
|
-
# Passes if
|
734
|
+
# Passes if `regexp` !~ `string`
|
727
735
|
#
|
728
736
|
# @example
|
729
737
|
# assert_no_match(/two/, 'one 2 three') # -> pass
|
@@ -781,13 +789,13 @@ EOT
|
|
781
789
|
end
|
782
790
|
|
783
791
|
##
|
784
|
-
# Passes if the block throws
|
792
|
+
# Passes if the block throws `expected_object`
|
785
793
|
#
|
786
794
|
# @example
|
787
795
|
# assert_throw(:done) do
|
788
796
|
# throw(:done)
|
789
797
|
# end
|
790
|
-
def assert_throw(expected_object, message=
|
798
|
+
def assert_throw(expected_object, message=nil, &proc)
|
791
799
|
_wrap_assertion do
|
792
800
|
begin
|
793
801
|
catch([]) {}
|
@@ -813,7 +821,7 @@ EOT
|
|
813
821
|
tag = extractor.extract_tag
|
814
822
|
raise if tag.nil?
|
815
823
|
full_message = build_message(message,
|
816
|
-
"<?> expected to be thrown but\n" +
|
824
|
+
"<?> was expected to be thrown but\n" +
|
817
825
|
"<?> was thrown.",
|
818
826
|
expected_object, tag)
|
819
827
|
flunk(full_message)
|
@@ -833,7 +841,7 @@ EOT
|
|
833
841
|
# assert_nothing_thrown do
|
834
842
|
# [1, 2].uniq
|
835
843
|
# end
|
836
|
-
def assert_nothing_thrown(message=
|
844
|
+
def assert_nothing_thrown(message=nil, &proc)
|
837
845
|
_wrap_assertion do
|
838
846
|
assert(block_given?, "Should have passed a block to assert_nothing_thrown")
|
839
847
|
begin
|
@@ -852,8 +860,8 @@ EOT
|
|
852
860
|
end
|
853
861
|
|
854
862
|
##
|
855
|
-
# Passes if
|
856
|
-
# within
|
863
|
+
# Passes if `expected_float` and `actual_float` are equal
|
864
|
+
# within `delta` tolerance.
|
857
865
|
#
|
858
866
|
# @example
|
859
867
|
# assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
|
@@ -873,8 +881,8 @@ EOT
|
|
873
881
|
end
|
874
882
|
|
875
883
|
##
|
876
|
-
# Passes if
|
877
|
-
# not equal within
|
884
|
+
# Passes if `expected_float` and `actual_float` are
|
885
|
+
# not equal within `delta` tolerance.
|
878
886
|
#
|
879
887
|
# @example
|
880
888
|
# assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00002) # -> pass
|
@@ -921,12 +929,12 @@ EOT
|
|
921
929
|
message, options={})
|
922
930
|
if options[:negative_assertion]
|
923
931
|
format = <<-EOT
|
924
|
-
<?> -/+ <?> expected to not include
|
932
|
+
<?> -/+ <?> was expected to not include
|
925
933
|
<?>.
|
926
934
|
EOT
|
927
935
|
else
|
928
936
|
format = <<-EOT
|
929
|
-
<?> -/+ <?> expected to include
|
937
|
+
<?> -/+ <?> was expected to include
|
930
938
|
<?>.
|
931
939
|
EOT
|
932
940
|
end
|
@@ -960,7 +968,7 @@ EOT
|
|
960
968
|
end
|
961
969
|
|
962
970
|
if relation_format
|
963
|
-
format
|
971
|
+
format += <<-EOT
|
964
972
|
|
965
973
|
Relation:
|
966
974
|
#{relation_format}
|
@@ -973,8 +981,8 @@ EOT
|
|
973
981
|
|
974
982
|
public
|
975
983
|
##
|
976
|
-
# Passes if
|
977
|
-
# within
|
984
|
+
# Passes if `expected_float` and `actual_float` are equal
|
985
|
+
# within `epsilon` relative error of `expected_float`.
|
978
986
|
#
|
979
987
|
# @example
|
980
988
|
# assert_in_epsilon(10000.0, 9900.0, 0.1) # -> pass
|
@@ -1003,9 +1011,9 @@ EOT
|
|
1003
1011
|
end
|
1004
1012
|
|
1005
1013
|
##
|
1006
|
-
# Passes if
|
1007
|
-
# not equal within
|
1008
|
-
#
|
1014
|
+
# Passes if `expected_float` and `actual_float` are
|
1015
|
+
# not equal within `epsilon` relative error of
|
1016
|
+
# `expected_float`.
|
1009
1017
|
#
|
1010
1018
|
# @example
|
1011
1019
|
# assert_not_in_epsilon(10000.0, 9900.0, 0.1) # -> fail
|
@@ -1060,12 +1068,12 @@ EOT
|
|
1060
1068
|
|
1061
1069
|
if options[:negative_assertion]
|
1062
1070
|
format = <<-EOT
|
1063
|
-
<?> -/+ (<?> * <?>)[?] expected to not include
|
1071
|
+
<?> -/+ (<?> * <?>)[?] was expected to not include
|
1064
1072
|
<?>.
|
1065
1073
|
EOT
|
1066
1074
|
else
|
1067
1075
|
format = <<-EOT
|
1068
|
-
<?> -/+ (<?> * <?>)[?] expected to include
|
1076
|
+
<?> -/+ (<?> * <?>)[?] was expected to include
|
1069
1077
|
<?>.
|
1070
1078
|
EOT
|
1071
1079
|
end
|
@@ -1098,7 +1106,7 @@ EOT
|
|
1098
1106
|
end
|
1099
1107
|
|
1100
1108
|
if relation_format
|
1101
|
-
format
|
1109
|
+
format += <<-EOT
|
1102
1110
|
|
1103
1111
|
Relation:
|
1104
1112
|
#{relation_format}
|
@@ -1113,7 +1121,7 @@ EOT
|
|
1113
1121
|
##
|
1114
1122
|
# Passes if the method send returns a true value.
|
1115
1123
|
#
|
1116
|
-
#
|
1124
|
+
# `send_array` is composed of:
|
1117
1125
|
# * A receiver
|
1118
1126
|
# * A method
|
1119
1127
|
# * Arguments to the method
|
@@ -1130,7 +1138,7 @@ EOT
|
|
1130
1138
|
"assert_send requires at least a receiver " +
|
1131
1139
|
"and a message name")
|
1132
1140
|
format = <<EOT
|
1133
|
-
<?> expected to respond to
|
1141
|
+
<?> was expected to respond to
|
1134
1142
|
<?(*?)> with a true value but was
|
1135
1143
|
<?>.
|
1136
1144
|
EOT
|
@@ -1153,7 +1161,7 @@ EOT
|
|
1153
1161
|
##
|
1154
1162
|
# Passes if the method send doesn't return a true value.
|
1155
1163
|
#
|
1156
|
-
#
|
1164
|
+
# `send_array` is composed of:
|
1157
1165
|
# * A receiver
|
1158
1166
|
# * A method
|
1159
1167
|
# * Arguments to the method
|
@@ -1170,7 +1178,7 @@ EOT
|
|
1170
1178
|
"assert_not_send requires at least a receiver " +
|
1171
1179
|
"and a message name")
|
1172
1180
|
format = <<EOT
|
1173
|
-
<?> expected to respond to
|
1181
|
+
<?> was expected to respond to
|
1174
1182
|
<?(*?)> with not a true value but was
|
1175
1183
|
<?>.
|
1176
1184
|
EOT
|
@@ -1191,7 +1199,7 @@ EOT
|
|
1191
1199
|
end
|
1192
1200
|
|
1193
1201
|
##
|
1194
|
-
# Passes if
|
1202
|
+
# Passes if `actual` is a boolean value.
|
1195
1203
|
#
|
1196
1204
|
# @example
|
1197
1205
|
# assert_boolean(true) # -> pass
|
@@ -1207,7 +1215,7 @@ EOT
|
|
1207
1215
|
end
|
1208
1216
|
|
1209
1217
|
##
|
1210
|
-
# Passes if
|
1218
|
+
# Passes if `actual` is true.
|
1211
1219
|
#
|
1212
1220
|
# @example
|
1213
1221
|
# assert_true(true) # -> pass
|
@@ -1223,7 +1231,7 @@ EOT
|
|
1223
1231
|
end
|
1224
1232
|
|
1225
1233
|
##
|
1226
|
-
# Passes if
|
1234
|
+
# Passes if `actual` is false.
|
1227
1235
|
#
|
1228
1236
|
# @example
|
1229
1237
|
# assert_false(false) # -> pass
|
@@ -1239,8 +1247,8 @@ EOT
|
|
1239
1247
|
end
|
1240
1248
|
|
1241
1249
|
##
|
1242
|
-
# Passes if expression "
|
1243
|
-
#
|
1250
|
+
# Passes if expression "`expected` `operator`
|
1251
|
+
# `actual`" is true.
|
1244
1252
|
#
|
1245
1253
|
# @example
|
1246
1254
|
# assert_compare(1, "<", 10) # -> pass
|
@@ -1260,7 +1268,7 @@ EOT
|
|
1260
1268
|
end
|
1261
1269
|
template = <<-EOT
|
1262
1270
|
<?> #{operator} <?> should be true
|
1263
|
-
<?> expected #{operator_description}
|
1271
|
+
<?> was expected to be #{operator_description}
|
1264
1272
|
<?>.
|
1265
1273
|
EOT
|
1266
1274
|
full_message = build_message(message, template,
|
@@ -1295,7 +1303,7 @@ EOT
|
|
1295
1303
|
|
1296
1304
|
##
|
1297
1305
|
# Passes if an exception is raised in block and its
|
1298
|
-
# message is
|
1306
|
+
# message is `expected`.
|
1299
1307
|
#
|
1300
1308
|
# @example
|
1301
1309
|
# assert_raise_message("exception") {raise "exception"} # -> pass
|
@@ -1305,7 +1313,7 @@ EOT
|
|
1305
1313
|
def assert_raise_message(expected, message=nil)
|
1306
1314
|
_wrap_assertion do
|
1307
1315
|
full_message = build_message(message,
|
1308
|
-
"<?> exception message expected " +
|
1316
|
+
"<?> exception message was expected " +
|
1309
1317
|
"but none was thrown.",
|
1310
1318
|
expected)
|
1311
1319
|
exception = nil
|
@@ -1335,7 +1343,7 @@ EOT
|
|
1335
1343
|
end
|
1336
1344
|
|
1337
1345
|
##
|
1338
|
-
# Passes if
|
1346
|
+
# Passes if `object`.const_defined?(`constant_name`)
|
1339
1347
|
#
|
1340
1348
|
# @example
|
1341
1349
|
# assert_const_defined(Test, :Unit) # -> pass
|
@@ -1352,7 +1360,7 @@ EOT
|
|
1352
1360
|
end
|
1353
1361
|
|
1354
1362
|
##
|
1355
|
-
# Passes if
|
1363
|
+
# Passes if !`object`.const_defined?(`constant_name`)
|
1356
1364
|
#
|
1357
1365
|
# @example
|
1358
1366
|
# assert_not_const_defined(Object, :Nonexistent) # -> pass
|
@@ -1369,7 +1377,7 @@ EOT
|
|
1369
1377
|
end
|
1370
1378
|
|
1371
1379
|
##
|
1372
|
-
# Passes if
|
1380
|
+
# Passes if `object`.`predicate` is _true_.
|
1373
1381
|
#
|
1374
1382
|
# @example
|
1375
1383
|
# assert_predicate([], :empty?) # -> pass
|
@@ -1391,7 +1399,7 @@ EOT
|
|
1391
1399
|
end
|
1392
1400
|
|
1393
1401
|
##
|
1394
|
-
# Passes if
|
1402
|
+
# Passes if `object`.`predicate` is not _true_.
|
1395
1403
|
#
|
1396
1404
|
# @example
|
1397
1405
|
# assert_not_predicate([1], :empty?) # -> pass
|
@@ -1418,8 +1426,8 @@ EOT
|
|
1418
1426
|
alias_method :refute_predicate, :assert_not_predicate
|
1419
1427
|
|
1420
1428
|
##
|
1421
|
-
# Passes if
|
1422
|
-
#
|
1429
|
+
# Passes if `object`#`alias_name` is an alias method of
|
1430
|
+
# `object`#`original_name`.
|
1423
1431
|
#
|
1424
1432
|
# @example
|
1425
1433
|
# assert_alias_method([], :length, :size) # -> pass
|
@@ -1466,7 +1474,7 @@ EOT
|
|
1466
1474
|
end
|
1467
1475
|
|
1468
1476
|
##
|
1469
|
-
# Passes if
|
1477
|
+
# Passes if `path` exists.
|
1470
1478
|
#
|
1471
1479
|
# @example
|
1472
1480
|
# assert_path_exist("/tmp") # -> pass
|
@@ -1475,7 +1483,7 @@ EOT
|
|
1475
1483
|
def assert_path_exist(path, message=nil)
|
1476
1484
|
_wrap_assertion do
|
1477
1485
|
failure_message = build_message(message,
|
1478
|
-
"<?> expected to exist",
|
1486
|
+
"<?> was expected to exist",
|
1479
1487
|
path)
|
1480
1488
|
assert_block(failure_message) do
|
1481
1489
|
File.exist?(path)
|
@@ -1484,7 +1492,7 @@ EOT
|
|
1484
1492
|
end
|
1485
1493
|
|
1486
1494
|
##
|
1487
|
-
# Passes if
|
1495
|
+
# Passes if `path` doesn't exist.
|
1488
1496
|
#
|
1489
1497
|
# @example
|
1490
1498
|
# assert_path_not_exist("/nonexistent") # -> pass
|
@@ -1493,7 +1501,7 @@ EOT
|
|
1493
1501
|
def assert_path_not_exist(path, message=nil)
|
1494
1502
|
_wrap_assertion do
|
1495
1503
|
failure_message = build_message(message,
|
1496
|
-
"<?> expected to not exist",
|
1504
|
+
"<?> was expected to not exist",
|
1497
1505
|
path)
|
1498
1506
|
assert_block(failure_message) do
|
1499
1507
|
not File.exist?(path)
|
@@ -1502,7 +1510,7 @@ EOT
|
|
1502
1510
|
end
|
1503
1511
|
|
1504
1512
|
##
|
1505
|
-
# Passes if
|
1513
|
+
# Passes if `collection` includes `object`.
|
1506
1514
|
#
|
1507
1515
|
# @example
|
1508
1516
|
# assert_include([1, 10], 1) # -> pass
|
@@ -1514,7 +1522,7 @@ EOT
|
|
1514
1522
|
assert_respond_to(collection, :include?,
|
1515
1523
|
"The collection must respond to :include?.")
|
1516
1524
|
full_message = build_message(message,
|
1517
|
-
"<?> expected to include\n<?>.",
|
1525
|
+
"<?> was expected to include\n<?>.",
|
1518
1526
|
collection,
|
1519
1527
|
object)
|
1520
1528
|
assert_block(full_message) do
|
@@ -1529,7 +1537,7 @@ EOT
|
|
1529
1537
|
alias_method :assert_includes, :assert_include
|
1530
1538
|
|
1531
1539
|
##
|
1532
|
-
# Passes if
|
1540
|
+
# Passes if `collection` doesn't include `object`.
|
1533
1541
|
#
|
1534
1542
|
# @example
|
1535
1543
|
# assert_not_include([1, 10], 5) # -> pass
|
@@ -1541,7 +1549,7 @@ EOT
|
|
1541
1549
|
assert_respond_to(collection, :include?,
|
1542
1550
|
"The collection must respond to :include?.")
|
1543
1551
|
full_message = build_message(message,
|
1544
|
-
"<?> expected to not include\n<?>.",
|
1552
|
+
"<?> was expected to not include\n<?>.",
|
1545
1553
|
collection,
|
1546
1554
|
object)
|
1547
1555
|
assert_block(full_message) do
|
@@ -1561,7 +1569,7 @@ EOT
|
|
1561
1569
|
alias_method :refute_includes, :assert_not_include
|
1562
1570
|
|
1563
1571
|
##
|
1564
|
-
# Passes if
|
1572
|
+
# Passes if `object` is empty.
|
1565
1573
|
#
|
1566
1574
|
# @example
|
1567
1575
|
# assert_empty("") # -> pass
|
@@ -1575,7 +1583,7 @@ EOT
|
|
1575
1583
|
assert_respond_to(object, :empty?,
|
1576
1584
|
"The object must respond to :empty?.")
|
1577
1585
|
full_message = build_message(message,
|
1578
|
-
"<?> expected to be empty.",
|
1586
|
+
"<?> was expected to be empty.",
|
1579
1587
|
object)
|
1580
1588
|
assert_block(full_message) do
|
1581
1589
|
object.empty?
|
@@ -1584,7 +1592,7 @@ EOT
|
|
1584
1592
|
end
|
1585
1593
|
|
1586
1594
|
##
|
1587
|
-
# Passes if
|
1595
|
+
# Passes if `object` is not empty.
|
1588
1596
|
#
|
1589
1597
|
# @example
|
1590
1598
|
# assert_not_empty(" ") # -> pass
|
@@ -1598,7 +1606,7 @@ EOT
|
|
1598
1606
|
assert_respond_to(object, :empty?,
|
1599
1607
|
"The object must respond to :empty?.")
|
1600
1608
|
full_message = build_message(message,
|
1601
|
-
"<?> expected to not be empty.",
|
1609
|
+
"<?> was expected to not be empty.",
|
1602
1610
|
object)
|
1603
1611
|
assert_block(full_message) do
|
1604
1612
|
not object.empty?
|
@@ -1612,11 +1620,12 @@ EOT
|
|
1612
1620
|
alias_method :refute_empty, :assert_not_empty
|
1613
1621
|
|
1614
1622
|
##
|
1615
|
-
# Builds a failure message.
|
1616
|
-
#
|
1617
|
-
|
1623
|
+
# Builds a failure message. `user_message` is added before the
|
1624
|
+
# `template` and `arguments` replaces the '?'s positionally in
|
1625
|
+
# the template.
|
1626
|
+
def build_message(user_message, template=nil, *arguments)
|
1618
1627
|
template &&= template.chomp
|
1619
|
-
return AssertionMessage.new(
|
1628
|
+
return AssertionMessage.new(user_message, template, arguments)
|
1620
1629
|
end
|
1621
1630
|
|
1622
1631
|
private
|
@@ -1666,7 +1675,7 @@ EOT
|
|
1666
1675
|
expected = assert_exception_helper.expected_exceptions
|
1667
1676
|
actual_exception = nil
|
1668
1677
|
full_message = build_message(message,
|
1669
|
-
"<?> exception expected " +
|
1678
|
+
"<?> exception was expected " +
|
1670
1679
|
"but none was thrown.",
|
1671
1680
|
expected)
|
1672
1681
|
assert_block(full_message) do
|
@@ -1683,12 +1692,11 @@ EOT
|
|
1683
1692
|
end
|
1684
1693
|
end
|
1685
1694
|
|
1686
|
-
def _set_failed_information(failure, expected, actual
|
1695
|
+
def _set_failed_information(failure, expected, actual)
|
1687
1696
|
failure.expected = expected
|
1688
1697
|
failure.actual = actual
|
1689
1698
|
failure.inspected_expected = AssertionMessage.convert(expected)
|
1690
1699
|
failure.inspected_actual = AssertionMessage.convert(actual)
|
1691
|
-
failure.user_message = user_message
|
1692
1700
|
end
|
1693
1701
|
|
1694
1702
|
class AssertionMessage
|
@@ -1775,7 +1783,7 @@ EOT
|
|
1775
1783
|
|
1776
1784
|
if Diff.need_fold?(diff)
|
1777
1785
|
folded_diff = Diff.folded_readable(from, to)
|
1778
|
-
diff
|
1786
|
+
diff += "\n\nfolded diff:\n#{folded_diff}"
|
1779
1787
|
end
|
1780
1788
|
|
1781
1789
|
diff
|
@@ -1789,9 +1797,9 @@ EOT
|
|
1789
1797
|
inspector = Inspector.new(object)
|
1790
1798
|
if use_pp
|
1791
1799
|
begin
|
1792
|
-
require
|
1800
|
+
require "pp" unless defined?(PP)
|
1793
1801
|
begin
|
1794
|
-
return PP.pp(inspector,
|
1802
|
+
return PP.pp(inspector, String.new).chomp
|
1795
1803
|
rescue NameError
|
1796
1804
|
end
|
1797
1805
|
rescue LoadError
|
@@ -2040,34 +2048,34 @@ EOT
|
|
2040
2048
|
expanded_template = ""
|
2041
2049
|
@parts.each do |part|
|
2042
2050
|
if part == '?'
|
2043
|
-
|
2051
|
+
param = params.shift
|
2052
|
+
if Object.const_defined?(:Encoding)
|
2053
|
+
expanded_template += concatenatable(param,
|
2054
|
+
expanded_template.encoding)
|
2055
|
+
else
|
2056
|
+
expanded_template += param
|
2057
|
+
end
|
2044
2058
|
else
|
2045
|
-
expanded_template
|
2059
|
+
expanded_template += part.gsub(/\\\?/m, '?')
|
2046
2060
|
end
|
2047
2061
|
end
|
2048
2062
|
expanded_template
|
2049
2063
|
end
|
2050
2064
|
|
2051
2065
|
private
|
2052
|
-
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2057
|
-
buffer << parameter.dup.force_encoding(buffer.encoding)
|
2058
|
-
end
|
2059
|
-
end
|
2060
|
-
else
|
2061
|
-
def encoding_safe_concat(buffer, parameter)
|
2062
|
-
buffer << parameter
|
2066
|
+
def concatenatable(text, encoding)
|
2067
|
+
if Encoding.compatible?(text, encoding)
|
2068
|
+
text
|
2069
|
+
else
|
2070
|
+
text.dup.force_encoding(encoding)
|
2063
2071
|
end
|
2064
2072
|
end
|
2065
2073
|
end
|
2066
2074
|
|
2067
2075
|
include Util::BacktraceFilter
|
2068
2076
|
|
2069
|
-
def initialize(
|
2070
|
-
@
|
2077
|
+
def initialize(user_message, template_string, parameters)
|
2078
|
+
@user_message = user_message
|
2071
2079
|
@template_string = template_string
|
2072
2080
|
@parameters = parameters
|
2073
2081
|
end
|
@@ -2080,24 +2088,28 @@ EOT
|
|
2080
2088
|
@template ||= Template.create(@template_string)
|
2081
2089
|
end
|
2082
2090
|
|
2083
|
-
def
|
2084
|
-
|
2091
|
+
def user_message
|
2092
|
+
return nil unless @user_message
|
2093
|
+
message = @user_message
|
2094
|
+
message = message.call if message.respond_to?(:call)
|
2095
|
+
message.to_s
|
2085
2096
|
end
|
2086
2097
|
|
2087
2098
|
def to_s
|
2088
2099
|
message_parts = []
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
head = head.to_s
|
2093
|
-
unless(head.empty?)
|
2094
|
-
message_parts << add_period(head)
|
2095
|
-
end
|
2100
|
+
head = user_message
|
2101
|
+
if head and not head.empty?
|
2102
|
+
message_parts << add_period(head)
|
2096
2103
|
end
|
2097
2104
|
tail = template.result(@parameters.collect{|e| convert(e)})
|
2098
2105
|
message_parts << tail unless(tail.empty?)
|
2099
2106
|
message_parts.join("\n")
|
2100
2107
|
end
|
2108
|
+
|
2109
|
+
private
|
2110
|
+
def add_period(string)
|
2111
|
+
(string =~ /\.\Z/ ? string : string + '.')
|
2112
|
+
end
|
2101
2113
|
end
|
2102
2114
|
|
2103
2115
|
class AssertExceptionHelper
|
@@ -2169,19 +2181,45 @@ EOT
|
|
2169
2181
|
expected_exceptions.each do |exception_type|
|
2170
2182
|
if exception_type.instance_of?(Module)
|
2171
2183
|
exception_modules << exception_type
|
2172
|
-
elsif
|
2184
|
+
elsif exception_object?(exception_type)
|
2173
2185
|
exception_objects << exception_type
|
2174
|
-
|
2175
|
-
@test_case.__send__(:assert,
|
2176
|
-
Exception >= exception_type,
|
2177
|
-
"Should expect a class of exception, " +
|
2178
|
-
"#{exception_type}")
|
2186
|
+
elsif exception_class?(exception_type)
|
2179
2187
|
exception_classes << exception_type
|
2188
|
+
else
|
2189
|
+
full_message =
|
2190
|
+
@test_case.__send__(:build_message,
|
2191
|
+
nil,
|
2192
|
+
"<?> must be " +
|
2193
|
+
"a subclass of Exception, " +
|
2194
|
+
"an object of Exception subclasses " +
|
2195
|
+
"or a Module",
|
2196
|
+
exception_type)
|
2197
|
+
@test_case.flunk(full_message)
|
2180
2198
|
end
|
2181
2199
|
end
|
2182
2200
|
[exception_classes, exception_modules, exception_objects]
|
2183
2201
|
end
|
2184
2202
|
|
2203
|
+
def exception_object?(exception_type)
|
2204
|
+
return true if exception_type.is_a?(Exception)
|
2205
|
+
|
2206
|
+
if Object.const_defined?(:Java)
|
2207
|
+
return true if exception_type.is_a?(Java::JavaLang::Throwable)
|
2208
|
+
end
|
2209
|
+
|
2210
|
+
false
|
2211
|
+
end
|
2212
|
+
|
2213
|
+
def exception_class?(exception_type)
|
2214
|
+
return true if exception_type <= Exception
|
2215
|
+
|
2216
|
+
if Object.const_defined?(:Java)
|
2217
|
+
return true if exception_type <= Java::JavaLang::Throwable
|
2218
|
+
end
|
2219
|
+
|
2220
|
+
false
|
2221
|
+
end
|
2222
|
+
|
2185
2223
|
def expected_class?(actual_exception, equality)
|
2186
2224
|
@expected_classes.any? do |expected_class|
|
2187
2225
|
actual_exception.__send__(equality, expected_class)
|