minitest 5.10.3 → 5.15.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.
@@ -15,10 +15,11 @@ if defined? Encoding then
15
15
  end
16
16
  end
17
17
 
18
- module MyModule; end
19
- class AnError < StandardError; include MyModule; end
20
- class ImmutableString < String; def inspect; super.freeze; end; end
21
- SomeError = Class.new Exception
18
+ class Minitest::Runnable
19
+ def whatever # faked for testing
20
+ assert true
21
+ end
22
+ end
22
23
 
23
24
  class TestMinitestUnit < MetaMetaMetaTestCase
24
25
  parallelize_me!
@@ -74,12 +75,16 @@ class TestMinitestUnit < MetaMetaMetaTestCase
74
75
  assert_equal ex, fu
75
76
  end
76
77
 
77
- # def test_default_runner_is_minitest_unit
78
- # assert_instance_of Minitest::Unit, Minitest::Unit.runner
79
- # end
78
+ def test_filter_backtrace__empty
79
+ with_empty_backtrace_filter do
80
+ bt = %w[first second third]
81
+ fu = Minitest.filter_backtrace bt.dup
82
+ assert_equal bt, fu
83
+ end
84
+ end
80
85
 
81
86
  def test_infectious_binary_encoding
82
- @tu = Class.new Minitest::Test do
87
+ @tu = Class.new FakeNamedTest do
83
88
  def test_this_is_not_ascii_assertion
84
89
  assert_equal "ЁЁЁ", "ёёё"
85
90
  end
@@ -95,12 +100,12 @@ class TestMinitestUnit < MetaMetaMetaTestCase
95
100
  Finished in 0.00
96
101
 
97
102
  1) Error:
98
- #<Class:0xXXX>#test_this_is_non_ascii_failure_message:
103
+ FakeNamedTestXX#test_this_is_non_ascii_failure_message:
99
104
  RuntimeError: ЁЁЁ
