glib2 0.90.7-x86-mingw32 → 0.90.8-x86-mingw32
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/ChangeLog +68 -0
- data/ext/glib2/rbglib.c +51 -15
- data/ext/glib2/rbglib.h +10 -2
- data/ext/glib2/rbglib_bookmarkfile.c +37 -74
- data/ext/glib2/rbglib_completion.c +8 -16
- data/ext/glib2/rbglib_convert.c +8 -18
- data/ext/glib2/rbglib_error.c +2 -8
- data/ext/glib2/rbglib_i18n.c +1 -2
- data/ext/glib2/rbglib_iochannel.c +81 -127
- data/ext/glib2/rbglib_keyfile.c +38 -86
- data/ext/glib2/rbglib_maincontext.c +29 -64
- data/ext/glib2/rbglib_mainloop.c +4 -8
- data/ext/glib2/rbglib_messages.c +7 -17
- data/ext/glib2/rbglib_pollfd.c +7 -14
- data/ext/glib2/rbglib_shell.c +3 -6
- data/ext/glib2/rbglib_source.c +14 -28
- data/ext/glib2/rbglib_spawn.c +7 -14
- data/ext/glib2/rbglib_threads.c +2 -4
- data/ext/glib2/rbglib_timer.c +7 -14
- data/ext/glib2/rbglib_unicode.c +45 -16
- data/ext/glib2/rbglib_utils.c +25 -50
- data/ext/glib2/rbglib_win32.c +10 -17
- data/ext/glib2/rbgobj_boxed.c +9 -21
- data/ext/glib2/rbgobj_closure.c +5 -11
- data/ext/glib2/rbgobj_enums.c +1 -2
- data/ext/glib2/rbgobj_object.c +23 -59
- data/ext/glib2/rbgobj_param.c +7 -15
- data/ext/glib2/rbgobj_signal.c +25 -65
- data/ext/glib2/rbgobj_type.c +36 -81
- data/ext/glib2/rbgobj_typeinstance.c +3 -6
- data/ext/glib2/rbgobj_typeinterface.c +3 -6
- data/ext/glib2/rbgobj_typemodule.c +4 -8
- data/ext/glib2/rbgobj_typeplugin.c +2 -4
- data/ext/glib2/rbgobj_valuetypes.c +7 -15
- data/ext/glib2/rbgobject.c +8 -18
- data/ext/glib2/rbgobject.h +3 -0
- data/ext/glib2/rbgprivate.h +0 -1
- data/ext/glib2/rbgutil.c +3 -6
- data/lib/1.8/glib2.so +0 -0
- data/lib/1.9/glib2.so +0 -0
- data/lib/gnome2-raketask.rb +1 -0
- data/lib/mkmf-gnome2.rb +12 -9
- data/test-unit/History.txt +43 -1
- data/test-unit/Manifest.txt +1 -1
- data/test-unit/html/index.html +62 -24
- data/test-unit/html/index.html.ja +54 -25
- data/test-unit/html/test-unit.css +3 -3
- data/test-unit/lib/test/unit/assertions.rb +489 -36
- data/test-unit/lib/test/unit/autorunner.rb +40 -0
- data/test-unit/lib/test/unit/collector.rb +6 -4
- data/test-unit/lib/test/unit/collector/load.rb +48 -5
- data/test-unit/lib/test/unit/collector/xml.rb +250 -0
- data/test-unit/lib/test/unit/error.rb +4 -3
- data/test-unit/lib/test/unit/fixture.rb +12 -3
- data/test-unit/lib/test/unit/runner/xml.rb +15 -0
- data/test-unit/lib/test/unit/testcase.rb +48 -16
- data/test-unit/lib/test/unit/testresult.rb +6 -2
- data/test-unit/lib/test/unit/testsuite.rb +24 -2
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +65 -28
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +11 -2
- data/test-unit/lib/test/unit/ui/xml/testrunner.rb +224 -0
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/test/run-test.rb +7 -0
- data/test-unit/test/{test_assertions.rb → test-assertions.rb} +708 -77
- data/test-unit/test/test-fixture.rb +37 -0
- data/test-unit/test/test-testcase.rb +24 -7
- data/test-unit/test/test_testsuite.rb +19 -11
- data/test/test_iochannel.rb +9 -9
- data/test/test_unicode.rb +44 -31
- metadata +8 -5
@@ -300,14 +300,14 @@ pre.code
|
|
300
300
|
padding: 5px 10px;
|
301
301
|
}
|
302
302
|
|
303
|
-
|
303
|
+
div.eye-catch
|
304
304
|
{
|
305
305
|
float: right;
|
306
306
|
}
|
307
307
|
|
308
|
-
|
308
|
+
div.eye-catch img
|
309
309
|
{
|
310
|
-
|
310
|
+
display: block;
|
311
311
|
}
|
312
312
|
|
313
313
|
dl.feature-list dd
|
@@ -45,7 +45,7 @@ module Test
|
|
45
45
|
# end
|
46
46
|
|
47
47
|
public
|
48
|
-
def assert_block(message="assert_block failed.") # :yields:
|
48
|
+
def assert_block(message="assert_block failed.") # :yields:
|
49
49
|
_wrap_assertion do
|
50
50
|
if (! yield)
|
51
51
|
raise AssertionFailedError.new(message.to_s)
|
@@ -62,8 +62,19 @@ module Test
|
|
62
62
|
public
|
63
63
|
def assert(boolean, message=nil)
|
64
64
|
_wrap_assertion do
|
65
|
-
|
66
|
-
|
65
|
+
case message
|
66
|
+
when nil, String, Proc
|
67
|
+
else
|
68
|
+
error_message = "assertion message must be String or Proc: "
|
69
|
+
error_message << "<#{message.inspect}>(<#{message.class}>)"
|
70
|
+
raise ArgumentError, error_message, filter_backtrace(caller)
|
71
|
+
end
|
72
|
+
assert_block("assert should not be called with a block.") do
|
73
|
+
!block_given?
|
74
|
+
end
|
75
|
+
assert_block(build_message(message, "<?> is not true.", boolean)) do
|
76
|
+
boolean
|
77
|
+
end
|
67
78
|
end
|
68
79
|
end
|
69
80
|
|
@@ -297,6 +308,31 @@ EOT
|
|
297
308
|
end
|
298
309
|
end
|
299
310
|
|
311
|
+
##
|
312
|
+
# Passes if +object+ does not .respond_to? +method+.
|
313
|
+
#
|
314
|
+
# Example:
|
315
|
+
# assert_not_respond_to('bugbear', :nonexistence) # -> pass
|
316
|
+
# assert_not_respond_to('bugbear', :size) # -> fail
|
317
|
+
|
318
|
+
public
|
319
|
+
def assert_not_respond_to(object, method, message="")
|
320
|
+
_wrap_assertion do
|
321
|
+
full_message = build_message(message,
|
322
|
+
"<?>.kind_of\\?(Symbol) or\n" +
|
323
|
+
"<?>.respond_to\\?(:to_str) expected",
|
324
|
+
method, method)
|
325
|
+
assert_block(full_message) do
|
326
|
+
method.kind_of?(Symbol) or method.respond_to?(:to_str)
|
327
|
+
end
|
328
|
+
full_message = build_message(message,
|
329
|
+
"!<?>.respond_to\\?(?) expected\n" +
|
330
|
+
"(Class: <?>)",
|
331
|
+
object, method, object.class)
|
332
|
+
assert_block(full_message) {!object.respond_to?(method)}
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
300
336
|
##
|
301
337
|
# Passes if +string+ =~ +pattern+.
|
302
338
|
#
|
@@ -444,25 +480,49 @@ EOT
|
|
444
480
|
end
|
445
481
|
|
446
482
|
##
|
447
|
-
# Passes if +regexp+ !~ +string+
|
483
|
+
# Passes if +regexp+ !~ +string+
|
448
484
|
#
|
449
485
|
# Example:
|
450
|
-
#
|
486
|
+
# assert_not_match(/two/, 'one 2 three') # -> pass
|
487
|
+
# assert_not_match(/three/, 'one 2 three') # -> fail
|
451
488
|
|
452
489
|
public
|
453
|
-
def
|
490
|
+
def assert_not_match(regexp, string, message="")
|
454
491
|
_wrap_assertion do
|
455
|
-
assert_instance_of(Regexp, regexp,
|
456
|
-
|
492
|
+
assert_instance_of(Regexp, regexp,
|
493
|
+
"<REGEXP> in assert_not_match(<REGEXP>, ...) " +
|
494
|
+
"should be a Regexp.")
|
495
|
+
full_message = build_message(message,
|
496
|
+
"<?> expected to not match\n<?>.",
|
497
|
+
regexp, string)
|
457
498
|
assert_block(full_message) { regexp !~ string }
|
458
499
|
end
|
459
500
|
end
|
460
501
|
|
502
|
+
##
|
503
|
+
# Deprecated. Use #assert_not_match instead.
|
504
|
+
#
|
505
|
+
# Passes if +regexp+ !~ +string+
|
506
|
+
#
|
507
|
+
# Example:
|
508
|
+
# assert_no_match(/two/, 'one 2 three') # -> pass
|
509
|
+
# assert_no_match(/three/, 'one 2 three') # -> fail
|
510
|
+
|
511
|
+
public
|
512
|
+
def assert_no_match(regexp, string, message="")
|
513
|
+
_wrap_assertion do
|
514
|
+
assert_instance_of(Regexp, regexp,
|
515
|
+
"The first argument to assert_no_match " +
|
516
|
+
"should be a Regexp.")
|
517
|
+
assert_not_match(regexp, string, message)
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
461
521
|
UncaughtThrow = {
|
462
|
-
NameError => /^uncaught throw \`(.+)\'$/,
|
522
|
+
NameError => /^uncaught throw \`(.+)\'$/, #`
|
463
523
|
ArgumentError => /^uncaught throw (.+)$/,
|
464
|
-
ThreadError => /^uncaught throw \`(.+)\' in thread /
|
465
|
-
}
|
524
|
+
ThreadError => /^uncaught throw \`(.+)\' in thread / #`
|
525
|
+
}
|
466
526
|
|
467
527
|
##
|
468
528
|
# Passes if the block throws +expected_object+
|
@@ -550,7 +610,7 @@ EOT
|
|
550
610
|
# assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
|
551
611
|
|
552
612
|
public
|
553
|
-
def assert_in_delta(expected_float, actual_float, delta, message="")
|
613
|
+
def assert_in_delta(expected_float, actual_float, delta=0.001, message="")
|
554
614
|
_wrap_assertion do
|
555
615
|
_assert_in_delta_validate_arguments(expected_float,
|
556
616
|
actual_float,
|
@@ -565,6 +625,31 @@ EOT
|
|
565
625
|
end
|
566
626
|
end
|
567
627
|
|
628
|
+
##
|
629
|
+
# Passes if +expected_float+ and +actual_float+ are
|
630
|
+
# not equal within +delta+ tolerance.
|
631
|
+
#
|
632
|
+
# Example:
|
633
|
+
# assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00002) # -> pass
|
634
|
+
# assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00001) # -> fail
|
635
|
+
|
636
|
+
public
|
637
|
+
def assert_not_in_delta(expected_float, actual_float, delta=0.001, message="")
|
638
|
+
_wrap_assertion do
|
639
|
+
_assert_in_delta_validate_arguments(expected_float,
|
640
|
+
actual_float,
|
641
|
+
delta)
|
642
|
+
full_message = _assert_in_delta_message(expected_float,
|
643
|
+
actual_float,
|
644
|
+
delta,
|
645
|
+
message,
|
646
|
+
:negative_assertion => true)
|
647
|
+
assert_block(full_message) do
|
648
|
+
(expected_float.to_f - actual_float.to_f).abs > delta.to_f
|
649
|
+
end
|
650
|
+
end
|
651
|
+
end
|
652
|
+
|
568
653
|
# :stopdoc:
|
569
654
|
private
|
570
655
|
def _assert_in_delta_validate_arguments(expected_float,
|
@@ -584,26 +669,40 @@ EOT
|
|
584
669
|
end
|
585
670
|
|
586
671
|
def _assert_in_delta_message(expected_float, actual_float, delta,
|
587
|
-
message)
|
588
|
-
|
589
|
-
|
590
|
-
<?>
|
672
|
+
message, options={})
|
673
|
+
if options[:negative_assertion]
|
674
|
+
format = <<-EOT
|
675
|
+
<?> -/+ <?> expected to not include
|
676
|
+
<?>.
|
677
|
+
EOT
|
678
|
+
else
|
679
|
+
format = <<-EOT
|
680
|
+
<?> -/+ <?> expected to include
|
681
|
+
<?>.
|
591
682
|
EOT
|
592
|
-
|
683
|
+
end
|
684
|
+
arguments = [expected_float, delta, actual_float]
|
593
685
|
normalized_expected = expected_float.to_f
|
594
686
|
normalized_actual = actual_float.to_f
|
595
687
|
normalized_delta = delta.to_f
|
596
688
|
relation_format = nil
|
597
689
|
relation_arguments = nil
|
598
690
|
if normalized_actual < normalized_expected - normalized_delta
|
599
|
-
relation_format = "<<?> < <?>-<?>
|
691
|
+
relation_format = "<<?> < <?>-<?>[?] <= <?>+<?>[?]>"
|
600
692
|
relation_arguments = [actual_float,
|
601
693
|
expected_float, delta,
|
602
694
|
normalized_expected - normalized_delta,
|
603
695
|
expected_float, delta,
|
604
696
|
normalized_expected + normalized_delta]
|
605
|
-
elsif normalized_expected
|
606
|
-
relation_format = "<<?>-<?>
|
697
|
+
elsif normalized_actual <= normalized_expected + normalized_delta
|
698
|
+
relation_format = "<<?>-<?>[?] <= <?> <= <?>+<?>[?]>"
|
699
|
+
relation_arguments = [expected_float, delta,
|
700
|
+
normalized_expected - normalized_delta,
|
701
|
+
actual_float,
|
702
|
+
expected_float, delta,
|
703
|
+
normalized_expected + normalized_delta]
|
704
|
+
else
|
705
|
+
relation_format = "<<?>-<?>[?] <= <?>+<?>[?] < <?>>"
|
607
706
|
relation_arguments = [expected_float, delta,
|
608
707
|
normalized_expected - normalized_delta,
|
609
708
|
expected_float, delta,
|
@@ -622,6 +721,142 @@ EOT
|
|
622
721
|
|
623
722
|
build_message(message, format, *arguments)
|
624
723
|
end
|
724
|
+
|
725
|
+
public
|
726
|
+
# :startdoc:
|
727
|
+
|
728
|
+
##
|
729
|
+
# Passes if +expected_float+ and +actual_float+ are equal
|
730
|
+
# within +epsilon+ relative error of +expected_float+.
|
731
|
+
#
|
732
|
+
# Example:
|
733
|
+
# assert_in_epsilon(10000.0, 9900.0, 0.1) # -> pass
|
734
|
+
# assert_in_epsilon(10000.0, 9899.0, 0.1) # -> fail
|
735
|
+
|
736
|
+
public
|
737
|
+
def assert_in_epsilon(expected_float, actual_float, epsilon=0.001,
|
738
|
+
message="")
|
739
|
+
_wrap_assertion do
|
740
|
+
_assert_in_epsilon_validate_arguments(expected_float,
|
741
|
+
actual_float,
|
742
|
+
epsilon)
|
743
|
+
full_message = _assert_in_epsilon_message(expected_float,
|
744
|
+
actual_float,
|
745
|
+
epsilon,
|
746
|
+
message)
|
747
|
+
assert_block(full_message) do
|
748
|
+
normalized_expected_float = expected_float.to_f
|
749
|
+
delta = normalized_expected_float * epsilon.to_f
|
750
|
+
(normalized_expected_float - actual_float.to_f).abs <= delta
|
751
|
+
end
|
752
|
+
end
|
753
|
+
end
|
754
|
+
|
755
|
+
##
|
756
|
+
# Passes if +expected_float+ and +actual_float+ are
|
757
|
+
# not equal within +epsilon+ relative error of
|
758
|
+
# +expected_float+.
|
759
|
+
#
|
760
|
+
# Example:
|
761
|
+
# assert_not_in_epsilon(10000.0, 9900.0, 0.1) # -> fail
|
762
|
+
# assert_not_in_epsilon(10000.0, 9899.0, 0.1) # -> pass
|
763
|
+
|
764
|
+
public
|
765
|
+
def assert_not_in_epsilon(expected_float, actual_float, epsilon=0.001,
|
766
|
+
message="")
|
767
|
+
_wrap_assertion do
|
768
|
+
_assert_in_epsilon_validate_arguments(expected_float,
|
769
|
+
actual_float,
|
770
|
+
epsilon)
|
771
|
+
full_message = _assert_in_epsilon_message(expected_float,
|
772
|
+
actual_float,
|
773
|
+
epsilon,
|
774
|
+
message,
|
775
|
+
:negative_assertion => true)
|
776
|
+
assert_block(full_message) do
|
777
|
+
normalized_expected_float = expected_float.to_f
|
778
|
+
delta = normalized_expected_float * epsilon.to_f
|
779
|
+
(normalized_expected_float - actual_float.to_f).abs > delta
|
780
|
+
end
|
781
|
+
end
|
782
|
+
end
|
783
|
+
|
784
|
+
# :stopdoc:
|
785
|
+
private
|
786
|
+
def _assert_in_epsilon_validate_arguments(expected_float,
|
787
|
+
actual_float,
|
788
|
+
epsilon)
|
789
|
+
{
|
790
|
+
expected_float => "first float",
|
791
|
+
actual_float => "second float",
|
792
|
+
epsilon => "epsilon"
|
793
|
+
}.each do |float, name|
|
794
|
+
assert_respond_to(float, :to_f,
|
795
|
+
"The arguments must respond to to_f; " +
|
796
|
+
"the #{name} did not")
|
797
|
+
end
|
798
|
+
epsilon = epsilon.to_f
|
799
|
+
assert_operator(epsilon, :>=, 0.0, "The epsilon should not be negative")
|
800
|
+
end
|
801
|
+
|
802
|
+
def _assert_in_epsilon_message(expected_float, actual_float, epsilon,
|
803
|
+
message, options={})
|
804
|
+
normalized_expected = expected_float.to_f
|
805
|
+
normalized_actual = actual_float.to_f
|
806
|
+
normalized_epsilon = epsilon.to_f
|
807
|
+
delta = normalized_expected * normalized_epsilon
|
808
|
+
|
809
|
+
if options[:negative_assertion]
|
810
|
+
format = <<-EOT
|
811
|
+
<?> -/+ (<?> * <?>)[?] expected to not include
|
812
|
+
<?>.
|
813
|
+
EOT
|
814
|
+
else
|
815
|
+
format = <<-EOT
|
816
|
+
<?> -/+ (<?> * <?>)[?] expected to include
|
817
|
+
<?>.
|
818
|
+
EOT
|
819
|
+
end
|
820
|
+
arguments = [expected_float, expected_float, epsilon, delta,
|
821
|
+
actual_float]
|
822
|
+
|
823
|
+
relation_format = nil
|
824
|
+
relation_arguments = nil
|
825
|
+
if normalized_actual < normalized_expected - delta
|
826
|
+
relation_format = "<<?> < <?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?]>"
|
827
|
+
relation_arguments = [actual_float,
|
828
|
+
expected_float, expected_float, epsilon,
|
829
|
+
normalized_expected - delta,
|
830
|
+
expected_float, expected_float, epsilon,
|
831
|
+
normalized_expected + delta]
|
832
|
+
elsif normalized_actual <= normalized_expected + delta
|
833
|
+
relation_format = "<<?>-(<?>*<?>)[?] <= <?> <= <?>+(<?>*<?>)[?]>"
|
834
|
+
relation_arguments = [expected_float, expected_float, epsilon,
|
835
|
+
normalized_expected - delta,
|
836
|
+
actual_float,
|
837
|
+
expected_float, expected_float, epsilon,
|
838
|
+
normalized_expected + delta]
|
839
|
+
else
|
840
|
+
relation_format = "<<?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?] < <?>>"
|
841
|
+
relation_arguments = [expected_float, expected_float, epsilon,
|
842
|
+
normalized_expected - delta,
|
843
|
+
expected_float, expected_float, epsilon,
|
844
|
+
normalized_expected + delta,
|
845
|
+
actual_float]
|
846
|
+
end
|
847
|
+
|
848
|
+
if relation_format
|
849
|
+
format << <<-EOT
|
850
|
+
|
851
|
+
Relation:
|
852
|
+
#{relation_format}
|
853
|
+
EOT
|
854
|
+
arguments.concat(relation_arguments)
|
855
|
+
end
|
856
|
+
|
857
|
+
build_message(message, format, *arguments)
|
858
|
+
end
|
859
|
+
|
625
860
|
public
|
626
861
|
# :startdoc:
|
627
862
|
|
@@ -634,18 +869,76 @@ EOT
|
|
634
869
|
# * Arguments to the method
|
635
870
|
#
|
636
871
|
# Example:
|
637
|
-
# assert_send
|
872
|
+
# assert_send([[1, 2], :member?, 1]) # -> pass
|
873
|
+
# assert_send([[1, 2], :member?, 4]) # -> fail
|
638
874
|
|
639
875
|
public
|
640
|
-
def assert_send(send_array, message=
|
876
|
+
def assert_send(send_array, message=nil)
|
641
877
|
_wrap_assertion do
|
642
|
-
assert_instance_of(Array, send_array,
|
643
|
-
|
644
|
-
|
878
|
+
assert_instance_of(Array, send_array,
|
879
|
+
"assert_send requires an array " +
|
880
|
+
"of send information")
|
881
|
+
assert_operator(send_array.size, :>=, 2,
|
882
|
+
"assert_send requires at least a receiver " +
|
883
|
+
"and a message name")
|
884
|
+
format = <<EOT
|
645
885
|
<?> expected to respond to
|
646
|
-
<?(
|
886
|
+
<?(*?)> with a true value but was
|
887
|
+
<?>.
|
647
888
|
EOT
|
648
|
-
|
889
|
+
receiver, message_name, *arguments = send_array
|
890
|
+
result = nil
|
891
|
+
full_message =
|
892
|
+
build_message(message,
|
893
|
+
format,
|
894
|
+
receiver,
|
895
|
+
AssertionMessage.literal(message_name.to_s),
|
896
|
+
arguments,
|
897
|
+
AssertionMessage.delayed_literal {result})
|
898
|
+
assert_block(full_message) do
|
899
|
+
result = receiver.__send__(message_name, *arguments)
|
900
|
+
result
|
901
|
+
end
|
902
|
+
end
|
903
|
+
end
|
904
|
+
|
905
|
+
##
|
906
|
+
# Passes if the method send doesn't return a true value.
|
907
|
+
#
|
908
|
+
# +send_array+ is composed of:
|
909
|
+
# * A receiver
|
910
|
+
# * A method
|
911
|
+
# * Arguments to the method
|
912
|
+
#
|
913
|
+
# Example:
|
914
|
+
# assert_not_send([[1, 2], :member?, 1]) # -> fail
|
915
|
+
# assert_not_send([[1, 2], :member?, 4]) # -> pass
|
916
|
+
def assert_not_send(send_array, message=nil)
|
917
|
+
_wrap_assertion do
|
918
|
+
assert_instance_of(Array, send_array,
|
919
|
+
"assert_not_send requires an array " +
|
920
|
+
"of send information")
|
921
|
+
assert_operator(send_array.size, :>=, 2,
|
922
|
+
"assert_not_send requires at least a receiver " +
|
923
|
+
"and a message name")
|
924
|
+
format = <<EOT
|
925
|
+
<?> expected to respond to
|
926
|
+
<?(*?)> with not a true value but was
|
927
|
+
<?>.
|
928
|
+
EOT
|
929
|
+
receiver, message_name, *arguments = send_array
|
930
|
+
result = nil
|
931
|
+
full_message =
|
932
|
+
build_message(message,
|
933
|
+
format,
|
934
|
+
receiver,
|
935
|
+
AssertionMessage.literal(message_name.to_s),
|
936
|
+
arguments,
|
937
|
+
AssertionMessage.delayed_literal {result})
|
938
|
+
assert_block(full_message) do
|
939
|
+
result = receiver.__send__(message_name, *arguments)
|
940
|
+
not result
|
941
|
+
end
|
649
942
|
end
|
650
943
|
end
|
651
944
|
|
@@ -828,7 +1121,7 @@ EOT
|
|
828
1121
|
end
|
829
1122
|
|
830
1123
|
##
|
831
|
-
# Passes if +object+.+predicate+
|
1124
|
+
# Passes if +object+.+predicate+ is _true_.
|
832
1125
|
#
|
833
1126
|
# Example:
|
834
1127
|
# assert_predicate([], :empty?) # -> pass
|
@@ -850,7 +1143,7 @@ EOT
|
|
850
1143
|
end
|
851
1144
|
|
852
1145
|
##
|
853
|
-
# Passes if +object+.+predicate+
|
1146
|
+
# Passes if +object+.+predicate+ is not _true_.
|
854
1147
|
#
|
855
1148
|
# Example:
|
856
1149
|
# assert_not_predicate([1], :empty?) # -> pass
|
@@ -955,6 +1248,96 @@ EOT
|
|
955
1248
|
end
|
956
1249
|
end
|
957
1250
|
|
1251
|
+
##
|
1252
|
+
# Passes if +collection+ includes +object+.
|
1253
|
+
#
|
1254
|
+
# Example:
|
1255
|
+
# assert_include([1, 10], 1) # -> pass
|
1256
|
+
# assert_include(1..10, 5) # -> pass
|
1257
|
+
# assert_include([1, 10], 5) # -> fail
|
1258
|
+
# assert_include(1..10, 20) # -> fail
|
1259
|
+
def assert_include(collection, object, message=nil)
|
1260
|
+
_wrap_assertion do
|
1261
|
+
assert_respond_to(collection, :include?,
|
1262
|
+
"The collection must respond to :include?.")
|
1263
|
+
full_message = build_message(message,
|
1264
|
+
"<?> expected to include\n<?>.",
|
1265
|
+
collection,
|
1266
|
+
object)
|
1267
|
+
assert_block(full_message) do
|
1268
|
+
collection.include?(object)
|
1269
|
+
end
|
1270
|
+
end
|
1271
|
+
end
|
1272
|
+
|
1273
|
+
##
|
1274
|
+
# Passes if +collection+ doesn't include +object+.
|
1275
|
+
#
|
1276
|
+
# Example:
|
1277
|
+
# assert_not_include([1, 10], 5) # -> pass
|
1278
|
+
# assert_not_include(1..10, 20) # -> pass
|
1279
|
+
# assert_not_include([1, 10], 1) # -> fail
|
1280
|
+
# assert_not_include(1..10, 5) # -> fail
|
1281
|
+
def assert_not_include(collection, object, message=nil)
|
1282
|
+
_wrap_assertion do
|
1283
|
+
assert_respond_to(collection, :include?,
|
1284
|
+
"The collection must respond to :include?.")
|
1285
|
+
full_message = build_message(message,
|
1286
|
+
"<?> expected to not include\n<?>.",
|
1287
|
+
collection,
|
1288
|
+
object)
|
1289
|
+
assert_block(full_message) do
|
1290
|
+
not collection.include?(object)
|
1291
|
+
end
|
1292
|
+
end
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
##
|
1296
|
+
# Passes if +object+ is empty.
|
1297
|
+
#
|
1298
|
+
# Example:
|
1299
|
+
# assert_empty("") # -> pass
|
1300
|
+
# assert_empty([]) # -> pass
|
1301
|
+
# assert_empty({}) # -> pass
|
1302
|
+
# assert_empty(" ") # -> fail
|
1303
|
+
# assert_empty([nil]) # -> fail
|
1304
|
+
# assert_empty({1 => 2}) # -> fail
|
1305
|
+
def assert_empty(object, message=nil)
|
1306
|
+
_wrap_assertion do
|
1307
|
+
assert_respond_to(object, :empty?,
|
1308
|
+
"The object must respond to :empty?.")
|
1309
|
+
full_message = build_message(message,
|
1310
|
+
"<?> expected to be empty.",
|
1311
|
+
object)
|
1312
|
+
assert_block(full_message) do
|
1313
|
+
object.empty?
|
1314
|
+
end
|
1315
|
+
end
|
1316
|
+
end
|
1317
|
+
|
1318
|
+
##
|
1319
|
+
# Passes if +object+ is not empty.
|
1320
|
+
#
|
1321
|
+
# Example:
|
1322
|
+
# assert_not_empty(" ") # -> pass
|
1323
|
+
# assert_not_empty([nil]) # -> pass
|
1324
|
+
# assert_not_empty({1 => 2}) # -> pass
|
1325
|
+
# assert_not_empty("") # -> fail
|
1326
|
+
# assert_not_empty([]) # -> fail
|
1327
|
+
# assert_not_empty({}) # -> fail
|
1328
|
+
def assert_not_empty(object, message=nil)
|
1329
|
+
_wrap_assertion do
|
1330
|
+
assert_respond_to(object, :empty?,
|
1331
|
+
"The object must respond to :empty?.")
|
1332
|
+
full_message = build_message(message,
|
1333
|
+
"<?> expected to not be empty.",
|
1334
|
+
object)
|
1335
|
+
assert_block(full_message) do
|
1336
|
+
not object.empty?
|
1337
|
+
end
|
1338
|
+
end
|
1339
|
+
end
|
1340
|
+
|
958
1341
|
##
|
959
1342
|
# Builds a failure message. +head+ is added before the +template+ and
|
960
1343
|
# +arguments+ replaces the '?'s positionally in the template.
|
@@ -966,21 +1349,21 @@ EOT
|
|
966
1349
|
end
|
967
1350
|
|
968
1351
|
private
|
969
|
-
def _wrap_assertion
|
1352
|
+
def _wrap_assertion(&block)
|
970
1353
|
@_assertion_wrapped ||= false
|
971
|
-
|
1354
|
+
if @_assertion_wrapped
|
1355
|
+
block.call
|
1356
|
+
else
|
972
1357
|
@_assertion_wrapped = true
|
973
1358
|
begin
|
974
1359
|
add_assertion
|
975
|
-
|
1360
|
+
block.call
|
976
1361
|
ensure
|
977
1362
|
@_assertion_wrapped = false
|
978
1363
|
end
|
979
|
-
else
|
980
|
-
return yield
|
981
1364
|
end
|
982
1365
|
end
|
983
|
-
|
1366
|
+
|
984
1367
|
##
|
985
1368
|
# Called whenever an assertion is made. Define this in classes that
|
986
1369
|
# include Test::Unit::Assertions to record assertion counts.
|
@@ -1067,6 +1450,14 @@ EOT
|
|
1067
1450
|
end
|
1068
1451
|
end
|
1069
1452
|
|
1453
|
+
def ensure_diffable_string(string)
|
1454
|
+
if string.respond_to?(:encoding) and
|
1455
|
+
!string.encoding.ascii_compatible?
|
1456
|
+
string = string.dup.force_encoding("ASCII-8BIT")
|
1457
|
+
end
|
1458
|
+
string
|
1459
|
+
end
|
1460
|
+
|
1070
1461
|
def prepare_for_diff(from, to)
|
1071
1462
|
if !from.is_a?(String) or !to.is_a?(String)
|
1072
1463
|
from = convert(from)
|
@@ -1074,6 +1465,8 @@ EOT
|
|
1074
1465
|
end
|
1075
1466
|
|
1076
1467
|
if diff_target_string?(from) and diff_target_string?(to)
|
1468
|
+
from = ensure_diffable_string(from)
|
1469
|
+
to = ensure_diffable_string(to)
|
1077
1470
|
[from, to]
|
1078
1471
|
else
|
1079
1472
|
[nil, nil]
|
@@ -1117,8 +1510,13 @@ EOM
|
|
1117
1510
|
if use_pp
|
1118
1511
|
begin
|
1119
1512
|
require 'pp' unless defined?(PP)
|
1513
|
+
if HashInspector.target?(object)
|
1514
|
+
pp_target = HashInspector.new(object)
|
1515
|
+
else
|
1516
|
+
pp_target = object
|
1517
|
+
end
|
1120
1518
|
begin
|
1121
|
-
return PP.pp(
|
1519
|
+
return PP.pp(pp_target, '').chomp
|
1122
1520
|
rescue NameError
|
1123
1521
|
end
|
1124
1522
|
rescue LoadError
|
@@ -1130,6 +1528,61 @@ EOM
|
|
1130
1528
|
end
|
1131
1529
|
end
|
1132
1530
|
|
1531
|
+
class HashInspector
|
1532
|
+
class << self
|
1533
|
+
def target?(object)
|
1534
|
+
object.is_a?(Hash) or object == ENV
|
1535
|
+
end
|
1536
|
+
|
1537
|
+
def normalize(object)
|
1538
|
+
if target?(object)
|
1539
|
+
new(object)
|
1540
|
+
else
|
1541
|
+
object
|
1542
|
+
end
|
1543
|
+
end
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
def initialize(hash)
|
1547
|
+
@hash = hash
|
1548
|
+
end
|
1549
|
+
|
1550
|
+
def inspect
|
1551
|
+
@hash.inspect
|
1552
|
+
end
|
1553
|
+
|
1554
|
+
def pretty_print(q)
|
1555
|
+
q.group(1, '{', '}') do
|
1556
|
+
q.seplist(self, nil, :each_pair) do |k, v|
|
1557
|
+
q.group do
|
1558
|
+
q.pp(k)
|
1559
|
+
q.text('=>')
|
1560
|
+
q.group(1) do
|
1561
|
+
q.breakable('')
|
1562
|
+
q.pp(v)
|
1563
|
+
end
|
1564
|
+
end
|
1565
|
+
end
|
1566
|
+
end
|
1567
|
+
end
|
1568
|
+
|
1569
|
+
def pretty_print_cycle(q)
|
1570
|
+
q.text(@hash.empty? ? '{}' : '{...}')
|
1571
|
+
end
|
1572
|
+
|
1573
|
+
def each_pair
|
1574
|
+
keys = @hash.keys
|
1575
|
+
begin
|
1576
|
+
keys = keys.sort # FIXME: more cleverly
|
1577
|
+
rescue ArgumentError
|
1578
|
+
end
|
1579
|
+
keys.each do |key|
|
1580
|
+
yield(self.class.normalize(key),
|
1581
|
+
self.class.normalize(@hash[key]))
|
1582
|
+
end
|
1583
|
+
end
|
1584
|
+
end
|
1585
|
+
|
1133
1586
|
class Literal
|
1134
1587
|
def initialize(value)
|
1135
1588
|
@value = value
|