100
105
  FILE:LINE:in `test_this_is_non_ascii_failure_message'
101
106
 
102
107
  2) Failure:
103
- #<Class:0xXXX>#test_this_is_not_ascii_assertion [FILE:LINE]:
108
+ FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
104
109
  Expected: \"ЁЁЁ\"
105
110
  Actual: \"ёёё\"
106
111
 
@@ -118,7 +123,10 @@ class TestMinitestUnit < MetaMetaMetaTestCase
118
123
 
119
124
  test = test_class.new :test_omg
120
125
  test.run
121
- assert test.passed?
126
+
127
+ refute_predicate test, :error?
128
+ assert_predicate test, :passed?
129
+ refute_predicate test, :skipped?
122
130
  end
123
131
 
124
132
  def test_passed_eh_teardown_skipped
@@ -130,8 +138,9 @@ class TestMinitestUnit < MetaMetaMetaTestCase
130
138
  test = test_class.new :test_omg
131
139
  test.run
132
140
 
133
- assert test.skipped?
134
- refute test.passed?
141
+ refute_predicate test, :error?
142
+ refute_predicate test, :passed?
143
+ assert_predicate test, :skipped?
135
144
  end
136
145
 
137
146
  def test_passed_eh_teardown_flunked
@@ -142,7 +151,10 @@ class TestMinitestUnit < MetaMetaMetaTestCase
142
151
 
143
152
  test = test_class.new :test_omg
144
153
  test.run
145
- refute test.passed?
154
+
155
+ refute_predicate test, :error?
156
+ refute_predicate test, :passed?
157
+ refute_predicate test, :skipped?
146
158
  end
147
159
 
148
160
  def util_expand_bt bt
@@ -207,10 +219,10 @@ class TestMinitestRunner < MetaMetaMetaTestCase
207
219
 
208
220
  def run
209
221
  @foo = "hi mom!"
210
- super
222
+ r = super
211
223
  @foo = "okay"
212
224
 
213
- self # per contract
225
+ r
214
226
  end
215
227
 
216
228
  def test_something
@@ -247,7 +259,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
247
259
  Finished in 0.00
248
260
 
249
261
  1) Error:
250
- #<Class:0xXXX>#test_error:
262
+ FakeNamedTestXX#test_error:
251
263
  RuntimeError: unhandled exception
252
264
  FILE:LINE:in \`test_error\'
253
265
 
@@ -275,7 +287,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
275
287
  Finished in 0.00
276
288
 
277
289
  1) Error:
278
- #<Class:0xXXX>#test_something:
290
+ FakeNamedTestXX#test_something:
279
291
  RuntimeError: unhandled exception
280
292
  FILE:LINE:in \`teardown\'
281
293
 
@@ -294,7 +306,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
294
306
  Finished in 0.00
295
307
 
296
308
  1) Failure:
297
- #<Class:0xXXX>#test_failure [FILE:LINE]:
309
+ FakeNamedTestXX#test_failure [FILE:LINE]:
298
310
  Expected false to be truthy.
299
311
 
300
312
  2 runs, 2 assertions, 1 failures, 0 errors, 0 skips
@@ -500,13 +512,13 @@ class TestMinitestRunner < MetaMetaMetaTestCase
500
512
  end
501
513
 
502
514
  expected = clean <<-EOM
503
- #<Class:0xXXX>#test_skip = 0.00 s = S
504
- #<Class:0xXXX>#test_something = 0.00 s = .
515
+ FakeNamedTestXX#test_skip = 0.00 s = S
516
+ FakeNamedTestXX#test_something = 0.00 s = .
505
517
 
506
518
  Finished in 0.00
507
519
 
508
520
  1) Skipped:
509
- #<Class:0xXXX>#test_skip [FILE:LINE]:
521
+ FakeNamedTestXX#test_skip [FILE:LINE]:
510
522
  not yet
511
523
 
512
524
  2 runs, 1 assertions, 0 failures, 0 errors, 1 skips
@@ -574,8 +586,6 @@ class TestMinitestRunner < MetaMetaMetaTestCase
574
586
  end
575
587
 
576
588
  def test_run_parallel
577
- skip "I don't have ParallelEach debugged yet" if maglev?
578
-
579
589
  test_count = 2
580
590
  test_latch = Latch.new test_count
581
591
  wait_latch = Latch.new test_count
@@ -754,7 +764,7 @@ class TestMinitestRunnable < Minitest::Test
754
764
  end
755
765
  tc.setup
756
766
 
757
- @tc = tc
767
+ @tc = Minitest::Result.from tc
758
768
  end
759
769
 
760
770
  def assert_marshal expected_ivars
@@ -772,7 +782,45 @@ class TestMinitestRunnable < Minitest::Test
772
782
  def test_marshal
773
783
  setup_marshal Minitest::Runnable
774
784
 
775
- assert_marshal %w[@NAME @assertions @failures]
785
+ assert_marshal %w[@NAME @assertions @failures @klass @source_location @time]
786
+ end
787
+
788
+ def test_spec_marshal
789
+ klass = describe("whatever") { it("passes") { assert true } }
790
+ rm = klass.runnable_methods.first
791
+
792
+ # Run the test
793
+ @tc = klass.new(rm).run
794
+
795
+ assert_kind_of Minitest::Result, @tc
796
+
797
+ # Pass it over the wire
798
+ over_the_wire = Marshal.load Marshal.dump @tc
799
+
800
+ assert_equal @tc.time, over_the_wire.time
801
+ assert_equal @tc.name, over_the_wire.name
802
+ assert_equal @tc.assertions, over_the_wire.assertions
803
+ assert_equal @tc.failures, over_the_wire.failures
804
+ assert_equal @tc.klass, over_the_wire.klass
805
+ end
806
+
807
+ def test_spec_marshal_with_exception
808
+ klass = describe("whatever") { it("passes") { raise Class.new(StandardError)} }
809
+ rm = klass.runnable_methods.first
810
+
811
+ # Run the test
812
+ @tc = klass.new(rm).run
813
+
814
+ assert_kind_of Minitest::Result, @tc
815
+
816
+ # Pass it over the wire
817
+ over_the_wire = Marshal.load Marshal.dump @tc
818
+
819
+ assert_equal @tc.time, over_the_wire.time
820
+ assert_equal @tc.name, over_the_wire.name
821
+ assert_equal @tc.assertions, over_the_wire.assertions
822
+ assert_equal @tc.failures, over_the_wire.failures
823
+ assert_equal @tc.klass, over_the_wire.klass
776
824
  end
777
825
  end
778
826
 
@@ -782,7 +830,7 @@ class TestMinitestTest < TestMinitestRunnable
782
830
  tc.time = 3.14
783
831
  end
784
832
 
785
- assert_marshal %w[@NAME @assertions @failures @time] do |new_tc|
833
+ assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc|
786
834
  assert_in_epsilon 3.14, new_tc.time
787
835
  end
788
836
  end
@@ -819,1078 +867,25 @@ class TestMinitestUnitTestCase < Minitest::Test
819
867
  $VERBOSE = orig_verbose
820
868
  end
821
869
 
822
- def test_assert
823
- @assertion_count = 2
824
-
825
- @tc.assert_equal true, @tc.assert(true), "returns true on success"
826
- end
827
-
828
- def test_assert__triggered
829
- assert_triggered "Expected false to be truthy." do
830
- @tc.assert false
831
- end
832
- end
833
-
834
- def test_assert__triggered_message
835
- assert_triggered @zomg do
836
- @tc.assert false, @zomg
837
- end
838
- end
839
-
840
- def test_assert_empty
841
- @assertion_count = 2
842
-
843
- @tc.assert_empty []
844
- end
845
-
846
- def test_assert_empty_triggered
847
- @assertion_count = 2
848
-
849
- assert_triggered "Expected [1] to be empty." do
850
- @tc.assert_empty [1]
851
- end
852
- end
853
-
854
- def test_assert_equal
855
- @tc.assert_equal 1, 1
856
- end
857
-
858
- def test_assert_equal_different_collection_array_hex_invisible
859
- object1 = Object.new
860
- object2 = Object.new
861
- msg = "No visible difference in the Array#inspect output.
862
- You should look at the implementation of #== on Array or its members.
863
- [#<Object:0xXXXXXX>]".gsub(/^ +/, "")
864
- assert_triggered msg do
865
- @tc.assert_equal [object1], [object2]
866
- end
867
- end
868
-
869
- def test_assert_equal_different_collection_hash_hex_invisible
870
- h1, h2 = {}, {}
871
- h1[1] = Object.new
872
- h2[1] = Object.new
873
- msg = "No visible difference in the Hash#inspect output.
874
- You should look at the implementation of #== on Hash or its members.
875
- {1=>#<Object:0xXXXXXX>}".gsub(/^ +/, "")
876
-
877
- assert_triggered msg do
878
- @tc.assert_equal h1, h2
879
- end
880
- end
881
-
882
- def test_assert_equal_string_encodings
883
- msg = <<-EOM.gsub(/^ {10}/, "")
884
- --- expected
885
- +++ actual
886
- @@ -1 +1,2 @@
887
- +# encoding: ASCII-8BIT
888
- "bad-utf8-\\xF1.txt"
889
- EOM
890
-
891
- assert_triggered msg do
892
- x = "bad-utf8-\xF1.txt"
893
- y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
894
- @tc.assert_equal x, y
895
- end
896
- end unless RUBY18
897
-
898
- def test_assert_equal_string_encodings_both_different
899
- msg = <<-EOM.gsub(/^ {10}/, "")
900
- --- expected
901
- +++ actual
902
- @@ -1,2 +1,2 @@
903
- -# encoding: US-ASCII
904
- +# encoding: ASCII-8BIT
905
- "bad-utf8-\\xF1.txt"
906
- EOM
907
-
908
- assert_triggered msg do
909
- x = "bad-utf8-\xF1.txt".force_encoding "ASCII"
910
- y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
911
- @tc.assert_equal x, y
912
- end
913
- end unless RUBY18
914
-
915
- def test_assert_equal_different_diff_deactivated
916
- skip "https://github.com/MagLev/maglev/issues/209" if maglev?
917
-
918
- without_diff do
919
- assert_triggered util_msg("haha" * 10, "blah" * 10) do
920
- o1 = "haha" * 10
921
- o2 = "blah" * 10
922
-
923
- @tc.assert_equal o1, o2
924
- end
925
- end
926
- end
927
-
928
- def test_assert_equal_different_hex
929
- c = Class.new do
930
- def initialize s; @name = s; end
931
- end
932
-
933
- o1 = c.new "a"
934
- o2 = c.new "b"
935
- msg = "--- expected
936
- +++ actual
937
- @@ -1 +1 @@
938
- -#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"a\">
939
- +#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"b\">
940
- ".gsub(/^ +/, "")
941
-
942
- assert_triggered msg do
943
- @tc.assert_equal o1, o2
944
- end
945
- end
946
-
947
- def test_assert_equal_different_hex_invisible
948
- o1 = Object.new
949
- o2 = Object.new
950
-
951
- msg = "No visible difference in the Object#inspect output.
952
- You should look at the implementation of #== on Object or its members.
953
- #<Object:0xXXXXXX>".gsub(/^ +/, "")
954
-
955
- assert_triggered msg do
956
- @tc.assert_equal o1, o2
957
- end
958
- end
959
-
960
- def test_assert_equal_different_long
961
- msg = "--- expected
962
- +++ actual
963
- @@ -1 +1 @@
964
- -\"hahahahahahahahahahahahahahahahahahahaha\"
965
- +\"blahblahblahblahblahblahblahblahblahblah\"
966
- ".gsub(/^ +/, "")
967
-
968
- assert_triggered msg do
969
- o1 = "haha" * 10
970
- o2 = "blah" * 10
971
-
972
- @tc.assert_equal o1, o2
973
- end
974
- end
975
-
976
- def test_assert_equal_different_long_invisible
977
- msg = "No visible difference in the String#inspect output.
978
- You should look at the implementation of #== on String or its members.
979
- \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "")
980
-
981
- assert_triggered msg do
982
- o1 = "blah" * 10
983
- o2 = "blah" * 10
984
- def o1.== _
985
- false
986
- end
987
- @tc.assert_equal o1, o2
988
- end
989
- end
990
-
991
- def test_assert_equal_different_long_msg
992
- msg = "message.
993
- --- expected
994
- +++ actual
995
- @@ -1 +1 @@
996
- -\"hahahahahahahahahahahahahahahahahahahaha\"
997
- +\"blahblahblahblahblahblahblahblahblahblah\"
998
- ".gsub(/^ +/, "")
999
-
1000
- assert_triggered msg do
1001
- o1 = "haha" * 10
1002
- o2 = "blah" * 10
1003
- @tc.assert_equal o1, o2, "message"
1004
- end
1005
- end
1006
-
1007
- def test_assert_equal_different_short
1008
- assert_triggered util_msg(1, 2) do
1009
- @tc.assert_equal 1, 2
1010
- end
1011
- end
1012
-
1013
- def test_assert_equal_different_short_msg
1014
- assert_triggered util_msg(1, 2, "message") do
1015
- @tc.assert_equal 1, 2, "message"
1016
- end
1017
- end
1018
-
1019
- def test_assert_equal_different_short_multiline
1020
- msg = "--- expected\n+++ actual\n@@ -1,2 +1,2 @@\n \"a\n-b\"\n+c\"\n"
1021
- assert_triggered msg do
1022
- @tc.assert_equal "a\nb", "a\nc"
1023
- end
1024
- end
1025
-
1026
- def test_assert_equal_does_not_allow_lhs_nil
1027
- if Minitest::VERSION =~ /^6/ then
1028
- warn "Time to strip the MT5 test"
1029
-
1030
- @assertion_count += 1
1031
- assert_triggered(/Use assert_nil if expecting nil/) do
1032
- @tc.assert_equal nil, nil
1033
- end
1034
- else
1035
- err_re = /Use assert_nil if expecting nil from .*test_minitest_test.rb/
1036
- err_re = "" if $-w.nil?
1037
-
1038
- assert_output "", err_re do
1039
- @tc.assert_equal nil, nil
1040
- end
1041
- end
1042
- end
1043
-
1044
- def test_assert_equal_does_not_allow_lhs_nil_triggered
1045
- assert_triggered "Expected: nil\n Actual: false" do
1046
- @tc.assert_equal nil, false
1047
- end
1048
- end
1049
-
1050
- def test_assert_in_delta
1051
- @tc.assert_in_delta 0.0, 1.0 / 1000, 0.1
1052
- end
1053
-
1054
- def test_delta_consistency
1055
- @assertion_count = 2
1056
-
1057
- @tc.assert_in_delta 0, 1, 1
1058
-
1059
- assert_triggered "Expected |0 - 1| (1) to not be <= 1." do
1060
- @tc.refute_in_delta 0, 1, 1
1061
- end
1062
- end
1063
-
1064
- def test_assert_in_delta_triggered
1065
- x = maglev? ? "9.999999xxxe-07" : "1.0e-06"
1066
- assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do
1067
- @tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001
1068
- end
1069
- end
1070
-
1071
- def test_assert_in_epsilon
1072
- @assertion_count = 10
1073
-
1074
- @tc.assert_in_epsilon 10_000, 9991
1075
- @tc.assert_in_epsilon 9991, 10_000
1076
- @tc.assert_in_epsilon 1.0, 1.001
1077
- @tc.assert_in_epsilon 1.001, 1.0
1078
-
1079
- @tc.assert_in_epsilon 10_000, 9999.1, 0.0001
1080
- @tc.assert_in_epsilon 9999.1, 10_000, 0.0001
1081
- @tc.assert_in_epsilon 1.0, 1.0001, 0.0001
1082
- @tc.assert_in_epsilon 1.0001, 1.0, 0.0001
1083
-
1084
- @tc.assert_in_epsilon(-1, -1)
1085
- @tc.assert_in_epsilon(-10_000, -9991)
1086
- end
1087
-
1088
- def test_epsilon_consistency
1089
- @assertion_count = 2
1090
-
1091
- @tc.assert_in_epsilon 1.0, 1.001
1092
-
1093
- msg = "Expected |1.0 - 1.001| (0.000999xxx) to not be <= 0.001."
1094
- assert_triggered msg do
1095
- @tc.refute_in_epsilon 1.0, 1.001
1096
- end
1097
- end
1098
-
1099
- def test_assert_in_epsilon_triggered
1100
- assert_triggered "Expected |10000 - 9990| (10) to be <= 9.99." do
1101
- @tc.assert_in_epsilon 10_000, 9990
1102
- end
1103
- end
1104
-
1105
- def test_assert_in_epsilon_triggered_negative_case
1106
- x = (RUBY18 and not maglev?) ? "0.1" : "0.100000xxx"
1107
- y = maglev? ? "0.100000xxx" : "0.1"
1108
- assert_triggered "Expected |-1.1 - -1| (#{x}) to be <= #{y}." do
1109
- @tc.assert_in_epsilon(-1.1, -1, 0.1)
1110
- end
1111
- end
1112
-
1113
- def test_assert_includes
1114
- @assertion_count = 2
1115
-
1116
- @tc.assert_includes [true], true
1117
- end
1118
-
1119
- def test_assert_includes_triggered
1120
- @assertion_count = 3
1121
-
1122
- e = @tc.assert_raises Minitest::Assertion do
1123
- @tc.assert_includes [true], false
1124
- end
1125
-
1126
- expected = "Expected [true] to include false."
1127
- assert_equal expected, e.message
1128
- end
1129
-
1130
- def test_assert_instance_of
1131
- @tc.assert_instance_of String, "blah"
1132
- end
1133
-
1134
- def test_assert_instance_of_triggered
1135
- assert_triggered 'Expected "blah" to be an instance of Array, not String.' do
1136
- @tc.assert_instance_of Array, "blah"
1137
- end
1138
- end
1139
-
1140
- def test_assert_kind_of
1141
- @tc.assert_kind_of String, "blah"
1142
- end
1143
-
1144
- def test_assert_kind_of_triggered
1145
- assert_triggered 'Expected "blah" to be a kind of Array, not String.' do
1146
- @tc.assert_kind_of Array, "blah"
1147
- end
1148
- end
1149
-
1150
- def test_assert_match
1151
- @assertion_count = 2
1152
- @tc.assert_match(/\w+/, "blah blah blah")
1153
- end
1154
-
1155
- def test_assert_match_matcher_object
1156
- @assertion_count = 2
1157
-
1158
- pattern = Object.new
1159
- def pattern.=~ _; true end
1160
-
1161
- @tc.assert_match pattern, 5
1162
- end
1163
-
1164
- def test_assert_match_matchee_to_str
1165
- @assertion_count = 2
1166
-
1167
- obj = Object.new
1168
- def obj.to_str; "blah" end
1169
-
1170
- @tc.assert_match "blah", obj
1171
- end
1172
-
1173
- def test_assert_match_object_triggered
1174
- @assertion_count = 2
1175
-
1176
- pattern = Object.new
1177
- def pattern.=~ _; false end
1178
- def pattern.inspect; "[Object]" end
1179
-
1180
- assert_triggered "Expected [Object] to match 5." do
1181
- @tc.assert_match pattern, 5
1182
- end
1183
- end
1184
-
1185
- def test_assert_match_triggered
1186
- @assertion_count = 2
1187
- assert_triggered 'Expected /\d+/ to match "blah blah blah".' do
1188
- @tc.assert_match(/\d+/, "blah blah blah")
1189
- end
1190
- end
1191
-
1192
- def test_assert_nil
1193
- @tc.assert_nil nil
1194
- end
1195
-
1196
- def test_assert_nil_triggered
1197
- assert_triggered "Expected 42 to be nil." do
1198
- @tc.assert_nil 42
1199
- end
1200
- end
1201
-
1202
- def test_assert_operator
1203
- @tc.assert_operator 2, :>, 1
1204
- end
1205
-
1206
- def test_assert_operator_bad_object
1207
- bad = Object.new
1208
- def bad.== _; true end
1209
-
1210
- @tc.assert_operator bad, :equal?, bad
1211
- end
1212
-
1213
- def test_assert_operator_triggered
1214
- assert_triggered "Expected 2 to be < 1." do
1215
- @tc.assert_operator 2, :<, 1
1216
- end
1217
- end
1218
-
1219
- def test_assert_output_both
1220
- @assertion_count = 2
1221
-
1222
- @tc.assert_output "yay", "blah" do
1223
- print "yay"
1224
- $stderr.print "blah"
1225
- end
1226
- end
1227
-
1228
- def test_assert_output_both_regexps
1229
- @assertion_count = 4
1230
-
1231
- @tc.assert_output(/y.y/, /bl.h/) do
1232
- print "yay"
1233
- $stderr.print "blah"
1234
- end
1235
- end
1236
-
1237
- def test_assert_output_err
1238
- @tc.assert_output nil, "blah" do
1239
- $stderr.print "blah"
1240
- end
1241
- end
1242
-
1243
- def test_assert_output_neither
1244
- @assertion_count = 0
1245
-
1246
- @tc.assert_output do
1247
- # do nothing
1248
- end
1249
- end
1250
-
1251
- def test_assert_output_out
1252
- @tc.assert_output "blah" do
1253
- print "blah"
1254
- end
1255
- end
1256
-
1257
- def test_assert_output_triggered_both
1258
- assert_triggered util_msg("blah", "blah blah", "In stderr") do
1259
- @tc.assert_output "yay", "blah" do
1260
- print "boo"
1261
- $stderr.print "blah blah"
1262
- end
1263
- end
1264
- end
1265
-
1266
- def test_assert_output_triggered_err
1267
- assert_triggered util_msg("blah", "blah blah", "In stderr") do
1268
- @tc.assert_output nil, "blah" do
1269
- $stderr.print "blah blah"
1270
- end
1271
- end
1272
- end
1273
-
1274
- def test_assert_output_triggered_out
1275
- assert_triggered util_msg("blah", "blah blah", "In stdout") do
1276
- @tc.assert_output "blah" do
1277
- print "blah blah"
1278
- end
1279
- end
1280
- end
1281
-
1282
- def test_assert_predicate
1283
- @tc.assert_predicate "", :empty?
1284
- end
1285
-
1286
- def test_assert_predicate_triggered
1287
- assert_triggered 'Expected "blah" to be empty?.' do
1288
- @tc.assert_predicate "blah", :empty?
1289
- end
1290
- end
1291
-
1292
- def test_assert_raises
1293
- @tc.assert_raises RuntimeError do
1294
- raise "blah"
1295
- end
1296
- end
1297
-
1298
- def test_assert_raises_default
1299
- @tc.assert_raises do
1300
- raise StandardError, "blah"
1301
- end
1302
- end
1303
-
1304
- def test_assert_raises_default_triggered
1305
- e = assert_raises Minitest::Assertion do
1306
- @tc.assert_raises do
1307
- raise SomeError, "blah"
1308
- end
1309
- end
1310
-
1311
- expected = clean <<-EOM.chomp
1312
- [StandardError] exception expected, not
1313
- Class: <SomeError>
1314
- Message: <\"blah\">
1315
- ---Backtrace---
1316
- FILE:LINE:in \`test_assert_raises_default_triggered\'
1317
- ---------------
1318
- EOM
1319
-
1320
- actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
1321
- actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
1322
-
1323
- assert_equal expected, actual
1324
- end
1325
-
1326
- def test_assert_raises_module
1327
- @tc.assert_raises MyModule do
1328
- raise AnError
1329
- end
1330
- end
1331
-
1332
- ##
1333
- # *sigh* This is quite an odd scenario, but it is from real (albeit
1334
- # ugly) test code in ruby-core:
1335
- #
1336
- # http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29259
1337
-
1338
- def test_assert_raises_skip
1339
- @assertion_count = 0
1340
-
1341
- assert_triggered "skipped", Minitest::Skip do
1342
- @tc.assert_raises ArgumentError do
1343
- begin
1344
- raise "blah"
1345
- rescue
1346
- skip "skipped"
1347
- end
1348
- end
1349
- end
1350
- end
1351
-
1352
- def test_assert_raises_triggered_different
1353
- e = assert_raises Minitest::Assertion do
1354
- @tc.assert_raises RuntimeError do
1355
- raise SyntaxError, "icky"
1356
- end
1357
- end
1358
-
1359
- expected = clean <<-EOM.chomp
1360
- [RuntimeError] exception expected, not
1361
- Class: <SyntaxError>
1362
- Message: <\"icky\">
1363
- ---Backtrace---
1364
- FILE:LINE:in \`test_assert_raises_triggered_different\'
1365
- ---------------
1366
- EOM
1367
-
1368
- actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
1369
- actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
1370
-
1371
- assert_equal expected, actual
1372
- end
1373
-
1374
- def test_assert_raises_triggered_different_msg
1375
- e = assert_raises Minitest::Assertion do
1376
- @tc.assert_raises RuntimeError, "XXX" do
1377
- raise SyntaxError, "icky"
1378
- end
1379
- end
1380
-
1381
- expected = clean <<-EOM
1382
- XXX.
1383
- [RuntimeError] exception expected, not
1384
- Class: <SyntaxError>
1385
- Message: <\"icky\">
1386
- ---Backtrace---
1387
- FILE:LINE:in \`test_assert_raises_triggered_different_msg\'
1388
- ---------------
1389
- EOM
1390
-
1391
- actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
1392
- actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
1393
-
1394
- assert_equal expected.chomp, actual
1395
- end
1396
-
1397
- def test_assert_raises_triggered_none
1398
- e = assert_raises Minitest::Assertion do
1399
- @tc.assert_raises Minitest::Assertion do
1400
- # do nothing
1401
- end
1402
- end
1403
-
1404
- expected = "Minitest::Assertion expected but nothing was raised."
1405
-
1406
- assert_equal expected, e.message
1407
- end
1408
-
1409
- def test_assert_raises_triggered_none_msg
1410
- e = assert_raises Minitest::Assertion do
1411
- @tc.assert_raises Minitest::Assertion, "XXX" do
1412
- # do nothing
1413
- end
1414
- end
1415
-
1416
- expected = "XXX.\nMinitest::Assertion expected but nothing was raised."
1417
-
1418
- assert_equal expected, e.message
1419
- end
1420
-
1421
- def test_assert_raises_subclass
1422
- @tc.assert_raises StandardError do
1423
- raise AnError
1424
- end
1425
- end
1426
-
1427
- def test_assert_raises_subclass_triggered
1428
- e = assert_raises Minitest::Assertion do
1429
- @tc.assert_raises SomeError do
1430
- raise AnError, "some message"
1431
- end
1432
- end
1433
-
1434
- expected = clean <<-EOM
1435
- [SomeError] exception expected, not
1436
- Class: <AnError>
1437
- Message: <\"some message\">
1438
- ---Backtrace---
1439
- FILE:LINE:in \`test_assert_raises_subclass_triggered\'
1440
- ---------------
1441
- EOM
1442
-
1443
- actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
1444
- actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
1445
-
1446
- assert_equal expected.chomp, actual
1447
- end
1448
-
1449
- def test_assert_raises_exit
1450
- @tc.assert_raises SystemExit do
1451
- exit 1
1452
- end
1453
- end
1454
-
1455
- def test_assert_raises_signals
1456
- @tc.assert_raises SignalException do
1457
- raise SignalException, :INT
1458
- end
1459
- end
1460
-
1461
- def test_assert_respond_to
1462
- @tc.assert_respond_to "blah", :empty?
1463
- end
1464
-
1465
- def test_assert_respond_to_triggered
1466
- assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do
1467
- @tc.assert_respond_to "blah", :rawr!
1468
- end
1469
- end
1470
-
1471
- def test_assert_same
1472
- @assertion_count = 3
1473
-
1474
- o = "blah"
1475
- @tc.assert_same 1, 1
1476
- @tc.assert_same :blah, :blah
1477
- @tc.assert_same o, o
1478
- end
1479
-
1480
- def test_assert_same_triggered
1481
- @assertion_count = 2
1482
-
1483
- assert_triggered "Expected 2 (oid=N) to be the same as 1 (oid=N)." do
1484
- @tc.assert_same 1, 2
1485
- end
1486
-
1487
- s1 = "blah"
1488
- s2 = "blah"
1489
-
1490
- assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do
1491
- @tc.assert_same s1, s2
1492
- end
1493
- end
1494
-
1495
- def assert_deprecated name
1496
- dep = /DEPRECATED: #{name}. From #{__FILE__}:\d+(?::.*)?/
1497
- dep = "" if $-w.nil?
1498
-
1499
- assert_output nil, dep do
1500
- yield
1501
- end
1502
- end
1503
-
1504
- def test_assert_send
1505
- assert_deprecated :assert_send do
1506
- @tc.assert_send [1, :<, 2]
1507
- end
1508
- end
1509
-
1510
- def test_assert_send_bad
1511
- assert_deprecated :assert_send do
1512
- assert_triggered "Expected 1.>(*[2]) to return true." do
1513
- @tc.assert_send [1, :>, 2]
1514
- end
1515
- end
1516
- end
1517
-
1518
- def test_assert_silent
1519
- @assertion_count = 2
1520
-
1521
- @tc.assert_silent do
1522
- # do nothing
1523
- end
1524
- end
1525
-
1526
- def test_assert_silent_triggered_err
1527
- assert_triggered util_msg("", "blah blah", "In stderr") do
1528
- @tc.assert_silent do
1529
- $stderr.print "blah blah"
1530
- end
1531
- end
1532
- end
1533
-
1534
- def test_assert_silent_triggered_out
1535
- @assertion_count = 2
1536
-
1537
- assert_triggered util_msg("", "blah blah", "In stdout") do
1538
- @tc.assert_silent do
1539
- print "blah blah"
1540
- end
1541
- end
1542
- end
1543
-
1544
- def test_assert_throws
1545
- @tc.assert_throws :blah do
1546
- throw :blah
1547
- end
1548
- end
1549
-
1550
- def test_assert_throws_name_error
1551
- @tc.assert_raises NameError do
1552
- @tc.assert_throws :blah do
1553
- raise NameError
1554
- end
1555
- end
1556
- end
1557
-
1558
- def test_assert_throws_argument_exception
1559
- @tc.assert_raises ArgumentError do
1560
- @tc.assert_throws :blah do
1561
- raise ArgumentError
1562
- end
1563
- end
1564
- end
1565
-
1566
- def test_assert_throws_different
1567
- assert_triggered "Expected :blah to have been thrown, not :not_blah." do
1568
- @tc.assert_throws :blah do
1569
- throw :not_blah
1570
- end
1571
- end
1572
- end
1573
-
1574
- def test_assert_throws_unthrown
1575
- assert_triggered "Expected :blah to have been thrown." do
1576
- @tc.assert_throws :blah do
1577
- # do nothing
1578
- end
1579
- end
1580
- end
1581
-
1582
- def test_capture_io
1583
- @assertion_count = 0
1584
-
1585
- non_verbose do
1586
- out, err = capture_io do
1587
- puts "hi"
1588
- $stderr.puts "bye!"
1589
- end
1590
-
1591
- assert_equal "hi\n", out
1592
- assert_equal "bye!\n", err
1593
- end
1594
- end
1595
-
1596
- def test_capture_subprocess_io
1597
- @assertion_count = 0
1598
-
1599
- non_verbose do
1600
- out, err = capture_subprocess_io do
1601
- system("echo hi")
1602
- system("echo bye! 1>&2")
870
+ def sample_test_case(rand)
871
+ srand rand
872
+ Class.new FakeNamedTest do
873
+ 100.times do |i|
874
+ define_method("test_#{i}") { assert true }
1603
875
  end
1604
-
1605
- assert_equal "hi\n", out
1606
- assert_equal "bye!", err.strip
1607
- end
1608
- end
1609
-
1610
- def test_class_asserts_match_refutes
1611
- @assertion_count = 0
1612
-
1613
- methods = Minitest::Assertions.public_instance_methods
1614
- methods.map!(&:to_s) if Symbol === methods.first
1615
-
1616
- # These don't have corresponding refutes _on purpose_. They're
1617
- # useless and will never be added, so don't bother.
1618
- ignores = %w[assert_output assert_raises assert_send
1619
- assert_silent assert_throws assert_mock]
1620
-
1621
- # These are test/unit methods. I'm not actually sure why they're still here
1622
- ignores += %w[assert_no_match assert_not_equal assert_not_nil
1623
- assert_not_same assert_nothing_raised
1624
- assert_nothing_thrown assert_raise]
1625
-
1626
- asserts = methods.grep(/^assert/).sort - ignores
1627
- refutes = methods.grep(/^refute/).sort - ignores
1628
-
1629
- assert_empty refutes.map { |n| n.sub(/^refute/, "assert") } - asserts
1630
- assert_empty asserts.map { |n| n.sub(/^assert/, "refute") } - refutes
1631
- end
1632
-
1633
- def test_flunk
1634
- assert_triggered "Epic Fail!" do
1635
- @tc.flunk
1636
- end
1637
- end
1638
-
1639
- def test_flunk_message
1640
- assert_triggered @zomg do
1641
- @tc.flunk @zomg
1642
- end
1643
- end
1644
-
1645
- def test_message
1646
- @assertion_count = 0
1647
-
1648
- assert_equal "blah2.", @tc.message { "blah2" }.call
1649
- assert_equal "blah2.", @tc.message("") { "blah2" }.call
1650
- assert_equal "blah1.\nblah2.", @tc.message(:blah1) { "blah2" }.call
1651
- assert_equal "blah1.\nblah2.", @tc.message("blah1") { "blah2" }.call
1652
-
1653
- message = proc { "blah1" }
1654
- assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
1655
-
1656
- message = @tc.message { "blah1" }
1657
- assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
1658
- end
1659
-
1660
- def test_message_message
1661
- assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
1662
- @tc.assert_equal 1, 2, message { "whoops" }
1663
- end
1664
- end
1665
-
1666
- def test_message_lambda
1667
- assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
1668
- @tc.assert_equal 1, 2, lambda { "whoops" }
1669
- end
1670
- end
1671
-
1672
- def test_message_deferred
1673
- @assertion_count, var = 0, nil
1674
-
1675
- msg = message { var = "blah" }
1676
-
1677
- assert_nil var
1678
-
1679
- msg.call
1680
-
1681
- assert_equal "blah", var
1682
- end
1683
-
1684
- def test_pass
1685
- @tc.pass
1686
- end
1687
-
1688
- def test_prints
1689
- printer = Class.new { extend Minitest::Assertions }
1690
- @tc.assert_equal '"test"', printer.mu_pp(ImmutableString.new "test")
1691
- end
1692
-
1693
- def test_refute
1694
- @assertion_count = 2
1695
-
1696
- @tc.assert_equal false, @tc.refute(false), "returns false on success"
1697
- end
1698
-
1699
- def test_refute_empty
1700
- @assertion_count = 2
1701
-
1702
- @tc.refute_empty [1]
1703
- end
1704
-
1705
- def test_refute_empty_triggered
1706
- @assertion_count = 2
1707
-
1708
- assert_triggered "Expected [] to not be empty." do
1709
- @tc.refute_empty []
1710
- end
1711
- end
1712
-
1713
- def test_refute_equal
1714
- @tc.refute_equal "blah", "yay"
1715
- end
1716
-
1717
- def test_refute_equal_triggered
1718
- assert_triggered 'Expected "blah" to not be equal to "blah".' do
1719
- @tc.refute_equal "blah", "blah"
1720
- end
1721
- end
1722
-
1723
- def test_refute_in_delta
1724
- @tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001
1725
- end
1726
-
1727
- def test_refute_in_delta_triggered
1728
- x = maglev? ? "0.100000xxx" : "0.1"
1729
- assert_triggered "Expected |0.0 - 0.001| (0.001) to not be <= #{x}." do
1730
- @tc.refute_in_delta 0.0, 1.0 / 1000, 0.1
1731
- end
1732
- end
1733
-
1734
- def test_refute_in_epsilon
1735
- @tc.refute_in_epsilon 10_000, 9990-1
1736
- end
1737
-
1738
- def test_refute_in_epsilon_triggered
1739
- assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do
1740
- @tc.refute_in_epsilon 10_000, 9990
1741
- flunk
1742
- end
1743
- end
1744
-
1745
- def test_refute_includes
1746
- @assertion_count = 2
1747
-
1748
- @tc.refute_includes [true], false
1749
- end
1750
-
1751
- def test_refute_includes_triggered
1752
- @assertion_count = 3
1753
-
1754
- e = @tc.assert_raises Minitest::Assertion do
1755
- @tc.refute_includes [true], true
1756
- end
1757
-
1758
- expected = "Expected [true] to not include true."
1759
- assert_equal expected, e.message
1760
- end
1761
-
1762
- def test_refute_instance_of
1763
- @tc.refute_instance_of Array, "blah"
1764
- end
1765
-
1766
- def test_refute_instance_of_triggered
1767
- assert_triggered 'Expected "blah" to not be an instance of String.' do
1768
- @tc.refute_instance_of String, "blah"
1769
- end
1770
- end
1771
-
1772
- def test_refute_kind_of
1773
- @tc.refute_kind_of Array, "blah"
1774
- end
1775
-
1776
- def test_refute_kind_of_triggered
1777
- assert_triggered 'Expected "blah" to not be a kind of String.' do
1778
- @tc.refute_kind_of String, "blah"
1779
- end
1780
- end
1781
-
1782
- def test_refute_match
1783
- @assertion_count = 2
1784
- @tc.refute_match(/\d+/, "blah blah blah")
1785
- end
1786
-
1787
- def test_refute_match_matcher_object
1788
- @assertion_count = 2
1789
- @tc.refute_match Object.new, 5 # default #=~ returns false
1790
- end
1791
-
1792
- def test_refute_match_object_triggered
1793
- @assertion_count = 2
1794
-
1795
- pattern = Object.new
1796
- def pattern.=~ _; true end
1797
- def pattern.inspect; "[Object]" end
1798
-
1799
- assert_triggered "Expected [Object] to not match 5." do
1800
- @tc.refute_match pattern, 5
1801
- end
1802
- end
1803
-
1804
- def test_refute_match_triggered
1805
- @assertion_count = 2
1806
- assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do
1807
- @tc.refute_match(/\w+/, "blah blah blah")
1808
- end
1809
- end
1810
-
1811
- def test_refute_nil
1812
- @tc.refute_nil 42
1813
- end
1814
-
1815
- def test_refute_nil_triggered
1816
- assert_triggered "Expected nil to not be nil." do
1817
- @tc.refute_nil nil
1818
- end
1819
- end
1820
-
1821
- def test_refute_predicate
1822
- @tc.refute_predicate "42", :empty?
1823
- end
1824
-
1825
- def test_refute_predicate_triggered
1826
- assert_triggered 'Expected "" to not be empty?.' do
1827
- @tc.refute_predicate "", :empty?
1828
- end
1829
- end
1830
-
1831
- def test_refute_operator
1832
- @tc.refute_operator 2, :<, 1
1833
- end
1834
-
1835
- def test_refute_operator_bad_object
1836
- bad = Object.new
1837
- def bad.== _; true end
1838
-
1839
- @tc.refute_operator true, :equal?, bad
1840
- end
1841
-
1842
- def test_refute_operator_triggered
1843
- assert_triggered "Expected 2 to not be > 1." do
1844
- @tc.refute_operator 2, :>, 1
1845
- end
1846
- end
1847
-
1848
- def test_refute_respond_to
1849
- @tc.refute_respond_to "blah", :rawr!
1850
- end
1851
-
1852
- def test_refute_respond_to_triggered
1853
- assert_triggered 'Expected "blah" to not respond to empty?.' do
1854
- @tc.refute_respond_to "blah", :empty?
1855
- end
1856
- end
1857
-
1858
- def test_refute_same
1859
- @tc.refute_same 1, 2
1860
- end
1861
-
1862
- def test_refute_same_triggered
1863
- assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do
1864
- @tc.refute_same 1, 1
1865
- end
1866
- end
1867
-
1868
- def test_skip
1869
- @assertion_count = 0
1870
-
1871
- assert_triggered "haha!", Minitest::Skip do
1872
- @tc.skip "haha!"
1873
- end
876
+ end.runnable_methods
1874
877
  end
1875
878
 
879
+ # srand varies with OS
1876
880
  def test_runnable_methods_random
1877
881
  @assertion_count = 0
1878
882
 
1879
- sample_test_case = Class.new FakeNamedTest do
1880
- def self.test_order; :random; end
1881
- def test_test1; assert "does not matter" end
1882
- def test_test2; assert "does not matter" end
1883
- def test_test3; assert "does not matter" end
1884
- end
883
+ random_tests_1 = sample_test_case 42
884
+ random_tests_2 = sample_test_case 42
885
+ random_tests_3 = sample_test_case 1_000
1885
886
 
1886
- srand 42
1887
- expected = case
1888
- when maglev? then
1889
- %w[test_test2 test_test3 test_test1]
1890
- else
1891
- %w[test_test2 test_test1 test_test3]
1892
- end
1893
- assert_equal expected, sample_test_case.runnable_methods
887
+ assert_equal random_tests_1, random_tests_2
888
+ refute_equal random_tests_1, random_tests_3
1894
889
  end
1895
890
 
1896
891
  def test_runnable_methods_sorted
@@ -1929,32 +924,18 @@ class TestMinitestUnitTestCase < Minitest::Test
1929
924
  end
1930
925
  end
1931
926
 
1932
- def assert_triggered expected, klass = Minitest::Assertion
1933
- e = assert_raises klass do
1934
- yield
1935
- end
1936
-
1937
- msg = e.message.sub(/(---Backtrace---).*/m, '\1')
1938
- msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)")
1939
- msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform
1940
-
1941
- assert_msg = Regexp === expected ? :assert_match : :assert_equal
1942
- self.send assert_msg, expected, msg
1943
- end
1944
-
1945
- def util_msg exp, act, msg = nil
1946
- s = "Expected: #{exp.inspect}\n Actual: #{act.inspect}"
1947
- s = "#{msg}.\n#{s}" if msg
1948
- s
927
+ def test_autorun_does_not_affect_fork_success_status
928
+ @assertion_count = 0
929
+ skip "windows doesn't have skip" unless Process.respond_to?(:fork)
930
+ Process.waitpid(fork {})
931
+ assert_equal true, $?.success?
1949
932
  end
1950
933
 
1951
- def without_diff
1952
- old_diff = Minitest::Assertions.diff
1953
- Minitest::Assertions.diff = nil
1954
-
1955
- yield
1956
- ensure
1957
- Minitest::Assertions.diff = old_diff
934
+ def test_autorun_does_not_affect_fork_exit_status
935
+ @assertion_count = 0
936
+ skip "windows doesn't have skip" unless Process.respond_to?(:fork)
937
+ Process.waitpid(fork { exit 42 })
938
+ assert_equal 42, $?.exitstatus
1958
939
  end
1959
940
  end
1960
941
 
@@ -1972,8 +953,26 @@ class TestMinitestGuard < Minitest::Test
1972
953
  end
1973
954
 
1974
955
  def test_rubinius_eh
1975
- assert self.class.rubinius? "rbx"
1976
- assert self.rubinius? "rbx"
956
+ assert_output "", /DEPRECATED/ do
957
+ assert self.class.rubinius? "rbx"
958
+ end
959
+ assert_output "", /DEPRECATED/ do
960
+ assert self.rubinius? "rbx"
961
+ end
962
+ end
963
+
964
+ def test_maglev_eh
965
+ assert_output "", /DEPRECATED/ do
966
+ assert self.class.maglev? "maglev"
967
+ end
968
+ assert_output "", /DEPRECATED/ do
969
+ assert self.maglev? "maglev"
970
+ end
971
+ end
972
+
973
+ def test_osx_eh
974
+ assert self.class.osx? "darwin"
975
+ assert self.osx? "darwin"
1977
976
  end
1978
977
 
1979
978
  def test_windows_eh
@@ -2087,12 +1086,12 @@ class TestMinitestUnitRecording < MetaMetaMetaTestCase
2087
1086
 
2088
1087
  exp = clean "
2089
1088
  Error:
2090
- #<Class:0xXXX>#test_method:
1089
+ FakeNamedTestXX#test_method:
2091
1090
  AnError: AnError
2092
1091
  FILE:LINE:in `test_method'
2093
1092
 
2094
1093
  Error:
2095
- #<Class:0xXXX>#test_method:
1094
+ FakeNamedTestXX#test_method:
2096
1095
  RuntimeError: unhandled exception
2097
1096
  FILE:LINE:in `teardown'
2098
1097
  "